@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.
Files changed (106) hide show
  1. package/es/actions/api/fetch-correction.d.ts +11 -0
  2. package/es/actions/api/fetch-correction.js +19 -0
  3. package/es/actions/api/fetch-skills.d.ts +2 -2
  4. package/es/actions/api/fetch-skills.js +3 -3
  5. package/es/actions/api/fetch-slide.js +1 -1
  6. package/es/actions/api/post-answer.js +3 -5
  7. package/es/actions/api/post-progression.js +2 -4
  8. package/es/actions/api/test/fetch-correction.test.d.ts +1 -0
  9. package/es/actions/api/test/fetch-correction.test.js +73 -0
  10. package/es/actions/api/test/fetch-skills.test.js +3 -1
  11. package/es/actions/api/test/fetch-slide.test.js +2 -0
  12. package/es/actions/api/test/post-answer.test.js +12 -7
  13. package/es/actions/api/test/post-progression.test.js +3 -1
  14. package/es/actions/ui/test/answers.test.js +1 -1
  15. package/es/reducers/data/index.d.ts +2 -2
  16. package/es/reducers/data/slides.js +2 -2
  17. package/es/reducers/data/test/token.test.js +3 -3
  18. package/es/reducers/data/token.d.ts +2 -2
  19. package/es/reducers/data/token.js +1 -1
  20. package/es/reducers/index.d.ts +1 -1
  21. package/es/reducers/ui/current-slide-ref.js +1 -1
  22. package/es/services/fetch-slide.js +1 -1
  23. package/es/services/post-answer.js +3 -3
  24. package/es/services/post-progression.js +2 -2
  25. package/es/services/test/fetch-slide.test.js +1 -1
  26. package/es/services/test/post-answer.test.js +9 -1
  27. package/es/services/test/post-progression.test.js +12 -1
  28. package/es/test/util/services.mock.d.ts +2 -1
  29. package/es/test/util/services.mock.js +2 -2
  30. package/es/types/common.d.ts +1 -1
  31. package/es/views/slides/test/fixtures/free-text.js +1 -1
  32. package/es/views/slides/test/fixtures/qcm-drag.js +1 -1
  33. package/es/views/slides/test/fixtures/qcm-graphic.js +1 -1
  34. package/es/views/slides/test/fixtures/qcm.js +1 -1
  35. package/es/views/slides/test/fixtures/slider.js +1 -1
  36. package/es/views/slides/test/fixtures/template.js +1 -1
  37. package/es/views/slides/test/slide.template.on-change.test.js +3 -3
  38. package/lib/actions/api/fetch-correction.d.ts +11 -0
  39. package/lib/actions/api/fetch-correction.js +20 -0
  40. package/lib/actions/api/fetch-skills.d.ts +2 -2
  41. package/lib/actions/api/fetch-skills.js +8 -55
  42. package/lib/actions/api/fetch-slide.js +1 -1
  43. package/lib/actions/api/post-answer.js +3 -5
  44. package/lib/actions/api/post-progression.js +2 -4
  45. package/lib/actions/api/test/fetch-correction.test.d.ts +1 -0
  46. package/lib/actions/api/test/fetch-correction.test.js +133 -0
  47. package/lib/actions/api/test/fetch-skills.test.js +3 -1
  48. package/lib/actions/api/test/fetch-slide.test.js +2 -0
  49. package/lib/actions/api/test/post-answer.test.js +12 -7
  50. package/lib/actions/api/test/post-progression.test.js +3 -1
  51. package/lib/actions/ui/test/answers.test.js +1 -1
  52. package/lib/reducers/data/index.d.ts +2 -2
  53. package/lib/reducers/data/slides.js +2 -2
  54. package/lib/reducers/data/test/token.test.js +3 -3
  55. package/lib/reducers/data/token.d.ts +2 -2
  56. package/lib/reducers/data/token.js +1 -1
  57. package/lib/reducers/index.d.ts +1 -1
  58. package/lib/reducers/ui/current-slide-ref.js +1 -1
  59. package/lib/services/fetch-slide.js +1 -1
  60. package/lib/services/post-answer.js +4 -4
  61. package/lib/services/post-progression.js +2 -2
  62. package/lib/services/test/fetch-slide.test.js +1 -1
  63. package/lib/services/test/post-answer.test.js +9 -1
  64. package/lib/services/test/post-progression.test.js +12 -1
  65. package/lib/test/util/services.mock.d.ts +2 -1
  66. package/lib/test/util/services.mock.js +2 -2
  67. package/lib/types/common.d.ts +1 -1
  68. package/lib/views/slides/test/fixtures/free-text.js +1 -1
  69. package/lib/views/slides/test/fixtures/qcm-drag.js +1 -1
  70. package/lib/views/slides/test/fixtures/qcm-graphic.js +1 -1
  71. package/lib/views/slides/test/fixtures/qcm.js +1 -1
  72. package/lib/views/slides/test/fixtures/slider.js +1 -1
  73. package/lib/views/slides/test/fixtures/template.js +1 -1
  74. package/lib/views/slides/test/slide.template.on-change.test.js +3 -3
  75. package/package.json +2 -2
  76. package/src/actions/api/fetch-correction.ts +33 -0
  77. package/src/actions/api/fetch-skills.ts +5 -5
  78. package/src/actions/api/fetch-slide.ts +1 -1
  79. package/src/actions/api/post-answer.ts +3 -5
  80. package/src/actions/api/post-progression.ts +2 -4
  81. package/src/actions/api/test/fetch-correction.test.ts +94 -0
  82. package/src/actions/api/test/fetch-skills.test.ts +3 -1
  83. package/src/actions/api/test/fetch-slide.test.ts +2 -0
  84. package/src/actions/api/test/post-answer.test.ts +12 -7
  85. package/src/actions/api/test/post-progression.test.ts +3 -1
  86. package/src/actions/ui/test/answers.test.ts +3 -3
  87. package/src/reducers/data/index.ts +1 -1
  88. package/src/reducers/data/slides.ts +2 -2
  89. package/src/reducers/data/test/token.test.ts +3 -3
  90. package/src/reducers/data/token.ts +2 -2
  91. package/src/reducers/ui/current-slide-ref.ts +1 -1
  92. package/src/services/fetch-slide.ts +1 -1
  93. package/src/services/post-answer.ts +3 -3
  94. package/src/services/post-progression.ts +2 -2
  95. package/src/services/test/fetch-slide.test.ts +1 -1
  96. package/src/services/test/post-answer.test.ts +9 -1
  97. package/src/services/test/post-progression.test.ts +12 -1
  98. package/src/test/util/services.mock.ts +2 -2
  99. package/src/types/common.ts +1 -1
  100. package/src/views/slides/test/fixtures/free-text.ts +1 -1
  101. package/src/views/slides/test/fixtures/qcm-drag.ts +1 -1
  102. package/src/views/slides/test/fixtures/qcm-graphic.ts +1 -1
  103. package/src/views/slides/test/fixtures/qcm.ts +1 -1
  104. package/src/views/slides/test/fixtures/slider.ts +1 -1
  105. package/src/views/slides/test/fixtures/template.ts +1 -1
  106. 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: '@@skills/FETCH_SUCCESS';
