diff --git a/test/reducers.test.js b/test/reducers.test.js index df25e406a..f9ec79e8f 100644 --- a/test/reducers.test.js +++ b/test/reducers.test.js @@ -65,13 +65,14 @@ describe('fold', function() { expect(result.foldedSteps[0]).to.equal("top . aa") }); - it('should not list the same question in folded and unfolded', function() { + it('should list questions with defaults as extra steps', function() { let fakeState = {} let stateSelector = state => name => fakeState[name] let rawRules = [ // TODO - this won't work without the indirection, figure out why - {nom: "startHere", formule: {somme: ["a","b","c"]}, espace: "top"}, + {nom: "startHere", formule: {somme: ["a","b","c"]}, espace: "top", + simulateur: {"par défaut": {"top . bb": 1, "top . cc":0}}}, {nom: "a", espace: "top", formule: "aa"}, {nom: "b", espace: "top", formule: "bb"}, {nom: "c", espace: "top", formule: "cc"}, @@ -84,20 +85,53 @@ describe('fold', function() { var step1 = reducer({},{type:'START_CONVERSATION', rootVariable: 'startHere'}) fakeState['top . aa'] = 1 var step2 = reducer(step1,{type:'STEP_ACTION', name: 'fold', step: 'top . aa'}) - fakeState['top . bb'] = 1 - var step3 = reducer(step2,{type:'STEP_ACTION', name: 'fold', step: 'top . bb'}) - var step4 = reducer(step3,{type:'STEP_ACTION', name: 'unfold', step: 'top . aa'}) - var step5 = reducer(step4,{type:'STEP_ACTION', name: 'unfold', step: 'top . bb'}) - var step6 = reducer(step5,{type:'STEP_ACTION', name: 'fold', step: 'top . bb'}) - let result = step6 + let result = step2 + + expect(result).to.have.property('currentQuestion') + expect(result.currentQuestion).to.be.an('null') + expect(result).to.have.property('foldedSteps') + expect(result.foldedSteps).to.have.lengthOf(1) + expect(result.foldedSteps[0]).to.equal("top . aa") + expect(result).to.have.property('extraSteps') + expect(result.extraSteps).to.have.lengthOf(2) + expect(result.extraSteps[0]).to.equal("top . bb") + expect(result.extraSteps[1]).to.equal("top . cc") + }); + + it('should return questions with a default to extra steps', function() { + let fakeState = {} + let stateSelector = state => name => fakeState[name] + + let rawRules = [ + // TODO - this won't work without the indirection, figure out why + {nom: "startHere", formule: {somme: ["a","b","c"]}, espace: "top", + simulateur: {"par défaut": {"top . bb": 1, "top . cc":0}}}, + {nom: "a", espace: "top", formule: "aa"}, + {nom: "b", espace: "top", formule: "bb"}, + {nom: "c", espace: "top", formule: "cc"}, + {nom: "aa", question: "?", titre: "a", espace: "top"}, + {nom: "bb", question: "?", titre: "b", espace: "top"}, + {nom: "cc", question: "?", titre: "c", espace: "top"}], + rules = rawRules.map(enrichRule), + reducer = reduceSteps(tracker, rules, stateSelector) + + var step1 = reducer({},{type:'START_CONVERSATION', rootVariable: 'startHere'}) + fakeState['top . aa'] = 1 + var step2 = reducer(step1,{type:'STEP_ACTION', name: 'fold', step: 'top . aa'}) + var step3 = reducer(step2,{type:'STEP_ACTION', name: 'unfold', step: 'top . bb'}) + var step4 = reducer(step3,{type:'STEP_ACTION', name: 'unfold', step: 'top . cc'}) + + let result = step4 expect(result).to.have.property('currentQuestion') expect(result.currentQuestion).to.equal("top . cc") expect(result).to.have.property('foldedSteps') - expect(result.foldedSteps).to.have.lengthOf(2) + expect(result.foldedSteps).to.have.lengthOf(1) expect(result.foldedSteps[0]).to.equal("top . aa") - expect(result.foldedSteps[1]).to.equal("top . bb") + expect(result).to.have.property('extraSteps') + expect(result.extraSteps).to.have.lengthOf(1) + expect(result.extraSteps[0]).to.equal("top . bb") }); });