@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,38 @@
1
+ import test from 'ava';
2
+ import reducer from '../progression';
3
+ import { POST_PROGRESSION_SUCCESS } from '../../../actions/api/post-progression';
4
+ test('should have initial value', function (t) {
5
+ var state = reducer(undefined, {});
6
+ t.is(state, null);
7
+ });
8
+ test('should set the value of POST_PROGRESSION_SUCCESS action', function (t) {
9
+ var progression = {
10
+ _id: '62b1d1087aa12f00253f40ee',
11
+ content: {
12
+ ref: '_skill-ref',
13
+ type: 'skill'
14
+ },
15
+ engine: {
16
+ ref: 'review'
17
+ },
18
+ state: {
19
+ allAnswers: [],
20
+ isCorrect: true,
21
+ nextContent: {
22
+ ref: 'sli_N1XACJobn',
23
+ type: 'slide'
24
+ },
25
+ pendingSlides: [],
26
+ slides: [],
27
+ step: {
28
+ current: 1
29
+ },
30
+ stars: 0
31
+ }
32
+ };
33
+ var state = reducer(null, {
34
+ type: POST_PROGRESSION_SUCCESS,
35
+ payload: progression
36
+ });
37
+ t.deepEqual(state, progression);
38
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import test from 'ava';
2
+ import reducer from '../skills';
3
+ import { SKILLS_FETCH_SUCCESS } from '../../../actions/api/fetch-skills';
4
+ test('should have inital value', function (t) {
5
+ var state = reducer(undefined, {});
6
+ t.deepEqual(state, []);
7
+ });
8
+ test('should set the value of SKILLS_FETCH_SUCCESS action', function (t) {
9
+ var skills = [{ skillRef: 'skill', name: 'skill name', slidesToReview: 5, custom: false }];
10
+ var state = reducer([], { type: SKILLS_FETCH_SUCCESS, payload: skills });
11
+ t.deepEqual(state, skills);
12
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ import test from 'ava';
2
+ import reducer from '../slides';
3
+ import { SLIDE_FETCH_REQUEST, SLIDE_FETCH_SUCCESS } from '../../../actions/api/fetch-slide';
4
+ import { freeTextSlide } from '../../../views/slides/test/fixtures/free-text';
5
+ test('should have inital value', function (t) {
6
+ var state = reducer(undefined, {});
7
+ t.deepEqual(state, {});
8
+ });
9
+ test('should set the value of SLIDE_FETCH_REQUEST action', function (t) {
10
+ var state = reducer({}, { type: SLIDE_FETCH_REQUEST, meta: { slideRef: 'slideRef' } });
11
+ t.deepEqual(state, {
12
+ slideRef: null
13
+ });
14
+ });
15
+ test('should set the value of SLIDE_FETCH_SUCCESS action', function (t) {
16
+ var state = reducer({}, { type: SLIDE_FETCH_SUCCESS, payload: freeTextSlide, meta: { slideRef: 'sli_VJYjJnJhg' } });
17
+ t.deepEqual(state, {
18
+ sli_VJYjJnJhg: freeTextSlide
19
+ });
20
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import test from 'ava';
2
+ import reducer from '../token';
3
+ import { STORE_TOKEN } from '../../../actions/data/token';
4
+ test('should have inital value', function (t) {
5
+ var state = reducer(undefined, {});
6
+ t.is(state, null);
7
+ });
8
+ test('should set the value of STORE_TOKEN action', function (t) {
9
+ var state = reducer(null, { type: STORE_TOKEN, payload: 'token' });
10
+ t.is(state, 'token');
11
+ });
@@ -14,7 +14,8 @@ declare const _default: import("redux").Reducer<import("redux").CombinedState<{
14
14
  ui: import("redux").CombinedState<{
15
15
  currentSlideRef: string;
16
16
  navigation: import("./ui/navigation").NavigationState;
17
- slides: import("./ui/slides").UISlidesState;
17
+ answers: import("./ui/answers").AnswerState;
18
+ slide: import("./ui/slide").UISlideState;
18
19
  }>;
19
- }>, import("../actions/ui/slides").SetCurrentSlide | import("../actions/api/post-progression").ReceiveProgression | import("../actions/api/fetch-skills").ReceivedSkills | import("./data/slides").SlidesAction | import("../actions/data/token").StoreToken | import("../actions/ui/navigation").NavigateTo | import("../actions/ui/navigation").NavigateBack>;
20
+ }>, import("../actions/ui/slides").SetCurrentSlide | import("../actions/api/post-progression").ReceivedProgression | import("../actions/api/fetch-skills").ReceivedSkills | import("./data/slides").SlidesAction | import("../actions/data/token").StoreToken | import("../actions/ui/navigation").NavigateTo | import("../actions/ui/navigation").NavigateBack | import("../actions/ui/answers").EditAnswerAction | import("../actions/api/post-answer").PostAnswerRequestAction>;
20
21
  export default _default;
@@ -0,0 +1,4 @@
1
+ import { EditAnswerAction } from '../../actions/ui/answers';
2
+ export declare type AnswerState = string[];
3
+ declare const reducer: (state: AnswerState | undefined, action: EditAnswerAction) => AnswerState;
4
+ export default reducer;
@@ -0,0 +1,10 @@
1
+ import { includes, values } from 'lodash/fp';
2
+ import { ANSWER_EDIT } from '../../actions/ui/answers';
3
+ var ANSWER_EDIT_ACTIONS = values(ANSWER_EDIT);
4
+ var reducer = function (
5
+ // eslint-disable-next-line default-param-last
6
+ state, action) {
7
+ if (state === void 0) { state = []; }
8
+ return includes(action.type, ANSWER_EDIT_ACTIONS) ? action.payload : state;
9
+ };
10
+ export default reducer;
@@ -1,14 +1,17 @@
1
1
  import { CurrentSlideRefState } from './current-slide-ref';
2
2
  import { NavigationState } from './navigation';
3
- import { UISlidesState } from './slides';
3
+ import { AnswerState } from './answers';
4
+ import { UISlideState } from './slide';
4
5
  export declare type UIState = {
5
6
  currentSlideRef: CurrentSlideRefState;
6
7
  navigation: NavigationState;
7
- slides: UISlidesState;
8
+ answers: AnswerState;
9
+ slide: UISlideState;
8
10
  };
9
11
  declare const _default: import("redux").Reducer<import("redux").CombinedState<{
10
12
  currentSlideRef: string;
11
13
  navigation: NavigationState;
12
- slides: UISlidesState;
13
- }>, import("../../actions/ui/slides").SetCurrentSlide | import("../../actions/ui/navigation").NavigateTo | import("../../actions/ui/navigation").NavigateBack>;
14
+ answers: AnswerState;
15
+ slide: UISlideState;
16
+ }>, import("../../actions/ui/slides").SetCurrentSlide | import("../../actions/ui/navigation").NavigateTo | import("../../actions/ui/navigation").NavigateBack | import("../../actions/ui/answers").EditAnswerAction | import("../../actions/api/post-answer").PostAnswerRequestAction>;
14
17
  export default _default;
@@ -1,9 +1,11 @@
1
1
  import { combineReducers } from 'redux';
2
2
  import currentSlideRef from './current-slide-ref';
3
3
  import navigation from './navigation';
4
- import slides from './slides';
4
+ import answers from './answers';
5
+ import slide from './slide';
5
6
  export default combineReducers({
6
7
  currentSlideRef: currentSlideRef,
7
8
  navigation: navigation,
8
- slides: slides
9
+ answers: answers,
10
+ slide: slide
9
11
  });
@@ -0,0 +1,8 @@
1
+ import { EditAnswerAction } from '../../actions/ui/answers';
2
+ import { PostAnswerRequestAction } from '../../actions/api/post-answer';
3
+ export declare type UISlideState = {
4
+ validateButton: boolean;
5
+ };
6
+ export declare const initialState: UISlideState;
7
+ declare const reducer: (state: UISlideState | undefined, action: PostAnswerRequestAction | EditAnswerAction) => UISlideState;
8
+ export default reducer;
@@ -0,0 +1,27 @@
1
+ import compact from 'lodash/fp/compact';
2
+ import isEmpty from 'lodash/fp/isEmpty';
3
+ import pipe from 'lodash/fp/pipe';
4
+ import { EDIT_BASIC, EDIT_QCM, EDIT_QCM_DRAG, EDIT_QCM_GRAPHIC, EDIT_SLIDER, EDIT_TEMPLATE } from '../../actions/ui/answers';
5
+ import { POST_ANSWER_REQUEST } from '../../actions/api/post-answer';
6
+ export var initialState = { validateButton: false };
7
+ var reducer = function (
8
+ // eslint-disable-next-line default-param-last
9
+ state, action) {
10
+ if (state === void 0) { state = initialState; }
11
+ switch (action.type) {
12
+ case EDIT_QCM:
13
+ case EDIT_QCM_GRAPHIC:
14
+ case EDIT_QCM_DRAG:
15
+ case EDIT_TEMPLATE:
16
+ case EDIT_BASIC:
17
+ case EDIT_SLIDER: {
18
+ return pipe(compact, isEmpty)(action.payload) ? initialState : { validateButton: true };
19
+ }
20
+ case POST_ANSWER_REQUEST: {
21
+ return initialState;
22
+ }
23
+ default:
24
+ return state;
25
+ }
26
+ };
27
+ export default reducer;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ import test from 'ava';
2
+ import reducer from '../answers';
3
+ import { ANSWER_EDIT } from '../../../actions/ui/answers';
4
+ test('should have initial value', function (t) {
5
+ var state = reducer(undefined, {});
6
+ t.deepEqual(state, []);
7
+ });
8
+ test('should set the value of EDIT_BASIC action', function (t) {
9
+ var state = reducer([], { type: ANSWER_EDIT.basic, payload: ['value'] });
10
+ t.deepEqual(state, ['value']);
11
+ });
12
+ test('should set the value of EDIT_QCM action', function (t) {
13
+ var state = reducer([], { type: ANSWER_EDIT.qcm, payload: ['value1', 'value2'] });
14
+ t.deepEqual(state, ['value1', 'value2']);
15
+ });
16
+ test('should set the value of EDIT_QCM_GRAPHIC action', function (t) {
17
+ var state = reducer([], { type: ANSWER_EDIT.qcmGraphic, payload: ['True', 'False'] });
18
+ t.deepEqual(state, ['True', 'False']);
19
+ });
20
+ test('should set the value of EDIT_QCM_DRAG action', function (t) {
21
+ var state = reducer([], { type: ANSWER_EDIT.qcmDrag, payload: ['value1', 'value2'] });
22
+ t.deepEqual(state, ['value1', 'value2']);
23
+ });
24
+ test('should set the value of EDIT_SLIDER action', function (t) {
25
+ var state = reducer([], { type: ANSWER_EDIT.slider, payload: ['5'] });
26
+ t.deepEqual(state, ['5']);
27
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import test from 'ava';
2
+ import reducer from '../current-slide-ref';
3
+ import { SET_CURRENT_SLIDE } from '../../../actions/ui/slides';
4
+ import { freeTextSlide } from '../../../views/slides/test/fixtures/free-text';
5
+ test('should have initial value', function (t) {
6
+ var state = reducer(undefined, {});
7
+ t.is(state, '');
8
+ });
9
+ test('should set the value of SET_CURRENT_SLIDE action', function (t) {
10
+ var state = reducer('', { type: SET_CURRENT_SLIDE, payload: freeTextSlide });
11
+ t.is(state, 'sli_VJYjJnJhg');
12
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import test from 'ava';
2
+ import reducer from '../navigation';
3
+ import { navigateBack, navigateTo } from '../../../actions/ui/navigation';
4
+ test('should have initial value', function (t) {
5
+ var state = reducer(undefined, {});
6
+ t.deepEqual(state, []);
7
+ });
8
+ test('should set the value of NAVIGATE_TO and NAVIGATE_BACK action', function (t) {
9
+ var state = reducer([], navigateTo('loader'));
10
+ t.deepEqual(state, ['loader']);
11
+ var updatedState = reducer(state, navigateTo('skills'));
12
+ t.deepEqual(updatedState, ['loader', 'skills']);
13
+ var _updatedState = reducer(updatedState, navigateBack());
14
+ t.deepEqual(_updatedState, ['loader']);
15
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import test from 'ava';
2
+ import reducer, { initialState } from '../slide';
3
+ import { EDIT_BASIC } from '../../../actions/ui/answers';
4
+ test('should use initial state if no answers are found when an EditAnswerAction is received', function (t) {
5
+ var state = reducer(undefined, { type: EDIT_BASIC, payload: [''] });
6
+ t.truthy(state);
7
+ t.false(state.validateButton);
8
+ });
9
+ test('should return state directly when there is no corresponding action handler + have an initial state', function (t) {
10
+ var state = reducer(undefined, { type: 'NOPE' });
11
+ t.deepEqual(state, initialState);
12
+ });
@@ -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), {
46
+ return [4 /*yield*/, crossFetch("".concat(host, "/api/v2/slide/").concat(slideRef, "/parentContentTitle"), {
47
47
  headers: { authorization: token }
48
48
  })];
49
49
  case 1:
@@ -1,8 +1,10 @@
1
1
  import { fetchSkills } from './fetch-skills';
2
2
  import { postProgression } from './post-progression';
3
3
  import { fetchSlide } from './fetch-slide';
4
+ import { postAnswer } from './post-answer';
4
5
  export var getServices = function () { return ({
5
6
  fetchSkills: fetchSkills,
6
7
  fetchSlide: fetchSlide,
7
- postProgression: postProgression
8
+ postProgression: postProgression,
9
+ postAnswer: postAnswer
8
10
  }); };
@@ -0,0 +1,2 @@
1
+ import { ProgressionFromAPI } from '../types/common';
2
+ export declare const postAnswer: (skillRef: string, token: string, progressionId: string, answer: string[]) => Promise<ProgressionFromAPI>;
@@ -0,0 +1,62 @@
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
+ import crossFetch from 'cross-fetch';
38
+ import decode from 'jwt-decode';
39
+ import { toJSON } from './tools/fetch-responses';
40
+ export var postAnswer = function (skillRef, token, progressionId, answer) { return __awaiter(void 0, void 0, void 0, function () {
41
+ var host, response;
42
+ return __generator(this, function (_a) {
43
+ switch (_a.label) {
44
+ case 0:
45
+ host = decode(token).host;
46
+ return [4 /*yield*/, crossFetch("".concat(host, "/api/v2/progressions/").concat(progressionId, "/answers"), {
47
+ method: 'post',
48
+ headers: { authorization: token },
49
+ body: JSON.stringify({
50
+ content: {
51
+ ref: skillRef,
52
+ type: 'slide'
53
+ },
54
+ answer: answer
55
+ })
56
+ })];
57
+ case 1:
58
+ response = _a.sent();
59
+ return [2 /*return*/, toJSON(response)];
60
+ }
61
+ });
62
+ }); };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,76 @@
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
+ import test from 'ava';
38
+ import nock from 'nock';
39
+ import { qcmDragSlide } from '../../views/slides/test/fixtures/qcm-drag';
40
+ import { fetchSlide } from '../fetch-slide';
41
+ test.before(function () {
42
+ nock('http://localhost:3000')
43
+ .get('/api/v2/slide/sli_123546/parentContentTitle')
44
+ .reply(200, qcmDragSlide);
45
+ });
46
+ test.after(function () {
47
+ nock.cleanAll();
48
+ });
49
+ test('should fetch a slide with the parentTitleContent info successfully', function (t) { return __awaiter(void 0, void 0, void 0, function () {
50
+ var token, slide;
51
+ return __generator(this, function (_a) {
52
+ switch (_a.label) {
53
+ case 0:
54
+ token = process.env.API_TEST_TOKEN || '';
55
+ return [4 /*yield*/, fetchSlide('sli_123546', token)];
56
+ case 1:
57
+ slide = _a.sent();
58
+ t.deepEqual(qcmDragSlide, slide);
59
+ return [2 /*return*/];
60
+ }
61
+ });
62
+ }); });
63
+ test('should reject if a bad token is passed', function (t) { return __awaiter(void 0, void 0, void 0, function () {
64
+ var badToken, error;
65
+ return __generator(this, function (_a) {
66
+ switch (_a.label) {
67
+ case 0:
68
+ badToken = 'token is not a jwt';
69
+ return [4 /*yield*/, t.throwsAsync(function () { return fetchSlide('sli_123546', badToken); })];
70
+ case 1:
71
+ error = _a.sent();
72
+ t.is(error === null || error === void 0 ? void 0 : error.message, "Invalid token specified: Cannot read properties of undefined (reading 'replace')");
73
+ return [2 /*return*/];
74
+ }
75
+ });
76
+ }); });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,111 @@
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
+ import test from 'ava';
38
+ import nock from 'nock';
39
+ import { postAnswer } from '../post-answer';
40
+ var progressionId = '123456789123';
41
+ var skillRef = '_skill-ref';
42
+ var answer = ['Lister vos tâches pour vous libérer l’esprit', 'Vous isoler dans un lieu calme'];
43
+ var result = {
44
+ content: {
45
+ type: 'skill',
46
+ ref: skillRef
47
+ },
48
+ engine: {
49
+ ref: 'review'
50
+ },
51
+ _id: '123456123456',
52
+ state: {
53
+ allAnswers: [
54
+ {
55
+ slideRef: 'sli_NkvrWPFF2',
56
+ isCorrect: true,
57
+ answer: answer
58
+ }
59
+ ],
60
+ isCorrect: true,
61
+ nextContent: {
62
+ type: 'slide',
63
+ ref: 'sli_NJ3m5KtWh'
64
+ },
65
+ pendingSlides: [],
66
+ slides: ['sli_NkvrWPFF2'],
67
+ content: {
68
+ ref: 'sli_NkvrWPFF2',
69
+ type: 'slide'
70
+ },
71
+ step: {
72
+ current: 2
73
+ },
74
+ stars: 4
75
+ }
76
+ };
77
+ test.before(function () {
78
+ var moocApi = nock('http://localhost:3000');
79
+ moocApi.post("/api/v2/progressions/".concat(progressionId, "/answers")).reply(200, result);
80
+ });
81
+ test.after(function () {
82
+ nock.cleanAll();
83
+ });
84
+ test('should post the answers successfully', function (t) { return __awaiter(void 0, void 0, void 0, function () {
85
+ var token, progression;
86
+ return __generator(this, function (_a) {
87
+ switch (_a.label) {
88
+ case 0:
89
+ token = process.env.API_TEST_TOKEN || '';
90
+ return [4 /*yield*/, postAnswer(skillRef, token, progressionId, answer)];
91
+ case 1:
92
+ progression = _a.sent();
93
+ t.deepEqual(result, progression);
94
+ return [2 /*return*/];
95
+ }
96
+ });
97
+ }); });
98
+ test('should reject bad token', function (t) { return __awaiter(void 0, void 0, void 0, function () {
99
+ var badToken, error;
100
+ return __generator(this, function (_a) {
101
+ switch (_a.label) {
102
+ case 0:
103
+ badToken = 'token is not a jwt';
104
+ return [4 /*yield*/, t.throwsAsync(function () { return postAnswer(skillRef, badToken, progressionId, answer); })];
105
+ case 1:
106
+ error = _a.sent();
107
+ t.is(error === null || error === void 0 ? void 0 : error.message, "Invalid token specified: Cannot read properties of undefined (reading 'replace')");
108
+ return [2 /*return*/];
109
+ }
110
+ });
111
+ }); });
@@ -40,6 +40,13 @@ import { postProgression } from '../post-progression';
40
40
  var skillRef = '_skill-ref';
41
41
  var result = {
42
42
  _id: '123456123456',
43
+ content: {
44
+ ref: '_skill-ref',
45
+ type: 'skill'
46
+ },
47
+ engine: {
48
+ ref: 'review'
49
+ },
43
50
  state: {
44
51
  allAnswers: [],
45
52
  isCorrect: true,
@@ -51,7 +58,8 @@ var result = {
51
58
  slides: [],
52
59
  step: {
53
60
  current: 1
54
- }
61
+ },
62
+ stars: 0
55
63
  }
56
64
  };
57
65
  test.before(function () {
@@ -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;