@coorpacademy/app-review 0.1.15 → 0.1.17

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 (289) hide show
  1. package/es/actions/api/fetch-skills.d.ts +5 -7
  2. package/es/actions/api/fetch-skills.js +12 -4
  3. package/es/actions/api/fetch-slide.d.ts +14 -7
  4. package/es/actions/api/fetch-slide.js +23 -18
  5. package/es/actions/api/post-answer.d.ts +10 -0
  6. package/es/actions/api/post-answer.js +25 -0
  7. package/es/actions/api/post-progression.d.ts +5 -7
  8. package/es/actions/api/post-progression.js +16 -8
  9. package/es/actions/api/test/fetch-skills.test.js +57 -0
  10. package/es/actions/api/test/fetch-slide.test.js +64 -0
  11. package/es/actions/api/test/post-answer.test.d.ts +1 -0
  12. package/es/actions/api/test/post-answer.test.js +82 -0
  13. package/es/actions/api/test/post-progression.test.d.ts +1 -0
  14. package/es/actions/api/test/post-progression.test.js +105 -0
  15. package/es/actions/data/test/token.test.d.ts +1 -0
  16. package/es/actions/data/test/token.test.js +25 -0
  17. package/es/actions/index.d.ts +1 -8
  18. package/es/actions/test/create-test-store.d.ts +5 -0
  19. package/es/actions/test/create-test-store.js +16 -0
  20. package/es/actions/ui/answers.d.ts +21 -0
  21. package/es/actions/ui/answers.js +43 -0
  22. package/es/actions/ui/slides.d.ts +0 -5
  23. package/es/actions/ui/slides.js +0 -4
  24. package/es/actions/ui/test/answers.test.d.ts +1 -0
  25. package/es/actions/ui/test/answers.test.js +90 -0
  26. package/es/actions/ui/test/slides.test.d.ts +1 -0
  27. package/es/actions/ui/test/slides.test.js +26 -0
  28. package/es/common/index.d.ts +0 -3
  29. package/es/common/index.js +0 -4
  30. package/es/index.js +11 -19
  31. package/es/reducers/data/index.d.ts +2 -2
  32. package/es/reducers/data/progression.d.ts +2 -3
  33. package/es/reducers/data/progression.js +0 -5
  34. package/es/reducers/data/slides.d.ts +3 -4
  35. package/es/reducers/data/slides.js +5 -1
  36. package/es/reducers/data/test/progression.test.d.ts +1 -0
  37. package/es/reducers/data/test/progression.test.js +38 -0
  38. package/es/reducers/data/test/skills.test.d.ts +1 -0
  39. package/es/reducers/data/test/skills.test.js +12 -0
  40. package/es/reducers/data/test/slides.test.d.ts +1 -0
  41. package/es/reducers/data/test/slides.test.js +20 -0
  42. package/es/reducers/data/test/token.test.d.ts +1 -0
  43. package/es/reducers/data/test/token.test.js +11 -0
  44. package/es/reducers/index.d.ts +3 -2
  45. package/es/reducers/ui/answers.d.ts +4 -0
  46. package/es/reducers/ui/answers.js +9 -0
  47. package/es/reducers/ui/index.d.ts +7 -4
  48. package/es/reducers/ui/index.js +4 -2
  49. package/es/reducers/ui/slide.d.ts +8 -0
  50. package/es/reducers/ui/slide.js +26 -0
  51. package/es/reducers/ui/test/answers.test.d.ts +1 -0
  52. package/es/reducers/ui/test/answers.test.js +27 -0
  53. package/es/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
  54. package/es/reducers/ui/test/current-slide-ref.test.js +12 -0
  55. package/es/reducers/ui/test/navigation.test.d.ts +1 -0
  56. package/es/reducers/ui/test/navigation.test.js +15 -0
  57. package/es/reducers/ui/test/slide.test.d.ts +1 -0
  58. package/es/reducers/ui/test/slide.test.js +12 -0
  59. package/es/services/fetch-slide.js +1 -1
  60. package/es/services/index.js +3 -1
  61. package/es/services/post-answer.d.ts +2 -0
  62. package/es/services/post-answer.js +18 -0
  63. package/es/services/test/fetch-slide.test.d.ts +1 -0
  64. package/es/services/test/fetch-slide.test.js +22 -0
  65. package/es/services/test/post-answer.test.d.ts +1 -0
  66. package/es/services/test/post-answer.test.js +57 -0
  67. package/es/services/test/post-progression.test.js +9 -1
  68. package/es/test/util/services.mock.d.ts +2 -1
  69. package/es/test/util/services.mock.js +88 -44
  70. package/es/types/common.d.ts +22 -33
  71. package/es/views/skills/index.d.ts +1 -1
  72. package/es/views/skills/index.js +0 -3
  73. package/es/views/skills/test/skills.test.d.ts +1 -0
  74. package/es/views/skills/test/skills.test.js +94 -0
  75. package/es/views/slides/index.d.ts +89 -2
  76. package/es/views/slides/index.js +80 -10
  77. package/es/views/slides/map-api-slide-to-ui.d.ts +8 -0
  78. package/es/views/slides/map-api-slide-to-ui.js +165 -0
  79. package/es/{helpers → views/slides}/test/fixtures/free-text.d.ts +2 -1
  80. package/es/views/slides/test/fixtures/free-text.js +38 -0
  81. package/es/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +2 -1
  82. package/es/views/slides/test/fixtures/qcm-drag.js +108 -0
  83. package/es/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +2 -1
  84. package/es/views/slides/test/fixtures/qcm-graphic.js +88 -0
  85. package/es/{helpers → views/slides}/test/fixtures/qcm.d.ts +2 -1
  86. package/es/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
  87. package/es/{helpers → views/slides}/test/fixtures/select-template.d.ts +2 -1
  88. package/es/views/slides/test/fixtures/select-template.js +92 -0
  89. package/es/{helpers → views/slides}/test/fixtures/slider.d.ts +2 -1
  90. package/es/views/slides/test/fixtures/slider.js +36 -0
  91. package/es/{helpers → views/slides}/test/fixtures/text-template.d.ts +2 -1
  92. package/es/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
  93. package/es/views/slides/test/index.test.d.ts +1 -0
  94. package/es/views/slides/test/index.test.js +234 -0
  95. package/es/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
  96. package/es/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
  97. package/lib/actions/api/fetch-skills.d.ts +5 -7
  98. package/lib/actions/api/fetch-skills.js +58 -7
  99. package/lib/actions/api/fetch-slide.d.ts +14 -7
  100. package/lib/actions/api/fetch-slide.js +72 -20
  101. package/lib/actions/api/post-answer.d.ts +10 -0
  102. package/lib/actions/api/post-answer.js +75 -0
  103. package/lib/actions/api/post-progression.d.ts +5 -7
  104. package/lib/actions/api/post-progression.js +67 -10
  105. package/lib/actions/api/test/fetch-skills.test.d.ts +1 -0
  106. package/lib/actions/api/test/fetch-skills.test.js +116 -0
  107. package/lib/actions/api/test/fetch-slide.test.d.ts +1 -0
  108. package/lib/actions/api/test/fetch-slide.test.js +123 -0
  109. package/lib/actions/api/test/post-answer.test.d.ts +1 -0
  110. package/lib/actions/api/test/post-answer.test.js +145 -0
  111. package/lib/actions/api/test/post-progression.test.d.ts +1 -0
  112. package/lib/actions/api/test/post-progression.test.js +163 -0
  113. package/lib/actions/data/test/token.test.d.ts +1 -0
  114. package/lib/actions/data/test/token.test.js +70 -0
  115. package/lib/actions/index.d.ts +1 -8
  116. package/lib/actions/test/create-test-store.d.ts +5 -0
  117. package/lib/actions/test/create-test-store.js +18 -0
  118. package/lib/actions/ui/answers.d.ts +21 -0
  119. package/lib/actions/ui/answers.js +54 -0
  120. package/lib/actions/ui/slides.d.ts +0 -5
  121. package/lib/actions/ui/slides.js +0 -4
  122. package/lib/actions/ui/test/answers.test.d.ts +1 -0
  123. package/lib/actions/ui/test/answers.test.js +171 -0
  124. package/lib/actions/ui/test/slides.test.d.ts +1 -0
  125. package/lib/actions/ui/test/slides.test.js +71 -0
  126. package/lib/common/index.d.ts +0 -3
  127. package/lib/common/index.js +0 -4
  128. package/lib/index.js +22 -21
  129. package/lib/reducers/data/index.d.ts +2 -2
  130. package/lib/reducers/data/progression.d.ts +2 -3
  131. package/lib/reducers/data/progression.js +0 -5
  132. package/lib/reducers/data/slides.d.ts +3 -4
  133. package/lib/reducers/data/slides.js +5 -1
  134. package/lib/reducers/data/test/progression.test.d.ts +1 -0
  135. package/lib/reducers/data/test/progression.test.js +38 -0
  136. package/lib/reducers/data/test/skills.test.d.ts +1 -0
  137. package/lib/reducers/data/test/skills.test.js +12 -0
  138. package/lib/reducers/data/test/slides.test.d.ts +1 -0
  139. package/lib/reducers/data/test/slides.test.js +20 -0
  140. package/lib/reducers/data/test/token.test.d.ts +1 -0
  141. package/lib/reducers/data/test/token.test.js +11 -0
  142. package/lib/reducers/index.d.ts +3 -2
  143. package/lib/reducers/ui/answers.d.ts +4 -0
  144. package/lib/reducers/ui/answers.js +10 -0
  145. package/lib/reducers/ui/index.d.ts +7 -4
  146. package/lib/reducers/ui/index.js +4 -2
  147. package/lib/reducers/ui/slide.d.ts +8 -0
  148. package/lib/reducers/ui/slide.js +27 -0
  149. package/lib/reducers/ui/test/answers.test.d.ts +1 -0
  150. package/lib/reducers/ui/test/answers.test.js +27 -0
  151. package/lib/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
  152. package/lib/reducers/ui/test/current-slide-ref.test.js +12 -0
  153. package/lib/reducers/ui/test/navigation.test.d.ts +1 -0
  154. package/lib/reducers/ui/test/navigation.test.js +15 -0
  155. package/lib/reducers/ui/test/slide.test.d.ts +1 -0
  156. package/lib/reducers/ui/test/slide.test.js +12 -0
  157. package/lib/services/fetch-slide.js +1 -1
  158. package/lib/services/index.js +3 -1
  159. package/lib/services/post-answer.d.ts +2 -0
  160. package/lib/services/post-answer.js +62 -0
  161. package/lib/services/test/fetch-slide.test.d.ts +1 -0
  162. package/lib/services/test/fetch-slide.test.js +76 -0
  163. package/lib/services/test/post-answer.test.d.ts +1 -0
  164. package/lib/services/test/post-answer.test.js +111 -0
  165. package/lib/services/test/post-progression.test.js +9 -1
  166. package/lib/test/util/services.mock.d.ts +2 -1
  167. package/lib/test/util/services.mock.js +88 -44
  168. package/lib/types/common.d.ts +22 -33
  169. package/lib/views/skills/index.d.ts +1 -1
  170. package/lib/views/skills/index.js +0 -3
  171. package/lib/views/skills/test/skills.test.d.ts +1 -0
  172. package/lib/views/skills/test/skills.test.js +94 -0
  173. package/lib/views/slides/index.d.ts +89 -2
  174. package/lib/views/slides/index.js +80 -10
  175. package/lib/views/slides/map-api-slide-to-ui.d.ts +8 -0
  176. package/lib/views/slides/map-api-slide-to-ui.js +179 -0
  177. package/lib/{helpers → views/slides}/test/fixtures/free-text.d.ts +2 -1
  178. package/lib/views/slides/test/fixtures/free-text.js +38 -0
  179. package/lib/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +2 -1
  180. package/lib/views/slides/test/fixtures/qcm-drag.js +108 -0
  181. package/lib/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +2 -1
  182. package/lib/views/slides/test/fixtures/qcm-graphic.js +88 -0
  183. package/lib/{helpers → views/slides}/test/fixtures/qcm.d.ts +2 -1
  184. package/lib/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
  185. package/lib/{helpers → views/slides}/test/fixtures/select-template.d.ts +2 -1
  186. package/lib/views/slides/test/fixtures/select-template.js +92 -0
  187. package/lib/{helpers → views/slides}/test/fixtures/slider.d.ts +2 -1
  188. package/lib/views/slides/test/fixtures/slider.js +36 -0
  189. package/lib/{helpers → views/slides}/test/fixtures/text-template.d.ts +2 -1
  190. package/lib/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
  191. package/lib/views/slides/test/index.test.d.ts +1 -0
  192. package/lib/views/slides/test/index.test.js +234 -0
  193. package/lib/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
  194. package/lib/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
  195. package/package.json +6 -5
  196. package/src/actions/api/fetch-skills.ts +19 -12
  197. package/src/actions/api/fetch-slide.ts +35 -29
  198. package/src/actions/api/post-answer.ts +39 -0
  199. package/src/actions/api/post-progression.ts +22 -22
  200. package/src/actions/api/test/fetch-skills.test.ts +73 -0
  201. package/src/actions/api/test/fetch-slide.test.ts +80 -0
  202. package/src/actions/api/test/post-answer.test.ts +101 -0
  203. package/src/actions/api/test/post-progression.test.ts +122 -0
  204. package/src/actions/data/test/token.test.ts +29 -0
  205. package/src/actions/index.ts +1 -17
  206. package/src/actions/test/create-test-store.ts +25 -0
  207. package/src/actions/ui/answers.ts +63 -0
  208. package/src/actions/ui/slides.ts +1 -8
  209. package/src/actions/ui/test/answers.test.ts +103 -0
  210. package/src/actions/ui/test/slides.test.ts +30 -0
  211. package/src/common/index.ts +0 -7
  212. package/src/index.tsx +15 -32
  213. package/src/reducers/data/index.ts +1 -1
  214. package/src/reducers/data/progression.ts +2 -7
  215. package/src/reducers/data/slides.ts +12 -4
  216. package/src/reducers/data/test/progression.test.ts +42 -0
  217. package/src/reducers/data/test/skills.test.ts +14 -0
  218. package/src/reducers/data/test/slides.test.ts +26 -0
  219. package/src/reducers/data/test/token.test.ts +13 -0
  220. package/src/reducers/ui/answers.ts +15 -0
  221. package/src/reducers/ui/index.ts +6 -3
  222. package/src/reducers/ui/slide.ts +43 -0
  223. package/src/reducers/ui/test/answers.test.ts +33 -0
  224. package/src/reducers/ui/test/current-slide-ref.test.ts +14 -0
  225. package/src/reducers/ui/test/navigation.test.ts +19 -0
  226. package/src/reducers/ui/test/slide.test.ts +15 -0
  227. package/src/services/fetch-slide.ts +1 -1
  228. package/src/services/index.ts +3 -1
  229. package/src/services/post-answer.ts +27 -0
  230. package/src/services/test/fetch-slide.test.ts +30 -0
  231. package/src/services/test/post-answer.test.ts +68 -0
  232. package/src/services/test/post-progression.test.ts +9 -1
  233. package/src/test/util/services.mock.ts +93 -45
  234. package/src/types/common.ts +34 -44
  235. package/src/views/skills/index.ts +1 -5
  236. package/src/views/skills/test/skills.test.ts +101 -0
  237. package/src/views/slides/index.ts +186 -12
  238. package/src/views/slides/map-api-slide-to-ui.ts +251 -0
  239. package/src/views/slides/test/fixtures/free-text.ts +44 -0
  240. package/src/views/slides/test/fixtures/qcm-drag.ts +112 -0
  241. package/src/views/slides/test/fixtures/qcm-graphic.ts +95 -0
  242. package/src/{helpers → views/slides}/test/fixtures/qcm.ts +7 -2
  243. package/src/views/slides/test/fixtures/select-template.ts +99 -0
  244. package/src/views/slides/test/fixtures/slider.ts +42 -0
  245. package/src/{helpers → views/slides}/test/fixtures/text-template.ts +7 -2
  246. package/src/views/slides/test/index.test.ts +240 -0
  247. package/src/{helpers → views/slides}/test/map-api-slide-to-ui.test.ts +22 -10
  248. package/es/fixtures/qcm-slide.d.ts +0 -2
  249. package/es/fixtures/qcm-slide.js +0 -33
  250. package/es/fixtures/temp-fixture.d.ts +0 -3
  251. package/es/fixtures/temp-fixture.js +0 -84
  252. package/es/helpers/map-api-slide-to-ui.d.ts +0 -11
  253. package/es/helpers/map-api-slide-to-ui.js +0 -193
  254. package/es/helpers/test/fixtures/free-text.js +0 -30
  255. package/es/helpers/test/fixtures/qcm-drag.js +0 -112
  256. package/es/helpers/test/fixtures/qcm-graphic.js +0 -76
  257. package/es/helpers/test/fixtures/select-template.js +0 -94
  258. package/es/helpers/test/fixtures/slider.js +0 -33
  259. package/es/reducers/ui/slides.d.ts +0 -9
  260. package/es/reducers/ui/slides.js +0 -42
  261. package/es/types/views/slides.d.ts +0 -74
  262. package/es/types/views/slides.js +0 -6
  263. package/lib/fixtures/qcm-slide.d.ts +0 -2
  264. package/lib/fixtures/qcm-slide.js +0 -33
  265. package/lib/fixtures/temp-fixture.d.ts +0 -3
  266. package/lib/fixtures/temp-fixture.js +0 -84
  267. package/lib/helpers/map-api-slide-to-ui.d.ts +0 -11
  268. package/lib/helpers/map-api-slide-to-ui.js +0 -201
  269. package/lib/helpers/test/fixtures/free-text.js +0 -30
  270. package/lib/helpers/test/fixtures/qcm-drag.js +0 -112
  271. package/lib/helpers/test/fixtures/qcm-graphic.js +0 -76
  272. package/lib/helpers/test/fixtures/select-template.js +0 -94
  273. package/lib/helpers/test/fixtures/slider.js +0 -33
  274. package/lib/reducers/ui/slides.d.ts +0 -9
  275. package/lib/reducers/ui/slides.js +0 -43
  276. package/lib/types/views/slides.d.ts +0 -74
  277. package/lib/types/views/slides.js +0 -6
  278. package/src/fixtures/qcm-slide.ts +0 -35
  279. package/src/fixtures/temp-fixture.ts +0 -94
  280. package/src/helpers/map-api-slide-to-ui.ts +0 -279
  281. package/src/helpers/test/fixtures/free-text.ts +0 -33
  282. package/src/helpers/test/fixtures/qcm-drag.ts +0 -115
  283. package/src/helpers/test/fixtures/qcm-graphic.ts +0 -79
  284. package/src/helpers/test/fixtures/select-template.ts +0 -97
  285. package/src/helpers/test/fixtures/slider.ts +0 -36
  286. package/src/reducers/ui/slides.ts +0 -58
  287. package/src/types/views/slides.ts +0 -90
  288. /package/es/{helpers/test/map-api-slide-to-ui.test.d.ts → actions/api/test/fetch-skills.test.d.ts} +0 -0
  289. /package/{lib/helpers/test/map-api-slide-to-ui.test.d.ts → es/actions/api/test/fetch-slide.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import test from 'ava';
2
+ import nock from 'nock';
3
+ import { qcmDragSlide } from '../../views/slides/test/fixtures/qcm-drag';
4
+ import { fetchSlide } from '../fetch-slide';
5
+ test.before(() => {
6
+ nock('http://localhost:3000')
7
+ .get('/api/v2/slide/sli_123546/parentContentTitle')
8
+ .reply(200, qcmDragSlide);
9
+ });
10
+ test.after(() => {
11
+ nock.cleanAll();
12
+ });
13
+ test('should fetch a slide with the parentTitleContent info successfully', async (t) => {
14
+ const token = process.env.API_TEST_TOKEN || '';
15
+ const slide = await fetchSlide('sli_123546', token);
16
+ t.deepEqual(qcmDragSlide, slide);
17
+ });
18
+ test('should reject if a bad token is passed', async (t) => {
19
+ const badToken = 'token is not a jwt';
20
+ const error = await t.throwsAsync(() => fetchSlide('sli_123546', badToken));
21
+ t.is(error?.message, "Invalid token specified: Cannot read properties of undefined (reading 'replace')");
22
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,57 @@
1
+ import test from 'ava';
2
+ import nock from 'nock';
3
+ import { postAnswer } from '../post-answer';
4
+ const progressionId = '123456789123';
5
+ const skillRef = '_skill-ref';
6
+ const answer = ['Lister vos tâches pour vous libérer l’esprit', 'Vous isoler dans un lieu calme'];
7
+ const result = {
8
+ content: {
9
+ type: 'skill',
10
+ ref: skillRef
11
+ },
12
+ engine: {
13
+ ref: 'review'
14
+ },
15
+ _id: '123456123456',
16
+ state: {
17
+ allAnswers: [
18
+ {
19
+ slideRef: 'sli_NkvrWPFF2',
20
+ isCorrect: true,
21
+ answer
22
+ }
23
+ ],
24
+ isCorrect: true,
25
+ nextContent: {
26
+ type: 'slide',
27
+ ref: 'sli_NJ3m5KtWh'
28
+ },
29
+ pendingSlides: [],
30
+ slides: ['sli_NkvrWPFF2'],
31
+ content: {
32
+ ref: 'sli_NkvrWPFF2',
33
+ type: 'slide'
34
+ },
35
+ step: {
36
+ current: 2
37
+ },
38
+ stars: 4
39
+ }
40
+ };
41
+ test.before(() => {
42
+ const moocApi = nock('http://localhost:3000');
43
+ moocApi.post(`/api/v2/progressions/${progressionId}/answers`).reply(200, result);
44
+ });
45
+ test.after(() => {
46
+ nock.cleanAll();
47
+ });
48
+ test('should post the answers successfully', async (t) => {
49
+ const token = process.env.API_TEST_TOKEN || '';
50
+ const progression = await postAnswer(skillRef, token, progressionId, answer);
51
+ t.deepEqual(result, progression);
52
+ });
53
+ test('should reject bad token', async (t) => {
54
+ const badToken = 'token is not a jwt';
55
+ const error = await t.throwsAsync(() => postAnswer(skillRef, badToken, progressionId, answer));
56
+ t.is(error?.message, "Invalid token specified: Cannot read properties of undefined (reading 'replace')");
57
+ });
@@ -4,6 +4,13 @@ import { postProgression } from '../post-progression';
4
4
  const skillRef = '_skill-ref';
5
5
  const result = {
6
6
  _id: '123456123456',
7
+ content: {
8
+ ref: '_skill-ref',
9
+ type: 'skill'
10
+ },
11
+ engine: {
12
+ ref: 'review'
13
+ },
7
14
  state: {
8
15
  allAnswers: [],
9
16
  isCorrect: true,
@@ -15,7 +22,8 @@ const result = {
15
22
  slides: [],
16
23
  step: {
17
24
  current: 1
18
- }
25
+ },
26
+ stars: 0
19
27
  }
20
28
  };
21
29
  test.before(() => {
@@ -1,2 +1,3 @@
1
- import { Services } from '../../types/common';
1
+ import { ProgressionFromAPI, Services } from '../../types/common';
2
+ export declare const postAnswerResponse: ProgressionFromAPI;
2
3
  export declare const services: Services;
@@ -1,50 +1,94 @@
1
- import { qcmSlide } from '../../helpers/test/fixtures/qcm';
2
- export const services = {
3
- fetchSkills: () => {
4
- return Promise.resolve([
5
- {
6
- skillRef: '_skill-ref',
7
- slidesToReview: 2,
8
- name: 'skill-test',
9
- custom: false
10
- // TODO parentContentTitle
11
- },
12
- {
13
- skillRef: '_skill-ref-2',
14
- slidesToReview: 2,
15
- name: 'skill-test-2',
16
- custom: true,
17
- parentContentTitle: 'parentContentTitle 2'
18
- // TODO parentContentTitle
19
- }
20
- ]);
1
+ import { qcmSlide } from '../../views/slides/test/fixtures/qcm';
2
+ import { qcmGraphicSlide } from '../../views/slides/test/fixtures/qcm-graphic';
3
+ import { freeTextSlide } from '../../views/slides/test/fixtures/free-text';
4
+ import { sliderSlide } from '../../views/slides/test/fixtures/slider';
5
+ const getSlideFixture = (ref) => {
6
+ switch (ref) {
7
+ case qcmSlide.universalRef:
8
+ return qcmSlide;
9
+ case qcmGraphicSlide.universalRef:
10
+ return qcmGraphicSlide;
11
+ case freeTextSlide.universalRef:
12
+ return freeTextSlide;
13
+ default:
14
+ return sliderSlide;
15
+ }
16
+ };
17
+ const fetchSkillsResponse = [
18
+ {
19
+ skillRef: '_skill-ref',
20
+ slidesToReview: 2,
21
+ name: 'skill-test',
22
+ custom: false
23
+ },
24
+ {
25
+ skillRef: '_skill-ref-2',
26
+ slidesToReview: 2,
27
+ name: 'skill-test-2',
28
+ custom: true
29
+ }
30
+ ];
31
+ const postProgressionResponse = {
32
+ _id: '62b1d1087aa12f00253f40ee',
33
+ content: {
34
+ ref: '_skill-ref',
35
+ type: 'skill'
21
36
  },
22
- fetchSlide: ref => {
23
- return Promise.resolve({ ...qcmSlide, universalRef: ref, id: ref });
37
+ engine: {
38
+ ref: 'review'
24
39
  },
25
- postProgression: () => {
26
- return Promise.resolve({
27
- _id: '62b1d1087aa12f00253f40ee',
28
- content: {
29
- ref: '_skill-ref',
30
- type: 'skill'
31
- },
32
- engine: {
33
- ref: 'review'
34
- },
35
- state: {
36
- allAnswers: [],
40
+ state: {
41
+ allAnswers: [],
42
+ isCorrect: true,
43
+ nextContent: {
44
+ ref: 'sli_VJYjJnJhg',
45
+ type: 'slide'
46
+ },
47
+ pendingSlides: [],
48
+ slides: [],
49
+ step: {
50
+ current: 1
51
+ },
52
+ stars: 0
53
+ }
54
+ };
55
+ export const postAnswerResponse = {
56
+ _id: '62b1d1087aa12f00253f40ee',
57
+ content: {
58
+ ref: '_skill-ref',
59
+ type: 'skill'
60
+ },
61
+ engine: {
62
+ ref: 'review'
63
+ },
64
+ state: {
65
+ allAnswers: [
66
+ {
67
+ slideRef: 'sli_VJYjJnJhg',
37
68
  isCorrect: true,
38
- nextContent: {
39
- ref: 'sli_N1XACJobn',
40
- type: 'slide'
41
- },
42
- pendingSlides: [],
43
- slides: [],
44
- step: {
45
- current: 1
46
- }
69
+ answer: ['Benchmark']
47
70
  }
48
- });
71
+ ],
72
+ isCorrect: true,
73
+ nextContent: {
74
+ ref: 'sli_VkSQroQnx',
75
+ type: 'slide'
76
+ },
77
+ content: {
78
+ ref: 'sli_VJYjJnJhg',
79
+ type: 'slide'
80
+ },
81
+ pendingSlides: [],
82
+ slides: ['sli_VJYjJnJhg'],
83
+ step: {
84
+ current: 2
85
+ },
86
+ stars: 4
49
87
  }
50
88
  };
89
+ export const services = {
90
+ fetchSkills: () => Promise.resolve(fetchSkillsResponse),
91
+ fetchSlide: ref => Promise.resolve({ ...getSlideFixture(ref), universalRef: ref, id: ref }),
92
+ postProgression: () => Promise.resolve(postProgressionResponse),
93
+ postAnswer: () => Promise.resolve(postAnswerResponse)
94
+ };
@@ -1,5 +1,3 @@
1
- import { SlideIndexes } from '../common';
2
- import { AnswerUI } from './slides';
3
1
  declare type TemplateContextValues = {
4
2
  brandTheme?: unknown;
5
3
  theme?: unknown;
@@ -23,21 +21,21 @@ declare type BaseContent = {
23
21
  media?: unknown;
24
22
  choices: ChoiceFromAPI[];
25
23
  };
26
- declare type Question = {
24
+ declare type BaseQuestion = {
27
25
  header?: string;
28
26
  content: BaseContent;
29
27
  explanation?: string;
30
28
  };
31
- export declare type QcmQuestion = Question & {
29
+ export declare type QcmQuestion = BaseQuestion & {
32
30
  type: 'qcm';
33
31
  };
34
- export declare type QcmGraphicQuestion = Question & {
32
+ export declare type QcmGraphicQuestion = BaseQuestion & {
35
33
  type: 'qcmGraphic';
36
34
  };
37
- export declare type QcmDragQuestion = Question & {
35
+ export declare type QcmDragQuestion = BaseQuestion & {
38
36
  type: 'qcmDrag';
39
37
  };
40
- export declare type BasicQuestion = Omit<Question, 'content'> & {
38
+ export declare type BasicQuestion = Omit<BaseQuestion, 'content'> & {
41
39
  type: 'basic';
42
40
  content: {
43
41
  media?: unknown;
@@ -46,7 +44,7 @@ export declare type BasicQuestion = Omit<Question, 'content'> & {
46
44
  id: string;
47
45
  };
48
46
  };
49
- export declare type SliderQuestion = Omit<Question, 'content'> & {
47
+ export declare type SliderQuestion = Omit<BaseQuestion, 'content'> & {
50
48
  content: {
51
49
  media?: unknown;
52
50
  unitLabel: string;
@@ -56,20 +54,25 @@ export declare type SliderQuestion = Omit<Question, 'content'> & {
56
54
  };
57
55
  type: 'slider';
58
56
  };
59
- export declare type TemplateQuestion = Omit<Question, 'content'> & {
57
+ export declare type TemplateQuestion = Omit<BaseQuestion, 'content'> & {
60
58
  content: BaseContent & {
61
59
  template: string;
62
60
  };
63
61
  type: 'template';
64
62
  };
63
+ export declare type Question = QcmQuestion | QcmGraphicQuestion | QcmDragQuestion | BasicQuestion | SliderQuestion | TemplateQuestion;
65
64
  export declare type SlideFromAPI = {
66
- question: QcmQuestion | QcmGraphicQuestion | QcmDragQuestion | BasicQuestion | SliderQuestion | TemplateQuestion;
65
+ question: Question;
67
66
  klf: string;
68
67
  universalRef: string;
69
68
  tips?: string;
70
69
  clue?: string;
71
70
  hasClue?: boolean;
72
71
  id: string;
72
+ parentContentTitle: {
73
+ title: string;
74
+ type: 'chapter' | 'course';
75
+ };
73
76
  };
74
77
  declare type ProgressionAnswerItem = {
75
78
  isCorrect: boolean;
@@ -92,9 +95,17 @@ export declare type ProgressionState = {
92
95
  step: {
93
96
  current: number;
94
97
  };
98
+ stars: number;
95
99
  };
96
100
  export declare type ProgressionFromAPI = {
97
101
  _id: string;
102
+ content: {
103
+ type: 'skill';
104
+ ref: string;
105
+ };
106
+ engine: {
107
+ ref: 'review';
108
+ };
98
109
  state: ProgressionState;
99
110
  };
100
111
  export declare type Skill = {
@@ -107,6 +118,7 @@ export declare type Services = {
107
118
  fetchSkills(token: string): Promise<Skill[]>;
108
119
  fetchSlide(slideRef: string, token: string): Promise<SlideFromAPI | void>;
109
120
  postProgression(skillRef: string, token: string): Promise<ProgressionFromAPI>;
121
+ postAnswer(skillRef: string, token: string, progressionId: string, answer: string[]): Promise<ProgressionFromAPI>;
110
122
  };
111
123
  export declare type Options = {
112
124
  services: Services;
@@ -128,29 +140,6 @@ export declare type JWT = {
128
140
  usage: string;
129
141
  host: string;
130
142
  };
131
- declare type SlideUIAnimations = 'unstack' | 'restack';
132
- export declare type NextUISlide = {
133
- questionText?: string;
134
- answerUI?: AnswerUI;
135
- hidden?: boolean;
136
- position?: number;
137
- animationType?: SlideUIAnimations;
138
- isCorrect?: boolean;
139
- endReview?: boolean;
140
- };
141
- export declare type UISlide = {
142
- questionText?: string;
143
- answerUI?: AnswerUI;
144
- hidden?: boolean;
145
- position: number;
146
- animationType?: SlideUIAnimations;
147
- isCorrect?: boolean;
148
- endReview?: boolean;
149
- nextContent?: NextUISlide;
150
- };
151
- export declare type FinishedSlides = {
152
- [key in SlideIndexes]?: true;
153
- };
154
143
  export declare type WithRequired<T, K extends keyof T> = T & {
155
144
  [P in K]-?: T[P];
156
145
  };
@@ -23,4 +23,4 @@ declare type SkillsProps = NoSkillsProps & {
23
23
  listSkills: SkillCard[];
24
24
  };
25
25
  export { SkillsProps };
26
- export declare const mapStateToSkillsProps: (state: StoreState) => SkillsProps | null;
26
+ export declare const mapStateToSkillsProps: (state: StoreState) => SkillsProps;
@@ -1,7 +1,4 @@
1
1
  export const mapStateToSkillsProps = (state) => {
2
- if (!state.data.skills) {
3
- return null;
4
- }
5
2
  return {
6
3
  title: '@todo title',
7
4
  titleNoSkills: '@todo titleNoSkills',
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,94 @@
1
+ import test from 'ava';
2
+ import map from 'lodash/fp/map';
3
+ import omit from 'lodash/fp/omit';
4
+ import { mapStateToSkillsProps } from '..';
5
+ test('should create initial props when there are no skills on the state', t => {
6
+ const state = {
7
+ data: {
8
+ progression: null,
9
+ skills: [],
10
+ slides: {},
11
+ token: '1234'
12
+ },
13
+ ui: {
14
+ currentSlideRef: '',
15
+ navigation: ['loader', 'skills'],
16
+ answers: [],
17
+ slide: {
18
+ validateButton: false
19
+ }
20
+ }
21
+ };
22
+ const props = mapStateToSkillsProps(state);
23
+ t.deepEqual(props, {
24
+ title: '@todo title',
25
+ titleNoSkills: '@todo titleNoSkills',
26
+ textNoSkills: '@todo textNoSkills',
27
+ iconSkillAriaLabel: '@todo iconSkillAriaLabel',
28
+ isLoading: false,
29
+ isLoadingAriaLabel: '@todo loading',
30
+ listSkills: []
31
+ });
32
+ });
33
+ test('should create initial props when skills on the state', t => {
34
+ const state = {
35
+ data: {
36
+ progression: null,
37
+ skills: [
38
+ {
39
+ skillRef: '_skill-ref',
40
+ slidesToReview: 2,
41
+ name: 'skill-test',
42
+ custom: false
43
+ },
44
+ {
45
+ skillRef: '_skill-ref-2',
46
+ slidesToReview: 5,
47
+ name: 'skill-test-2',
48
+ custom: true
49
+ }
50
+ ],
51
+ slides: {},
52
+ token: '1234'
53
+ },
54
+ ui: {
55
+ currentSlideRef: '',
56
+ navigation: ['loader', 'skills'],
57
+ answers: [],
58
+ slide: {
59
+ validateButton: false
60
+ }
61
+ }
62
+ };
63
+ const props = mapStateToSkillsProps(state);
64
+ t.deepEqual(omit('listSkills', props), {
65
+ title: '@todo title',
66
+ titleNoSkills: '@todo titleNoSkills',
67
+ textNoSkills: '@todo textNoSkills',
68
+ iconSkillAriaLabel: '@todo iconSkillAriaLabel',
69
+ isLoading: false,
70
+ isLoadingAriaLabel: '@todo loading'
71
+ });
72
+ t.deepEqual(map(omit('onClick'), props.listSkills), [
73
+ {
74
+ 'aria-label': '',
75
+ isCustom: false,
76
+ skillTitle: 'skill-test',
77
+ skillAriaLabel: '@todo skill aria label',
78
+ buttonLabel: '@todo button',
79
+ buttonAriaLabel: '@todo button aria label',
80
+ reviseLabel: '@todo revise',
81
+ reviseAriaLabel: '@todo revise aria label'
82
+ },
83
+ {
84
+ 'aria-label': '',
85
+ isCustom: true,
86
+ skillTitle: 'skill-test-2',
87
+ skillAriaLabel: '@todo skill aria label',
88
+ buttonLabel: '@todo button',
89
+ buttonAriaLabel: '@todo button aria label',
90
+ reviseLabel: '@todo revise',
91
+ reviseAriaLabel: '@todo revise aria label'
92
+ }
93
+ ]);
94
+ });
@@ -1,3 +1,90 @@
1
+ import { Dispatch } from 'redux';
2
+ import { SlideIndexes } from '../../common';
1
3
  import { StoreState } from '../../reducers';
2
- import { SlidesViewStaticProps } from '../../types/views/slides';
3
- export declare const mapStateToSlidesProps: (state: StoreState) => SlidesViewStaticProps | null;
4
+ import { AnswerUI } from '../../types/slides';
5
+ declare const ICON_VALUES: {
6
+ readonly right: "right";
7
+ readonly wrong: "wrong";
8
+ readonly 'no-answer': "no-answer";
9
+ };
10
+ declare type IconValue = keyof typeof ICON_VALUES;
11
+ declare type StepItem = {
12
+ current: boolean;
13
+ icon: IconValue;
14
+ value: string;
15
+ };
16
+ declare type SlideUIAnimations = 'unstack' | 'restack';
17
+ export declare type UISlide = {
18
+ questionText?: string;
19
+ answerUI?: AnswerUI;
20
+ hidden?: boolean;
21
+ position: number;
22
+ animationType?: SlideUIAnimations;
23
+ isCorrect?: boolean;
24
+ endReview?: boolean;
25
+ loading: boolean;
26
+ };
27
+ declare type SlidesStack = {
28
+ [key in SlideIndexes]: UISlide;
29
+ };
30
+ export declare type CorrectionPopinProps = {
31
+ klf: {
32
+ label: string;
33
+ onClick: Function;
34
+ tooltip: string;
35
+ };
36
+ information: {
37
+ label: string;
38
+ message: string;
39
+ };
40
+ next: {
41
+ label: string;
42
+ ariaLabel: string;
43
+ };
44
+ successLabel: string;
45
+ failureLabel: string;
46
+ };
47
+ export declare type SlidesViewProps = {
48
+ header: {
49
+ mode: string;
50
+ skillName: string;
51
+ onQuitClick: Function;
52
+ 'aria-label'?: string;
53
+ closeButtonAriaLabel: string;
54
+ steps: StepItem[];
55
+ };
56
+ stack: {
57
+ slides: SlidesStack;
58
+ validateButton: {
59
+ label: string;
60
+ disabled: boolean;
61
+ onClick: Function;
62
+ };
63
+ correctionPopinProps?: CorrectionPopinProps;
64
+ endReview: boolean;
65
+ };
66
+ reviewBackgroundAriaLabel?: string;
67
+ congratsProps?: {
68
+ 'aria-label'?: string;
69
+ 'data-name'?: string;
70
+ animationLottie: unknown;
71
+ title: string;
72
+ cardCongratsStar: unknown;
73
+ cardCongratsRank: unknown;
74
+ buttonRevising: {
75
+ 'aria-label'?: string;
76
+ label: string;
77
+ onClick: Function;
78
+ type: string;
79
+ };
80
+ buttonRevisingSkill: {
81
+ 'aria-label'?: string;
82
+ label: string;
83
+ onClick: Function;
84
+ type: string;
85
+ };
86
+ };
87
+ };
88
+ export declare const initialState: SlidesStack;
89
+ export declare const mapStateToSlidesProps: (state: StoreState, dispatch: Dispatch) => SlidesViewProps;
90
+ export {};