@coorpacademy/app-review 0.1.21 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/actions/api/fetch-correction.d.ts +11 -0
- package/es/actions/api/fetch-correction.js +19 -0
- package/es/actions/api/fetch-skills.d.ts +2 -2
- package/es/actions/api/fetch-skills.js +3 -3
- package/es/actions/api/fetch-slide.js +1 -1
- package/es/actions/api/post-answer.js +3 -5
- package/es/actions/api/post-progression.js +2 -4
- package/es/actions/api/test/fetch-correction.test.d.ts +1 -0
- package/es/actions/api/test/fetch-correction.test.js +73 -0
- package/es/actions/api/test/fetch-skills.test.js +3 -1
- package/es/actions/api/test/fetch-slide.test.js +2 -0
- package/es/actions/api/test/post-answer.test.js +12 -7
- package/es/actions/api/test/post-progression.test.js +3 -1
- package/es/actions/ui/test/answers.test.js +1 -1
- package/es/reducers/data/index.d.ts +2 -2
- package/es/reducers/data/slides.js +2 -2
- package/es/reducers/data/test/token.test.js +3 -3
- package/es/reducers/data/token.d.ts +2 -2
- package/es/reducers/data/token.js +1 -1
- package/es/reducers/index.d.ts +1 -1
- package/es/reducers/ui/current-slide-ref.js +1 -1
- package/es/services/fetch-slide.js +1 -1
- package/es/services/post-answer.js +3 -3
- package/es/services/post-progression.js +2 -2
- package/es/services/test/fetch-slide.test.js +1 -1
- package/es/services/test/post-answer.test.js +9 -1
- package/es/services/test/post-progression.test.js +12 -1
- package/es/test/util/services.mock.d.ts +2 -1
- package/es/test/util/services.mock.js +2 -2
- package/es/types/common.d.ts +1 -1
- package/es/views/slides/test/fixtures/free-text.js +1 -1
- package/es/views/slides/test/fixtures/qcm-drag.js +1 -1
- package/es/views/slides/test/fixtures/qcm-graphic.js +1 -1
- package/es/views/slides/test/fixtures/qcm.js +1 -1
- package/es/views/slides/test/fixtures/slider.js +1 -1
- package/es/views/slides/test/fixtures/template.js +1 -1
- package/es/views/slides/test/slide.template.on-change.test.js +3 -3
- package/lib/actions/api/fetch-correction.d.ts +11 -0
- package/lib/actions/api/fetch-correction.js +20 -0
- package/lib/actions/api/fetch-skills.d.ts +2 -2
- package/lib/actions/api/fetch-skills.js +8 -55
- package/lib/actions/api/fetch-slide.js +1 -1
- package/lib/actions/api/post-answer.js +3 -5
- package/lib/actions/api/post-progression.js +2 -4
- package/lib/actions/api/test/fetch-correction.test.d.ts +1 -0
- package/lib/actions/api/test/fetch-correction.test.js +133 -0
- package/lib/actions/api/test/fetch-skills.test.js +3 -1
- package/lib/actions/api/test/fetch-slide.test.js +2 -0
- package/lib/actions/api/test/post-answer.test.js +12 -7
- package/lib/actions/api/test/post-progression.test.js +3 -1
- package/lib/actions/ui/test/answers.test.js +1 -1
- package/lib/reducers/data/index.d.ts +2 -2
- package/lib/reducers/data/slides.js +2 -2
- package/lib/reducers/data/test/token.test.js +3 -3
- package/lib/reducers/data/token.d.ts +2 -2
- package/lib/reducers/data/token.js +1 -1
- package/lib/reducers/index.d.ts +1 -1
- package/lib/reducers/ui/current-slide-ref.js +1 -1
- package/lib/services/fetch-slide.js +1 -1
- package/lib/services/post-answer.js +4 -4
- package/lib/services/post-progression.js +2 -2
- package/lib/services/test/fetch-slide.test.js +1 -1
- package/lib/services/test/post-answer.test.js +9 -1
- package/lib/services/test/post-progression.test.js +12 -1
- package/lib/test/util/services.mock.d.ts +2 -1
- package/lib/test/util/services.mock.js +2 -2
- package/lib/types/common.d.ts +1 -1
- package/lib/views/slides/test/fixtures/free-text.js +1 -1
- package/lib/views/slides/test/fixtures/qcm-drag.js +1 -1
- package/lib/views/slides/test/fixtures/qcm-graphic.js +1 -1
- package/lib/views/slides/test/fixtures/qcm.js +1 -1
- package/lib/views/slides/test/fixtures/slider.js +1 -1
- package/lib/views/slides/test/fixtures/template.js +1 -1
- package/lib/views/slides/test/slide.template.on-change.test.js +3 -3
- package/package.json +2 -2
- package/src/actions/api/fetch-correction.ts +33 -0
- package/src/actions/api/fetch-skills.ts +5 -5
- package/src/actions/api/fetch-slide.ts +1 -1
- package/src/actions/api/post-answer.ts +3 -5
- package/src/actions/api/post-progression.ts +2 -4
- package/src/actions/api/test/fetch-correction.test.ts +94 -0
- package/src/actions/api/test/fetch-skills.test.ts +3 -1
- package/src/actions/api/test/fetch-slide.test.ts +2 -0
- package/src/actions/api/test/post-answer.test.ts +12 -7
- package/src/actions/api/test/post-progression.test.ts +3 -1
- package/src/actions/ui/test/answers.test.ts +3 -3
- package/src/reducers/data/index.ts +1 -1
- package/src/reducers/data/slides.ts +2 -2
- package/src/reducers/data/test/token.test.ts +3 -3
- package/src/reducers/data/token.ts +2 -2
- package/src/reducers/ui/current-slide-ref.ts +1 -1
- package/src/services/fetch-slide.ts +1 -1
- package/src/services/post-answer.ts +3 -3
- package/src/services/post-progression.ts +2 -2
- package/src/services/test/fetch-slide.test.ts +1 -1
- package/src/services/test/post-answer.test.ts +9 -1
- package/src/services/test/post-progression.test.ts +12 -1
- package/src/test/util/services.mock.ts +2 -2
- package/src/types/common.ts +1 -1
- package/src/views/slides/test/fixtures/free-text.ts +1 -1
- package/src/views/slides/test/fixtures/qcm-drag.ts +1 -1
- package/src/views/slides/test/fixtures/qcm-graphic.ts +1 -1
- package/src/views/slides/test/fixtures/qcm.ts +1 -1
- package/src/views/slides/test/fixtures/slider.ts +1 -1
- package/src/views/slides/test/fixtures/template.ts +1 -1
- package/src/views/slides/test/slide.template.on-change.test.ts +3 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Dispatch } from 'redux';
|
|
2
|
+
import type { StoreState } from '../../reducers';
|
|
3
|
+
import type { CorrectionFromAPI, Options } from '../../types/common';
|
|
4
|
+
export declare const CORRECTION_FETCH_REQUEST: "@@correction/FETCH_REQUEST";
|
|
5
|
+
export declare const CORRECTION_FETCH_SUCCESS: "@@correction/FETCH_SUCCESS";
|
|
6
|
+
export declare const CORRECTION_FETCH_FAILURE: "@@correction/FETCH_FAILURE";
|
|
7
|
+
export declare type FetchCorrection = {
|
|
8
|
+
type: typeof CORRECTION_FETCH_SUCCESS;
|
|
9
|
+
payload: CorrectionFromAPI | void;
|
|
10
|
+
};
|
|
11
|
+
export declare const fetchCorrection: (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => FetchCorrection;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import buildTask from '@coorpacademy/redux-task';
|
|
2
|
+
import get from 'lodash/fp/get';
|
|
3
|
+
export var CORRECTION_FETCH_REQUEST = '@@correction/FETCH_REQUEST';
|
|
4
|
+
export var CORRECTION_FETCH_SUCCESS = '@@correction/FETCH_SUCCESS';
|
|
5
|
+
export var CORRECTION_FETCH_FAILURE = '@@correction/FETCH_FAILURE';
|
|
6
|
+
export var fetchCorrection = function (dispatch, getState, _a) {
|
|
7
|
+
var services = _a.services;
|
|
8
|
+
var action = buildTask({
|
|
9
|
+
types: [CORRECTION_FETCH_REQUEST, CORRECTION_FETCH_SUCCESS, CORRECTION_FETCH_FAILURE],
|
|
10
|
+
task: function () {
|
|
11
|
+
var state = getState();
|
|
12
|
+
var token = get(['data', 'token'], state);
|
|
13
|
+
var progressionId = get(['data', 'progression', '_id'], state);
|
|
14
|
+
var answer = get(['ui', 'answers'], state);
|
|
15
|
+
var slideRef = get(['ui', 'currentSlideRef'], state);
|
|
16
|
+
return services.fetchCorrection(slideRef, token, progressionId, answer);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
return dispatch(action);
|
|
20
|
+
};
|
|
@@ -5,7 +5,7 @@ export declare const SKILLS_FETCH_REQUEST: "@@skills/FETCH_REQUEST";
|
|
|
5
5
|
export declare const SKILLS_FETCH_SUCCESS: "@@skills/FETCH_SUCCESS";
|
|
6
6
|
export declare const SKILLS_FETCH_FAILURE: "@@skills/FETCH_FAILURE";
|
|
7
7
|
export declare type ReceivedSkills = {
|
|
8
|
-
type:
|
|
8
|
+
type: typeof SKILLS_FETCH_SUCCESS;
|
|
9
9
|
payload: Skill[];
|
|
10
10
|
};
|
|
11
|
-
export declare const fetchSkills: (dispatch: Dispatch, getState: () => StoreState, { services }: Options) =>
|
|
11
|
+
export declare const fetchSkills: (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => ReceivedSkills;
|
|
@@ -1,39 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
-
function step(op) {
|
|
15
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
17
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
-
switch (op[0]) {
|
|
20
|
-
case 0: case 1: t = op; break;
|
|
21
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
-
default:
|
|
25
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
-
if (t[2]) _.ops.pop();
|
|
30
|
-
_.trys.pop(); continue;
|
|
31
|
-
}
|
|
32
|
-
op = body.call(thisArg, _);
|
|
33
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
1
|
import buildTask from '@coorpacademy/redux-task';
|
|
38
2
|
import get from 'lodash/fp/get';
|
|
39
3
|
export var SKILLS_FETCH_REQUEST = '@@skills/FETCH_REQUEST';
|
|
@@ -41,24 +5,13 @@ export var SKILLS_FETCH_SUCCESS = '@@skills/FETCH_SUCCESS';
|
|
|
41
5
|
export var SKILLS_FETCH_FAILURE = '@@skills/FETCH_FAILURE';
|
|
42
6
|
export var fetchSkills = function (dispatch, getState, _a) {
|
|
43
7
|
var services = _a.services;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
task: function () {
|
|
52
|
-
var state = getState();
|
|
53
|
-
var token = get('data.token', state);
|
|
54
|
-
return services.fetchSkills(token);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
return [4 /*yield*/, dispatch(action)];
|
|
58
|
-
case 1:
|
|
59
|
-
_b.sent();
|
|
60
|
-
return [2 /*return*/];
|
|
61
|
-
}
|
|
62
|
-
});
|
|
8
|
+
var action = buildTask({
|
|
9
|
+
types: [SKILLS_FETCH_REQUEST, SKILLS_FETCH_SUCCESS, SKILLS_FETCH_FAILURE],
|
|
10
|
+
task: function () {
|
|
11
|
+
var state = getState();
|
|
12
|
+
var token = get(['data', 'token'], state);
|
|
13
|
+
return services.fetchSkills(token);
|
|
14
|
+
}
|
|
63
15
|
});
|
|
16
|
+
return dispatch(action);
|
|
64
17
|
};
|
|
@@ -57,7 +57,7 @@ export var fetchSlide = function (slideRef) {
|
|
|
57
57
|
},
|
|
58
58
|
task: function () {
|
|
59
59
|
var state = getState();
|
|
60
|
-
var token = get('data
|
|
60
|
+
var token = get(['data', 'token'], state);
|
|
61
61
|
return services.fetchSlide(slideRef, token);
|
|
62
62
|
},
|
|
63
63
|
meta: { slideRef: slideRef }
|
|
@@ -48,16 +48,14 @@ export var postAnswer = function (dispatch, getState, _a) {
|
|
|
48
48
|
switch (_b.label) {
|
|
49
49
|
case 0:
|
|
50
50
|
state = getState();
|
|
51
|
-
token = get('data
|
|
52
|
-
answer = get('ui
|
|
51
|
+
token = get(['data', 'token'], state);
|
|
52
|
+
answer = get(['ui', 'answers'], state);
|
|
53
53
|
progression = state.data.progression;
|
|
54
54
|
if (!progression)
|
|
55
55
|
throw new Error('cannot answer question of inexisting progression');
|
|
56
56
|
action = buildTask({
|
|
57
57
|
types: [POST_ANSWER_REQUEST, POST_ANSWER_SUCCESS, POST_ANSWER_FAILURE],
|
|
58
|
-
task: function () {
|
|
59
|
-
return services.postAnswer(progression, token, answer);
|
|
60
|
-
}
|
|
58
|
+
task: function () { return services.postAnswer(progression, token, answer); }
|
|
61
59
|
});
|
|
62
60
|
return [4 /*yield*/, dispatch(action)];
|
|
63
61
|
case 1:
|
|
@@ -49,12 +49,10 @@ export var postProgression = function (skillRef) {
|
|
|
49
49
|
switch (_b.label) {
|
|
50
50
|
case 0:
|
|
51
51
|
state = getState();
|
|
52
|
-
token = get('data
|
|
52
|
+
token = get(['data', 'token'], state);
|
|
53
53
|
action = buildTask({
|
|
54
54
|
types: [POST_PROGRESSION_REQUEST, POST_PROGRESSION_SUCCESS, POST_PROGRESSION_FAILURE],
|
|
55
|
-
task: function () {
|
|
56
|
-
return services.postProgression(skillRef, token);
|
|
57
|
-
}
|
|
55
|
+
task: function () { return services.postProgression(skillRef, token); }
|
|
58
56
|
});
|
|
59
57
|
return [4 /*yield*/, dispatch(action)];
|
|
60
58
|
case 1:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (_) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var _a;
|
|
49
|
+
import test from 'ava';
|
|
50
|
+
import { getChoicesCorrection, postAnswerResponses, services as mockedServices } from '../../../test/util/services.mock';
|
|
51
|
+
import { createTestStore } from '../../test/create-test-store';
|
|
52
|
+
import { CORRECTION_FETCH_FAILURE, CORRECTION_FETCH_REQUEST, CORRECTION_FETCH_SUCCESS, fetchCorrection } from '../fetch-correction';
|
|
53
|
+
import { freeTextSlide } from '../../../views/slides/test/fixtures/free-text';
|
|
54
|
+
import { qcmSlide } from '../../../views/slides/test/fixtures/qcm';
|
|
55
|
+
var progression = postAnswerResponses[freeTextSlide.universalRef];
|
|
56
|
+
var skillRef = '_skill-ref';
|
|
57
|
+
var answer = ['Lister vos tâches pour vous libérer l’esprit', 'Vous isoler dans un lieu calme'];
|
|
58
|
+
var initialState = {
|
|
59
|
+
data: {
|
|
60
|
+
progression: progression,
|
|
61
|
+
slides: (_a = {},
|
|
62
|
+
_a[freeTextSlide.universalRef] = freeTextSlide,
|
|
63
|
+
_a[qcmSlide.universalRef] = qcmSlide,
|
|
64
|
+
_a),
|
|
65
|
+
skills: [{ skillRef: skillRef, custom: false, name: skillRef, slidesToReview: 5 }],
|
|
66
|
+
token: '1234'
|
|
67
|
+
},
|
|
68
|
+
ui: {
|
|
69
|
+
currentSlideRef: freeTextSlide._id,
|
|
70
|
+
navigation: ['skills', 'slides'],
|
|
71
|
+
answers: answer,
|
|
72
|
+
slide: {
|
|
73
|
+
validateButton: false
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
test('should dispatch CORRECTION_FETCH_SUCCESS actions when fetchCorrection returns a correction object', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
78
|
+
var services, expectedActions, dispatch;
|
|
79
|
+
return __generator(this, function (_a) {
|
|
80
|
+
switch (_a.label) {
|
|
81
|
+
case 0:
|
|
82
|
+
t.plan(6);
|
|
83
|
+
services = __assign(__assign({}, mockedServices), { fetchCorrection: function (slideRef, token, progressionId, _answer) {
|
|
84
|
+
t.is(slideRef, freeTextSlide.universalRef);
|
|
85
|
+
t.is(token, '1234');
|
|
86
|
+
t.is(progression._id, progressionId);
|
|
87
|
+
t.is(_answer, answer);
|
|
88
|
+
return Promise.resolve(getChoicesCorrection(slideRef));
|
|
89
|
+
} });
|
|
90
|
+
expectedActions = [
|
|
91
|
+
{ type: CORRECTION_FETCH_REQUEST },
|
|
92
|
+
{
|
|
93
|
+
type: CORRECTION_FETCH_SUCCESS,
|
|
94
|
+
payload: getChoicesCorrection(freeTextSlide.universalRef)
|
|
95
|
+
}
|
|
96
|
+
];
|
|
97
|
+
dispatch = createTestStore(t, initialState, services, expectedActions).dispatch;
|
|
98
|
+
return [4 /*yield*/, dispatch(fetchCorrection)];
|
|
99
|
+
case 1:
|
|
100
|
+
_a.sent();
|
|
101
|
+
return [2 /*return*/];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}); });
|
|
105
|
+
test('should dispatch CORRECTION_FETCH_FAILURE action when fetchCorrection fails', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
106
|
+
var services, expectedActions, dispatch;
|
|
107
|
+
return __generator(this, function (_a) {
|
|
108
|
+
switch (_a.label) {
|
|
109
|
+
case 0:
|
|
110
|
+
t.plan(6);
|
|
111
|
+
services = __assign(__assign({}, mockedServices), { fetchCorrection: function (slideRef, token, progressionId, _answer) {
|
|
112
|
+
t.is(slideRef, freeTextSlide.universalRef);
|
|
113
|
+
t.is(token, '1234');
|
|
114
|
+
t.is(progression._id, progressionId);
|
|
115
|
+
t.is(_answer, answer);
|
|
116
|
+
return Promise.reject(new Error('unexpected'));
|
|
117
|
+
} });
|
|
118
|
+
expectedActions = [
|
|
119
|
+
{ type: CORRECTION_FETCH_REQUEST },
|
|
120
|
+
{
|
|
121
|
+
type: CORRECTION_FETCH_FAILURE,
|
|
122
|
+
payload: new Error('unexpected'),
|
|
123
|
+
error: true
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
dispatch = createTestStore(t, initialState, services, expectedActions).dispatch;
|
|
127
|
+
return [4 /*yield*/, dispatch(fetchCorrection)];
|
|
128
|
+
case 1:
|
|
129
|
+
_a.sent();
|
|
130
|
+
return [2 /*return*/];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}); });
|
|
@@ -65,11 +65,12 @@ var initialState = {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
|
-
test('should dispatch SKILLS_FETCH_SUCCESS actions when fetchSkills
|
|
68
|
+
test('should dispatch SKILLS_FETCH_SUCCESS actions when fetchSkills returns a list of skills', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
69
69
|
var services, expectedActions, dispatch;
|
|
70
70
|
return __generator(this, function (_a) {
|
|
71
71
|
switch (_a.label) {
|
|
72
72
|
case 0:
|
|
73
|
+
t.plan(3);
|
|
73
74
|
services = __assign(__assign({}, mockedServices), { fetchSkills: function (token) {
|
|
74
75
|
t.is(token, '1234');
|
|
75
76
|
return Promise.resolve([]);
|
|
@@ -94,6 +95,7 @@ test('should dispatch SKILLS_FETCH_FAILURE action when fetchSkills fails', funct
|
|
|
94
95
|
return __generator(this, function (_a) {
|
|
95
96
|
switch (_a.label) {
|
|
96
97
|
case 0:
|
|
98
|
+
t.plan(3);
|
|
97
99
|
services = __assign(__assign({}, mockedServices), { fetchSkills: function (token) {
|
|
98
100
|
t.is(token, '1234');
|
|
99
101
|
return Promise.reject(new Error('unexpected'));
|
|
@@ -72,6 +72,7 @@ test('should dispatch FETCH_SUCCESS and SET_CURRENT_SLIDE actions when fetchSlid
|
|
|
72
72
|
return __generator(this, function (_a) {
|
|
73
73
|
switch (_a.label) {
|
|
74
74
|
case 0:
|
|
75
|
+
t.plan(5);
|
|
75
76
|
services = __assign(__assign({}, mockedServices), { fetchSlide: function (slideRef, token) {
|
|
76
77
|
t.is(token, '1234');
|
|
77
78
|
t.is(slideRef, 'sli_VJYjJnJhg');
|
|
@@ -99,6 +100,7 @@ test('should dispatch SLIDE_FETCH_FAILURE action when fetchSlide fails', functio
|
|
|
99
100
|
return __generator(this, function (_a) {
|
|
100
101
|
switch (_a.label) {
|
|
101
102
|
case 0:
|
|
103
|
+
t.plan(4);
|
|
102
104
|
services = __assign(__assign({}, mockedServices), { fetchSlide: function (slideRef, token) {
|
|
103
105
|
t.is(token, '1234');
|
|
104
106
|
t.is(slideRef, 'slide_ref');
|
|
@@ -69,7 +69,7 @@ var initialState = {
|
|
|
69
69
|
allAnswers: [],
|
|
70
70
|
isCorrect: true,
|
|
71
71
|
nextContent: {
|
|
72
|
-
ref: freeTextSlide.
|
|
72
|
+
ref: freeTextSlide._id,
|
|
73
73
|
type: 'slide'
|
|
74
74
|
},
|
|
75
75
|
pendingSlides: [],
|
|
@@ -81,13 +81,13 @@ var initialState = {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
slides: (_a = {},
|
|
84
|
-
_a[freeTextSlide.
|
|
84
|
+
_a[freeTextSlide._id] = freeTextSlide,
|
|
85
85
|
_a),
|
|
86
86
|
skills: [{ skillRef: skillRef, custom: false, name: skillRef, slidesToReview: 5 }],
|
|
87
87
|
token: '1234'
|
|
88
88
|
},
|
|
89
89
|
ui: {
|
|
90
|
-
currentSlideRef: freeTextSlide.
|
|
90
|
+
currentSlideRef: freeTextSlide._id,
|
|
91
91
|
navigation: ['skills', 'slides'],
|
|
92
92
|
answers: answer,
|
|
93
93
|
slide: {
|
|
@@ -100,16 +100,17 @@ test('should dispatch POST_ANSWER_REQUEST, then POST_ANSWER_SUCCESS when the upd
|
|
|
100
100
|
return __generator(this, function (_a) {
|
|
101
101
|
switch (_a.label) {
|
|
102
102
|
case 0:
|
|
103
|
+
t.plan(4);
|
|
103
104
|
expectedActions = [
|
|
104
105
|
{ type: POST_ANSWER_REQUEST },
|
|
105
106
|
{
|
|
106
107
|
type: POST_ANSWER_SUCCESS,
|
|
107
|
-
payload: postAnswerResponses[freeTextSlide.
|
|
108
|
+
payload: postAnswerResponses[freeTextSlide._id]
|
|
108
109
|
},
|
|
109
|
-
{ type: SLIDE_FETCH_REQUEST, meta: { slideRef: qcmGraphicSlide.
|
|
110
|
+
{ type: SLIDE_FETCH_REQUEST, meta: { slideRef: qcmGraphicSlide._id } },
|
|
110
111
|
{
|
|
111
112
|
type: SLIDE_FETCH_SUCCESS,
|
|
112
|
-
meta: { slideRef: qcmGraphicSlide.
|
|
113
|
+
meta: { slideRef: qcmGraphicSlide._id },
|
|
113
114
|
payload: qcmGraphicSlide
|
|
114
115
|
},
|
|
115
116
|
{ type: SET_CURRENT_SLIDE, payload: qcmGraphicSlide }
|
|
@@ -127,6 +128,7 @@ test('should dispatch POST_ANSWER_REQUEST, then POST_ANSWER_FAILURE on error', f
|
|
|
127
128
|
return __generator(this, function (_a) {
|
|
128
129
|
switch (_a.label) {
|
|
129
130
|
case 0:
|
|
131
|
+
t.plan(3);
|
|
130
132
|
expectedActions = [
|
|
131
133
|
{ type: POST_ANSWER_REQUEST },
|
|
132
134
|
{
|
|
@@ -135,7 +137,10 @@ test('should dispatch POST_ANSWER_REQUEST, then POST_ANSWER_FAILURE on error', f
|
|
|
135
137
|
error: true
|
|
136
138
|
}
|
|
137
139
|
];
|
|
138
|
-
dispatch = createTestStore(t, initialState, __assign(__assign({}, services), { postAnswer: function () {
|
|
140
|
+
dispatch = createTestStore(t, initialState, __assign(__assign({}, services), { postAnswer: function () {
|
|
141
|
+
t.pass();
|
|
142
|
+
return Promise.reject(new Error('unexpected'));
|
|
143
|
+
} }), expectedActions).dispatch;
|
|
139
144
|
return [4 /*yield*/, dispatch(postAnswer)];
|
|
140
145
|
case 1:
|
|
141
146
|
_a.sent();
|
|
@@ -68,11 +68,12 @@ var initialState = {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
|
-
test('should dispatch POST_PROGRESSION_SUCCESS and SLIDE_FETCH_REQUEST actions when postProgression
|
|
71
|
+
test('should dispatch POST_PROGRESSION_SUCCESS and SLIDE_FETCH_REQUEST actions when postProgression returns a progression', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
72
72
|
var progression, services, expectedActions, dispatch;
|
|
73
73
|
return __generator(this, function (_a) {
|
|
74
74
|
switch (_a.label) {
|
|
75
75
|
case 0:
|
|
76
|
+
t.plan(9);
|
|
76
77
|
progression = {
|
|
77
78
|
_id: '62b1d1087aa12f00253f40ee',
|
|
78
79
|
content: {
|
|
@@ -140,6 +141,7 @@ test('should dispatch POST_PROGRESSION_FAILURE action when postProgression fails
|
|
|
140
141
|
return __generator(this, function (_a) {
|
|
141
142
|
switch (_a.label) {
|
|
142
143
|
case 0:
|
|
144
|
+
t.plan(4);
|
|
143
145
|
services = __assign(__assign({}, mockedServices), { postProgression: function (skillRef, token) {
|
|
144
146
|
t.is(token, '1234');
|
|
145
147
|
t.is(skillRef, 'skill_12345');
|
|
@@ -86,7 +86,7 @@ var initialState = {
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
var buildInitialState = function (state, question) {
|
|
89
|
-
return pipe(set(['data', 'progression', 'state', 'nextContent', 'ref'], question.
|
|
89
|
+
return pipe(set(['data', 'progression', 'state', 'nextContent', 'ref'], question._id), set(['data', 'slides', question._id], question), set(['ui', 'currentSlideRef'], question._id))(state);
|
|
90
90
|
};
|
|
91
91
|
test('should dispatch EDIT_BASIC action when editAnswer is called', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
92
92
|
var state, expectedActions, dispatch;
|
|
@@ -7,12 +7,12 @@ export declare type DataState = {
|
|
|
7
7
|
progression: ProgressionState;
|
|
8
8
|
skills: SkillsState;
|
|
9
9
|
slides: SlidesState;
|
|
10
|
-
token
|
|
10
|
+
token: TokenState;
|
|
11
11
|
};
|
|
12
12
|
declare const _default: import("redux").Reducer<import("redux").CombinedState<{
|
|
13
13
|
progression: ProgressionState;
|
|
14
14
|
skills: SkillsState;
|
|
15
15
|
slides: SlidesState;
|
|
16
|
-
token:
|
|
16
|
+
token: string;
|
|
17
17
|
}>, import("../../actions/api/post-answer").PostAnswerSuccessAction | import("../../actions/api/post-progression").ReceivedProgression | import("../../actions/api/fetch-skills").ReceivedSkills | import("./slides").SlidesAction | import("../../actions/data/token").StoreToken>;
|
|
18
18
|
export default _default;
|
|
@@ -7,11 +7,11 @@ var reducer = function (state, action) {
|
|
|
7
7
|
switch (action.type) {
|
|
8
8
|
case SLIDE_FETCH_REQUEST: {
|
|
9
9
|
var meta = action.meta;
|
|
10
|
-
return set(meta.slideRef, null, state);
|
|
10
|
+
return set([meta.slideRef], null, state);
|
|
11
11
|
}
|
|
12
12
|
case SLIDE_FETCH_SUCCESS: {
|
|
13
13
|
var slide = action.payload;
|
|
14
|
-
return set(slide.
|
|
14
|
+
return set([slide._id], slide, state);
|
|
15
15
|
}
|
|
16
16
|
default:
|
|
17
17
|
return state;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import test from 'ava';
|
|
2
2
|
import reducer from '../token';
|
|
3
3
|
import { STORE_TOKEN } from '../../../actions/data/token';
|
|
4
|
-
test('should have
|
|
4
|
+
test('should have initial value', function (t) {
|
|
5
5
|
var state = reducer(undefined, {});
|
|
6
|
-
t.is(state,
|
|
6
|
+
t.is(state, '');
|
|
7
7
|
});
|
|
8
8
|
test('should set the value of STORE_TOKEN action', function (t) {
|
|
9
|
-
var state = reducer(
|
|
9
|
+
var state = reducer('', { type: STORE_TOKEN, payload: 'token' });
|
|
10
10
|
t.is(state, 'token');
|
|
11
11
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { StoreToken } from '../../actions/data/token';
|
|
2
|
-
export declare type TokenState = string
|
|
3
|
-
declare const reducer: (state:
|
|
2
|
+
export declare type TokenState = string;
|
|
3
|
+
declare const reducer: (state: string | undefined, action: StoreToken) => TokenState;
|
|
4
4
|
export default reducer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { STORE_TOKEN } from '../../actions/data/token';
|
|
2
2
|
// eslint-disable-next-line default-param-last
|
|
3
3
|
var reducer = function (state, action) {
|
|
4
|
-
if (state === void 0) { state =
|
|
4
|
+
if (state === void 0) { state = ''; }
|
|
5
5
|
switch (action.type) {
|
|
6
6
|
case STORE_TOKEN:
|
|
7
7
|
return action.payload;
|
package/lib/reducers/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ declare const _default: import("redux").Reducer<import("redux").CombinedState<{
|
|
|
9
9
|
progression: import("./data/progression").ProgressionState;
|
|
10
10
|
skills: import("./data/skills").SkillsState;
|
|
11
11
|
slides: import("./data/slides").SlidesState;
|
|
12
|
-
token:
|
|
12
|
+
token: string;
|
|
13
13
|
}>;
|
|
14
14
|
ui: import("redux").CombinedState<{
|
|
15
15
|
currentSlideRef: string;
|
|
@@ -43,7 +43,7 @@ export var fetchSlide = function (slideRef, token) { return __awaiter(void 0, vo
|
|
|
43
43
|
switch (_a.label) {
|
|
44
44
|
case 0:
|
|
45
45
|
host = decode(token).host;
|
|
46
|
-
return [4 /*yield*/, crossFetch("".concat(host, "/api/
|
|
46
|
+
return [4 /*yield*/, crossFetch("".concat(host, "/api/v1/slides/").concat(slideRef, "/parentContentTitle"), {
|
|
47
47
|
headers: { authorization: token }
|
|
48
48
|
})];
|
|
49
49
|
case 1:
|
|
@@ -38,19 +38,19 @@ import crossFetch from 'cross-fetch';
|
|
|
38
38
|
import decode from 'jwt-decode';
|
|
39
39
|
import { toJSON } from './tools/fetch-responses';
|
|
40
40
|
export var postAnswer = function (progression, token, answer) { return __awaiter(void 0, void 0, void 0, function () {
|
|
41
|
-
var progressionId,
|
|
41
|
+
var progressionId, slideRef, host, response;
|
|
42
42
|
return __generator(this, function (_a) {
|
|
43
43
|
switch (_a.label) {
|
|
44
44
|
case 0:
|
|
45
45
|
progressionId = progression._id;
|
|
46
|
-
|
|
46
|
+
slideRef = progression.state.nextContent.ref;
|
|
47
47
|
host = decode(token).host;
|
|
48
48
|
return [4 /*yield*/, crossFetch("".concat(host, "/api/v2/progressions/").concat(progressionId, "/answers"), {
|
|
49
49
|
method: 'post',
|
|
50
|
-
headers: { authorization: token },
|
|
50
|
+
headers: { authorization: token, 'content-type': 'application/json' },
|
|
51
51
|
body: JSON.stringify({
|
|
52
52
|
content: {
|
|
53
|
-
ref:
|
|
53
|
+
ref: slideRef,
|
|
54
54
|
type: 'slide'
|
|
55
55
|
},
|
|
56
56
|
answer: answer
|
|
@@ -45,11 +45,11 @@ export var postProgression = function (skillRef, token) { return __awaiter(void
|
|
|
45
45
|
host = decode(token).host;
|
|
46
46
|
return [4 /*yield*/, crossFetch("".concat(host, "/api/v2/progressions"), {
|
|
47
47
|
method: 'post',
|
|
48
|
-
headers: { authorization: token },
|
|
48
|
+
headers: { authorization: token, 'content-type': 'application/json' },
|
|
49
49
|
body: JSON.stringify({
|
|
50
50
|
content: {
|
|
51
51
|
ref: skillRef,
|
|
52
|
-
type: '
|
|
52
|
+
type: 'skill'
|
|
53
53
|
},
|
|
54
54
|
engine: {
|
|
55
55
|
ref: 'review',
|
|
@@ -40,7 +40,7 @@ import { qcmDragSlide } from '../../views/slides/test/fixtures/qcm-drag';
|
|
|
40
40
|
import { fetchSlide } from '../fetch-slide';
|
|
41
41
|
test.before(function () {
|
|
42
42
|
nock('http://localhost:3000')
|
|
43
|
-
.get('/api/
|
|
43
|
+
.get('/api/v1/slides/sli_123546/parentContentTitle')
|
|
44
44
|
.reply(200, qcmDragSlide);
|
|
45
45
|
});
|
|
46
46
|
test.after(function () {
|
|
@@ -99,7 +99,15 @@ var result = {
|
|
|
99
99
|
};
|
|
100
100
|
test.before(function () {
|
|
101
101
|
var moocApi = nock('http://localhost:3000');
|
|
102
|
-
moocApi
|
|
102
|
+
moocApi
|
|
103
|
+
.post('/api/v2/progressions/123456123456/answers', {
|
|
104
|
+
content: {
|
|
105
|
+
ref: 'sli_NkvrWPFF2',
|
|
106
|
+
type: 'slide'
|
|
107
|
+
},
|
|
108
|
+
answer: answer
|
|
109
|
+
})
|
|
110
|
+
.reply(200, result);
|
|
103
111
|
});
|
|
104
112
|
test.after(function () {
|
|
105
113
|
nock.cleanAll();
|
|
@@ -64,7 +64,18 @@ var result = {
|
|
|
64
64
|
};
|
|
65
65
|
test.before(function () {
|
|
66
66
|
var moocApi = nock('http://localhost:3000');
|
|
67
|
-
moocApi
|
|
67
|
+
moocApi
|
|
68
|
+
.post('/api/v2/progressions', {
|
|
69
|
+
content: {
|
|
70
|
+
ref: '_skill-ref',
|
|
71
|
+
type: 'skill'
|
|
72
|
+
},
|
|
73
|
+
engine: {
|
|
74
|
+
ref: 'review',
|
|
75
|
+
version: '1'
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
.reply(200, result);
|
|
68
79
|
});
|
|
69
80
|
test.after(function () {
|
|
70
81
|
nock.cleanAll();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ProgressionFromAPI, Services } from '../../types/common';
|
|
1
|
+
import { CorrectionFromAPI, ProgressionFromAPI, Services } from '../../types/common';
|
|
2
2
|
export declare const postProgressionResponse: ProgressionFromAPI;
|
|
3
3
|
export declare const postAnswerResponses: Record<string, ProgressionFromAPI>;
|
|
4
4
|
export declare const progressionSlideWithPendingSlide: ProgressionFromAPI;
|
|
5
|
+
export declare const getChoicesCorrection: (ref: string, wrongChoice?: boolean) => CorrectionFromAPI;
|
|
5
6
|
export declare const services: Services;
|