@coorpacademy/progression-engine
Version:
151 lines (150 loc) • 4.1 kB
JavaScript
"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