8
+ type: typeof SKILLS_FETCH_SUCCESS;
9
9
  payload: Skill[];
10
10
  };
11
- export declare const fetchSkills: (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => Promise<void>;
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
- return __awaiter(void 0, void 0, void 0, function () {
45
- var action;
46
- return __generator(this, function (_b) {
47
- switch (_b.label) {
48
- case 0:
49
- action = buildTask({
50
- types: [SKILLS_FETCH_REQUEST, SKILLS_FETCH_SUCCESS, SKILLS_FETCH_FAILURE],
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.token', state);
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.token', state);
52
- answer = get('ui.answers', state);
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.token', state);
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 return a list of skills', function (t) { return __awaiter(void 0, void 0, void 0, function () {
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.id,
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.id] = 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.id,
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.id]
108
+ payload: postAnswerResponses[freeTextSlide._id]
108
109
  },
109
- { type: SLIDE_FETCH_REQUEST, meta: { slideRef: qcmGraphicSlide.id } },
110
+ { type: SLIDE_FETCH_REQUEST, meta: { slideRef: qcmGraphicSlide._id } },
110
111
  {
111
112
  type: SLIDE_FETCH_SUCCESS,
112
- meta: { slideRef: qcmGraphicSlide.id },
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 () { return Promise.reject(new Error('unexpected')); } }), expectedActions).dispatch;
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 return a progression', function (t) { return __awaiter(void 0, void 0, void 0, function () {
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.id), set(['data', 'slides', question.id], question), set(['ui', 'currentSlideRef'], question.id))(state);
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?: TokenState;
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: TokenState;
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.id, slide, state);
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 inital value', function (t) {
4
+ test('should have initial value', function (t) {
5
5
  var state = reducer(undefined, {});
6
- t.is(state, null);
6
+ t.is(state, '');
7
7
  });
8
8
  test('should set the value of STORE_TOKEN action', function (t) {
9
- var state = reducer(null, { type: STORE_TOKEN, payload: 'token' });
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 | null;
3
- declare const reducer: (state: TokenState | undefined, action: StoreToken) => TokenState;
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 = null; }
4
+ if (state === void 0) { state = ''; }
5
5
  switch (action.type) {
6
6
  case STORE_TOKEN:
7
7
  return action.payload;
@@ -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: import("./data/token").TokenState;
12
+ token: string;
13
13
  }>;
14
14
  ui: import("redux").CombinedState<{
15
15
  currentSlideRef: string;
@@ -5,7 +5,7 @@ state, action) {
5
5
  if (state === void 0) { state = ''; }
6
6
  switch (action.type) {
7
7
  case SET_CURRENT_SLIDE: {
8
- return action.payload.id;
8
+ return action.payload._id;
9
9
  }
10
10
  default:
11
11
  return state;
@@ -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/v2/slide/").concat(slideRef, "/parentContentTitle"), {
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, skillRef, host, response;
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
- skillRef = progression.content.ref;
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: skillRef,
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: 'slide'
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/v2/slide/sli_123546/parentContentTitle')
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.post('/api/v2/progressions/123456123456/answers').reply(200, result);
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.post('/api/v2/progressions').reply(200, result);
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;