UNPKG

@coorpacademy/progression-engine

Version:

151 lines (150 loc) 4.1 kB
"use strict"; var _filter2 = _interopRequireDefault(require("lodash/fp/filter")); var _concat2 = _interopRequireDefault(require("lodash/fp/concat")); var _omit2 = _interopRequireDefault(require("lodash/fp/omit")); var _ava = _interopRequireDefault(require("ava")); var _config = require("../../config"); var _ = require(".."); var _slides = _interopRequireDefault(require("./fixtures/slides")); var _states = require("./fixtures/states"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const config = (0, _config.getConfig)({ ref: 'learner', version: '1' }); const state = { ..._states.stateBeforeGettingNextContent, lives: 0 }; (0, _ava.default)('should return an action linking to a new slide', t => { const availableContent = [{ ref: '1.A1', slides: (0, _filter2.default)({ chapter_id: '1.A1' }, _slides.default), rules: null }]; const result = (0, _.computeNextStepOnAcceptExtraLife)(config, _states.stateBeforeAcceptExtraLife, availableContent); if (!result) { throw new Error('action should not be falsy'); } t.deepEqual((0, _omit2.default)(['payload.nextContent.ref'], result), { type: 'extraLifeAccepted', payload: { content: { ref: 'extraLife', type: 'node' }, nextContent: { type: 'slide' }, instructions: null } }); t.regex(result.payload.nextContent.ref, /^1\.A1\.[3-9]+$/); }); (0, _ava.default)('should return an action linking to a new slide with a chapter without slides', t => { const availableContent = [{ ref: '1.A1', slides: (0, _concat2.default)((0, _filter2.default)({ _id: '1.A1.1' }, _slides.default), (0, _filter2.default)({ _id: '1.A1.2' }, _slides.default)), rules: null }, { ref: '1.1.A1', slides: [], rules: null }, { ref: '2.A1', slides: (0, _filter2.default)({ chapter_id: '2.A1' }, _slides.default), rules: null }]; const result = (0, _.computeNextStepOnAcceptExtraLife)(config, _states.stateBeforeAcceptExtraLife, availableContent); if (!result) { throw new Error('action should not be falsy'); } t.deepEqual((0, _omit2.default)(['payload.nextContent.ref'], result), { type: 'extraLifeAccepted', payload: { content: { ref: 'extraLife', type: 'node' }, nextContent: { type: 'slide' }, instructions: null } }); t.regex(result.payload.nextContent.ref, /^2\.A1\.[1-9]+$/); }); (0, _ava.default)('should return null if there is no available content', t => { const availableContent = []; t.is((0, _.computeNextStepOnAcceptExtraLife)(config, _states.stateBeforeAcceptExtraLife, availableContent), null); }); (0, _ava.default)('should not apply the lives increment twice when switching chapters', t => { const availableContent = [{ ref: '1.A1', slides: (0, _filter2.default)({ chapter_id: '1.A1' }, _slides.default), rules: [{ source: { type: 'slide', ref: '*' }, destination: { type: 'chapter', ref: '2.A1' }, instructions: [], conditions: [], priority: 10 }] }, { ref: '2.A1', slides: (0, _filter2.default)({ chapter_id: '2.A1' }, _slides.default), rules: [{ source: { type: 'slide', ref: '' }, destination: { type: 'slide', ref: '2.A1.2' }, instructions: [], conditions: [{ target: { scope: 'variable', field: 'lives' }, operator: 'EQUALS', values: [1] }], priority: 10 }] }]; const result = (0, _.computeNextStepOnAcceptExtraLife)(config, state, availableContent); t.deepEqual(result, { type: 'extraLifeAccepted', payload: { content: { ref: 'extraLife', type: 'node' }, nextContent: { type: 'slide', ref: '2.A1.2' }, instructions: [] } }); }); //# sourceMappingURL=compute-next-step-on-accept-extra-life.js.map