scorm-again 1.7.1 → 2.1.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 (124) hide show
  1. package/.babelrc +18 -7
  2. package/.github/dependabot.yml +5 -0
  3. package/.github/workflows/main.yml +79 -0
  4. package/.github/workflows/stale.yml +14 -0
  5. package/.jsdoc.json +4 -5
  6. package/.mocharc.json +8 -0
  7. package/.run/{Mocha Unit Tests.run.xml → Mocha Unit Tests (watch).run.xml } +6 -3
  8. package/.run/Template Mocha.run.xml +17 -0
  9. package/CONTRIBUTING.md +1 -1
  10. package/README.md +183 -71
  11. package/dist/aicc.js +3822 -7030
  12. package/dist/aicc.js.map +1 -1
  13. package/dist/aicc.min.js +2 -40
  14. package/dist/aicc.min.js.map +1 -0
  15. package/dist/scorm-again.js +5965 -10498
  16. package/dist/scorm-again.js.map +1 -1
  17. package/dist/scorm-again.min.js +2 -52
  18. package/dist/scorm-again.min.js.map +1 -0
  19. package/dist/scorm12.js +3028 -5373
  20. package/dist/scorm12.js.map +1 -1
  21. package/dist/scorm12.min.js +2 -34
  22. package/dist/scorm12.min.js.map +1 -0
  23. package/dist/scorm2004.js +4054 -6693
  24. package/dist/scorm2004.js.map +1 -1
  25. package/dist/scorm2004.min.js +2 -40
  26. package/dist/scorm2004.min.js.map +1 -0
  27. package/eslint.config.js +21 -0
  28. package/package.json +76 -34
  29. package/results.json +34254 -0
  30. package/src/AICC.ts +72 -0
  31. package/src/BaseAPI.ts +1300 -0
  32. package/src/Scorm12API.ts +387 -0
  33. package/src/Scorm2004API.ts +688 -0
  34. package/src/cmi/aicc/attempts.ts +94 -0
  35. package/src/cmi/aicc/cmi.ts +100 -0
  36. package/src/cmi/aicc/core.ts +360 -0
  37. package/src/cmi/aicc/evaluation.ts +157 -0
  38. package/src/cmi/aicc/paths.ts +180 -0
  39. package/src/cmi/aicc/student_data.ts +86 -0
  40. package/src/cmi/aicc/student_demographics.ts +367 -0
  41. package/src/cmi/aicc/student_preferences.ts +176 -0
  42. package/src/cmi/aicc/tries.ts +116 -0
  43. package/src/cmi/aicc/validation.ts +25 -0
  44. package/src/cmi/common/array.ts +77 -0
  45. package/src/cmi/common/base_cmi.ts +46 -0
  46. package/src/cmi/common/score.ts +203 -0
  47. package/src/cmi/common/validation.ts +60 -0
  48. package/src/cmi/scorm12/cmi.ts +224 -0
  49. package/src/cmi/scorm12/interactions.ts +368 -0
  50. package/src/cmi/scorm12/nav.ts +54 -0
  51. package/src/cmi/scorm12/objectives.ts +112 -0
  52. package/src/cmi/scorm12/student_data.ts +130 -0
  53. package/src/cmi/scorm12/student_preference.ts +158 -0
  54. package/src/cmi/scorm12/validation.ts +48 -0
  55. package/src/cmi/scorm2004/adl.ts +272 -0
  56. package/src/cmi/scorm2004/cmi.ts +599 -0
  57. package/src/cmi/scorm2004/comments.ts +163 -0
  58. package/src/cmi/scorm2004/interactions.ts +466 -0
  59. package/src/cmi/scorm2004/learner_preference.ts +152 -0
  60. package/src/cmi/scorm2004/objectives.ts +212 -0
  61. package/src/cmi/scorm2004/score.ts +78 -0
  62. package/src/cmi/scorm2004/validation.ts +42 -0
  63. package/src/constants/api_constants.ts +318 -0
  64. package/src/constants/default_settings.ts +81 -0
  65. package/src/constants/enums.ts +5 -0
  66. package/src/constants/error_codes.ts +88 -0
  67. package/src/constants/language_constants.ts +394 -0
  68. package/src/constants/regex.ts +97 -0
  69. package/src/constants/{response_constants.js → response_constants.ts} +69 -62
  70. package/src/exceptions.ts +154 -0
  71. package/src/exports/aicc.js +1 -1
  72. package/src/exports/scorm-again.js +3 -3
  73. package/src/exports/scorm12.js +1 -1
  74. package/src/exports/scorm2004.js +1 -1
  75. package/src/helpers/scheduled_commit.ts +42 -0
  76. package/src/interfaces/IBaseAPI.ts +35 -0
  77. package/src/types/api_types.ts +32 -0
  78. package/src/utilities/debounce.ts +31 -0
  79. package/src/utilities.ts +338 -0
  80. package/tea.yaml +6 -0
  81. package/test/{AICC.spec.js → AICC.spec.ts} +79 -71
  82. package/test/Scorm12API.spec.ts +833 -0
  83. package/test/Scorm2004API.spec.ts +1298 -0
  84. package/test/api_helpers.ts +176 -0
  85. package/test/cmi/aicc_cmi.spec.ts +845 -0
  86. package/test/cmi/{scorm12_cmi.spec.js → scorm12_cmi.spec.ts} +253 -271
  87. package/test/cmi/scorm2004_cmi.spec.ts +1031 -0
  88. package/test/cmi_helpers.ts +207 -0
  89. package/test/exceptions.spec.ts +79 -0
  90. package/test/field_values.ts +202 -0
  91. package/test/types/api_types.spec.ts +126 -0
  92. package/test/utilities/debounce.spec.ts +56 -0
  93. package/test/utilities.spec.ts +322 -0
  94. package/tsconfig.json +18 -0
  95. package/webpack.config.js +65 -0
  96. package/.circleci/config.yml +0 -99
  97. package/.codeclimate.yml +0 -7
  98. package/.eslintrc.js +0 -36
  99. package/src/.flowconfig +0 -11
  100. package/src/AICC.js +0 -68
  101. package/src/BaseAPI.js +0 -1275
  102. package/src/Scorm12API.js +0 -308
  103. package/src/Scorm2004API.js +0 -572
  104. package/src/cmi/aicc_cmi.js +0 -1141
  105. package/src/cmi/common.js +0 -328
  106. package/src/cmi/scorm12_cmi.js +0 -1312
  107. package/src/cmi/scorm2004_cmi.js +0 -1692
  108. package/src/constants/api_constants.js +0 -218
  109. package/src/constants/error_codes.js +0 -87
  110. package/src/constants/language_constants.js +0 -76
  111. package/src/constants/regex.js +0 -84
  112. package/src/exceptions.js +0 -104
  113. package/src/utilities.js +0 -242
  114. package/test/Scorm12API.spec.js +0 -528
  115. package/test/Scorm2004API.spec.js +0 -775
  116. package/test/abstract_classes.spec.js +0 -17
  117. package/test/api_helpers.js +0 -128
  118. package/test/cmi/aicc_cmi.spec.js +0 -684
  119. package/test/cmi/scorm2004_cmi.spec.js +0 -1066
  120. package/test/cmi_helpers.js +0 -161
  121. package/test/exceptions.spec.js +0 -71
  122. package/test/field_values.js +0 -353
  123. package/test/utilities.spec.js +0 -339
  124. package/webpack.js +0 -78
@@ -1,684 +0,0 @@
1
- import {describe, it} from 'mocha';
2
- import APIConstants from '../../src/constants/api_constants';
3
- import ErrorCodes from '../../src/constants/error_codes';
4
- import {
5
- CMI,
6
- CMIEvaluationCommentsObject,
7
- CMITriesObject,
8
- } from '../../src/cmi/aicc_cmi';
9
- import * as h from '../cmi_helpers';
10
- import {
11
- CMIInteractionsObject,
12
- CMIObjectivesObject,
13
- NAV,
14
- } from '../../src/cmi/scorm12_cmi';
15
- import {expect} from 'chai';
16
- import {scorm12_values} from '../field_values';
17
-
18
- const aicc_constants = APIConstants.aicc;
19
- const scorm12_error_codes = ErrorCodes.scorm12;
20
-
21
- const invalid_set = scorm12_error_codes.INVALID_SET_VALUE;
22
- const type_mismatch = scorm12_error_codes.TYPE_MISMATCH;
23
- const write_only = scorm12_error_codes.WRITE_ONLY_ELEMENT;
24
- const read_only = scorm12_error_codes.READ_ONLY_ELEMENT;
25
-
26
- describe('AICC CMI Tests', () => {
27
- describe('CMI Spec Tests', () => {
28
- describe('Pre-Initialize Tests', () => {
29
- const cmi = () => {
30
- return new CMI();
31
- };
32
-
33
- /**
34
- * Base CMI Properties
35
- */
36
- h.checkReadOnly({
37
- cmi: cmi(),
38
- fieldName: 'cmi._version',
39
- expectedValue: '3.4',
40
- expectedError: invalid_set,
41
- });
42
- h.checkReadOnly({
43
- cmi: cmi(),
44
- fieldName: 'cmi._children',
45
- expectedValue: aicc_constants.cmi_children,
46
- expectedError: invalid_set,
47
- });
48
-
49
- h.checkFieldConstraintSize({
50
- cmi: cmi(),
51
- fieldName: 'cmi.suspend_data', limit: 4096,
52
- expectedError: type_mismatch,
53
- });
54
- h.checkReadAndWrite({
55
- cmi: cmi(),
56
- fieldName: 'cmi.launch_data',
57
- });
58
- h.checkFieldConstraintSize({
59
- cmi: cmi(),
60
- fieldName: 'cmi.comments', limit: 4096,
61
- expectedError: type_mismatch,
62
- });
63
- h.checkReadAndWrite({
64
- cmi: cmi(),
65
- fieldName: 'cmi.comments_from_lms',
66
- });
67
-
68
- /**
69
- * cmi.core Properties
70
- */
71
- h.checkReadOnly({
72
- cmi: cmi(),
73
- fieldName: 'cmi.core._children',
74
- expectedValue: aicc_constants.core_children,
75
- expectedError: invalid_set,
76
- });
77
- h.checkReadAndWrite({
78
- cmi: cmi(),
79
- fieldName: 'cmi.core.student_id',
80
- });
81
- h.checkReadAndWrite({
82
- cmi: cmi(),
83
- fieldName: 'cmi.core.student_name',
84
- });
85
- h.checkFieldConstraintSize({
86
- cmi: cmi(),
87
- fieldName: 'cmi.core.lesson_location',
88
- limit: 255,
89
- expectedError: type_mismatch,
90
- });
91
- h.checkReadAndWrite({
92
- cmi: cmi(),
93
- fieldName: 'cmi.core.credit',
94
- });
95
- h.checkRead({
96
- cmi: cmi(),
97
- fieldName: 'cmi.core.lesson_status',
98
- expectedValue: 'not attempted',
99
- });
100
- h.checkValidValues({
101
- cmi: cmi(),
102
- fieldName: 'cmi.core.lesson_status',
103
- validValues: scorm12_values.validLessonStatus,
104
- invalidValues: scorm12_values.invalidLessonStatus,
105
- });
106
- h.checkReadAndWrite({
107
- cmi: cmi(),
108
- fieldName: 'cmi.core.entry',
109
- });
110
- h.checkReadAndWrite({
111
- cmi: cmi(),
112
- fieldName: 'cmi.core.total_time',
113
- });
114
- h.checkReadAndWrite({
115
- cmi: cmi(),
116
- fieldName: 'cmi.core.lesson_mode',
117
- expectedValue: 'normal',
118
- });
119
- h.checkWrite({
120
- cmi: cmi(),
121
- fieldName: 'cmi.core.exit',
122
- valueToTest: 'suspend',
123
- });
124
- h.checkValidValues({
125
- cmi: cmi(),
126
- fieldName: 'cmi.core.exit',
127
- validValues: scorm12_values.validExit,
128
- invalidValues: scorm12_values.invalidExit,
129
- });
130
-
131
- h.checkWriteOnly({
132
- cmi: cmi(),
133
- fieldName: 'cmi.core.session_time',
134
- valueToTest: '00:00:00',
135
- expectedError: write_only,
136
- });
137
- h.checkValidValues({
138
- cmi: cmi(),
139
- fieldName: 'cmi.core.session_time',
140
- validValues: scorm12_values.validTimespan,
141
- invalidValues: scorm12_values.invalidTimespan,
142
- });
143
-
144
- /**
145
- * cmi.core.score Properties
146
- */
147
- h.checkReadOnly({
148
- cmi: cmi(),
149
- fieldName: 'cmi.core.score._children',
150
- expectedValue: aicc_constants.score_children,
151
- expectedError: invalid_set,
152
- });
153
-
154
- h.checkValidValues({
155
- cmi: cmi(),
156
- fieldName: 'cmi.core.score.raw',
157
- validValues: scorm12_values.validScoreRange,
158
- invalidValues: scorm12_values.invalidScoreRange,
159
- });
160
- h.checkValidValues({
161
- cmi: cmi(),
162
- fieldName: 'cmi.core.score.min',
163
- validValues: scorm12_values.validScoreRange,
164
- invalidValues: scorm12_values.invalidScoreRange,
165
- });
166
- h.checkValidValues({
167
- cmi: cmi(),
168
- fieldName: 'cmi.core.score.max',
169
- validValues: scorm12_values.validScoreRange,
170
- invalidValues: scorm12_values.invalidScoreRange,
171
- });
172
-
173
- /**
174
- * cmi.objectives Properties
175
- */
176
- h.checkReadOnly({
177
- cmi: cmi(),
178
- fieldName: 'cmi.objectives._children',
179
- expectedValue: aicc_constants.objectives_children,
180
- expectedError: invalid_set,
181
- });
182
- h.checkReadOnly({
183
- cmi: cmi(),
184
- fieldName: 'cmi.objectives._count', expectedValue: 0,
185
- expectedError: invalid_set,
186
- });
187
-
188
- /**
189
- * cmi.student_data Properties
190
- */
191
- h.checkReadOnly({
192
- cmi: cmi(),
193
- fieldName: 'cmi.student_data._children',
194
- expectedValue: aicc_constants.student_data_children,
195
- expectedError: invalid_set,
196
- });
197
- h.checkReadAndWrite({
198
- cmi: cmi(),
199
- fieldName: 'cmi.student_data.mastery_score',
200
- });
201
- h.checkReadAndWrite({
202
- cmi: cmi(),
203
- fieldName: 'cmi.student_data.max_time_allowed',
204
- });
205
- h.checkReadAndWrite({
206
- cmi: cmi(),
207
- fieldName: 'cmi.student_data.time_limit_action',
208
- });
209
- h.checkReadAndWrite({
210
- cmi: cmi(),
211
- fieldName: 'cmi.student_data.tries_during_lesson',
212
- });
213
-
214
- /**
215
- * cmi.student_preference Properties
216
- */
217
- h.checkReadOnly({
218
- cmi: cmi(),
219
- fieldName: 'cmi.student_preference._children',
220
- expectedValue: aicc_constants.student_preference_children,
221
- expectedError: invalid_set,
222
- });
223
- h.checkValidValues({
224
- cmi: cmi(),
225
- fieldName: 'cmi.student_preference.audio',
226
- validValues: scorm12_values.valid0To100Range.concat([
227
- '-1',
228
- ]),
229
- invalidValues: scorm12_values.invalid0To100Range,
230
- });
231
- h.checkFieldConstraintSize({
232
- cmi: cmi(),
233
- fieldName: 'cmi.student_preference.language',
234
- limit: 255,
235
- expectedError: type_mismatch,
236
- });
237
- h.checkValidValues({
238
- cmi: cmi(),
239
- fieldName: 'cmi.student_preference.speed',
240
- validValues: scorm12_values.validSpeedRange,
241
- invalidValues: scorm12_values.invalidSpeedRange,
242
- });
243
- h.checkValidValues({
244
- cmi: cmi(),
245
- fieldName: 'cmi.student_preference.text',
246
- validValues: scorm12_values.validIntegerScaledRange,
247
- invalidValues: scorm12_values.invalidIntegerScaledRange,
248
- });
249
-
250
- /**
251
- * cmi.interactions Properties
252
- */
253
- h.checkReadOnly({
254
- cmi: cmi(),
255
- fieldName: 'cmi.interactions._children',
256
- expectedValue: aicc_constants.interactions_children,
257
- expectedError: invalid_set,
258
- });
259
- h.checkReadOnly({
260
- cmi: cmi(),
261
- fieldName: 'cmi.interactions._count', expectedValue: 0,
262
- expectedError: invalid_set,
263
- });
264
- });
265
-
266
- describe('Post-Initialize Tests', () => {
267
- const cmi = () => {
268
- const obj = new CMI();
269
- obj.initialize();
270
- return obj;
271
- };
272
-
273
- /**
274
- * Base CMI Properties
275
- */
276
- h.checkReadOnly({
277
- cmi: cmi(),
278
- fieldName: 'cmi._version',
279
- expectedValue: '3.4',
280
- expectedError: invalid_set,
281
- });
282
- h.checkReadOnly({
283
- cmi: cmi(),
284
- fieldName: 'cmi._children',
285
- expectedValue: aicc_constants.cmi_children,
286
- expectedError: invalid_set,
287
- });
288
- h.checkFieldConstraintSize({
289
- cmi: cmi(),
290
- fieldName: 'cmi.suspend_data', limit: 4096,
291
- expectedError: type_mismatch,
292
- });
293
- h.checkReadOnly({
294
- cmi: cmi(),
295
- fieldName: 'cmi.launch_data',
296
- expectedError: read_only,
297
- });
298
- h.checkFieldConstraintSize({
299
- cmi: cmi(),
300
- fieldName: 'cmi.comments', limit: 4096,
301
- expectedError: type_mismatch,
302
- });
303
- h.checkReadOnly({
304
- cmi: cmi(),
305
- fieldName: 'cmi.comments_from_lms',
306
- expectedError: read_only,
307
- });
308
-
309
- /**
310
- * cmi.core Properties
311
- */
312
- h.checkReadOnly({
313
- cmi: cmi(),
314
- fieldName: 'cmi.core._children',
315
- expectedValue: aicc_constants.core_children,
316
- expectedError: invalid_set,
317
- });
318
- h.checkReadOnly({
319
- cmi: cmi(),
320
- fieldName: 'cmi.core.student_id',
321
- expectedError: read_only,
322
- });
323
- h.checkReadOnly({
324
- cmi: cmi(),
325
- fieldName: 'cmi.core.student_name',
326
- expectedError: read_only,
327
- });
328
- h.checkFieldConstraintSize({
329
- cmi: cmi(),
330
- fieldName: 'cmi.core.lesson_location',
331
- limit: 255,
332
- expectedError: type_mismatch,
333
- });
334
- h.checkReadOnly({
335
- cmi: cmi(),
336
- fieldName: 'cmi.core.credit',
337
- expectedError: read_only,
338
- });
339
- h.checkRead({
340
- cmi: cmi(),
341
- fieldName: 'cmi.core.lesson_status',
342
- expectedValue: 'not attempted',
343
- });
344
- h.checkValidValues({
345
- cmi: cmi(),
346
- fieldName: 'cmi.core.lesson_status',
347
- validValues: scorm12_values.validLessonStatus,
348
- invalidValues: scorm12_values.invalidLessonStatus,
349
- });
350
- h.checkReadOnly({
351
- cmi: cmi(),
352
- fieldName: 'cmi.core.entry',
353
- expectedError: read_only,
354
- });
355
- h.checkReadOnly({
356
- cmi: cmi(),
357
- fieldName: 'cmi.core.total_time',
358
- expectedError: read_only,
359
- });
360
- h.checkReadOnly({
361
- cmi: cmi(),
362
- fieldName: 'cmi.core.lesson_mode',
363
- expectedValue: 'normal',
364
- expectedError: read_only,
365
- });
366
- h.checkWrite({
367
- cmi: cmi(),
368
- fieldName: 'cmi.core.exit',
369
- valueToTest: 'suspend',
370
- });
371
- h.checkValidValues({
372
- cmi: cmi(),
373
- fieldName: 'cmi.core.exit',
374
- validValues: scorm12_values.validExit,
375
- invalidValues: scorm12_values.invalidExit,
376
- });
377
- h.checkWriteOnly({
378
- cmi: cmi(),
379
- fieldName: 'cmi.core.session_time',
380
- valueToTest: '00:00:00',
381
- expectedError: write_only,
382
- });
383
- h.checkValidValues({
384
- cmi: cmi(),
385
- fieldName: 'cmi.core.session_time',
386
- validValues: scorm12_values.validTimespan,
387
- invalidValues: scorm12_values.invalidTimespan,
388
- });
389
-
390
- /**
391
- * cmi.core.score Properties
392
- */
393
- h.checkReadOnly({
394
- cmi: cmi(),
395
- fieldName: 'cmi.core.score._children',
396
- expectedValue: aicc_constants.score_children,
397
- expectedError: invalid_set,
398
- });
399
- h.checkValidValues({
400
- cmi: cmi(),
401
- fieldName: 'cmi.core.score.raw',
402
- validValues: scorm12_values.validScoreRange,
403
- invalidValues: scorm12_values.invalidScoreRange,
404
- });
405
- h.checkValidValues({
406
- cmi: cmi(),
407
- fieldName: 'cmi.core.score.min',
408
- validValues: scorm12_values.validScoreRange,
409
- invalidValues: scorm12_values.invalidScoreRange,
410
- });
411
- h.checkValidValues({
412
- cmi: cmi(),
413
- fieldName: 'cmi.core.score.max',
414
- validValues: scorm12_values.validScoreRange,
415
- invalidValues: scorm12_values.invalidScoreRange,
416
- });
417
-
418
- /**
419
- * cmi.objectives Properties
420
- */
421
- h.checkReadOnly({
422
- cmi: cmi(),
423
- fieldName: 'cmi.objectives._children',
424
- expectedValue: aicc_constants.objectives_children,
425
- expectedError: invalid_set,
426
- });
427
- h.checkReadOnly({
428
- cmi: cmi(),
429
- fieldName: 'cmi.objectives._count', expectedValue: 0,
430
- expectedError: invalid_set,
431
- });
432
-
433
- /**
434
- * cmi.student_data Properties
435
- */
436
- h.checkReadOnly({
437
- cmi: cmi(),
438
- fieldName: 'cmi.student_data._children',
439
- expectedValue: aicc_constants.student_data_children,
440
- expectedError: invalid_set,
441
- });
442
- h.checkReadOnly({
443
- cmi: cmi(),
444
- fieldName: 'cmi.student_data.mastery_score',
445
- expectedError: read_only,
446
- });
447
- h.checkReadOnly({
448
- cmi: cmi(),
449
- fieldName: 'cmi.student_data.max_time_allowed',
450
- expectedError: read_only,
451
- });
452
- h.checkReadOnly({
453
- cmi: cmi(),
454
- fieldName: 'cmi.student_data.time_limit_action',
455
- expectedError: read_only,
456
- });
457
- h.checkReadOnly({
458
- cmi: cmi(),
459
- fieldName: 'cmi.student_data.tries_during_lesson',
460
- expectedError: read_only,
461
- });
462
-
463
- /**
464
- * cmi.student_preference Properties
465
- */
466
- h.checkReadOnly({
467
- cmi: cmi(),
468
- fieldName: 'cmi.student_preference._children',
469
- expectedValue: aicc_constants.student_preference_children,
470
- expectedError: invalid_set,
471
- });
472
- h.checkValidValues({
473
- cmi: cmi(),
474
- fieldName: 'cmi.student_preference.audio',
475
- validValues: scorm12_values.valid0To100Range.concat([
476
- '-1',
477
- ]),
478
- invalidValues: scorm12_values.invalid0To100Range,
479
- });
480
- h.checkFieldConstraintSize({
481
- cmi: cmi(),
482
- fieldName: 'cmi.student_preference.language',
483
- limit: 255,
484
- expectedError: type_mismatch,
485
- });
486
- h.checkValidValues({
487
- cmi: cmi(),
488
- fieldName: 'cmi.student_preference.speed',
489
- validValues: scorm12_values.validSpeedRange,
490
- invalidValues: scorm12_values.invalidSpeedRange,
491
- });
492
- h.checkValidValues({
493
- cmi: cmi(),
494
- fieldName: 'cmi.student_preference.text',
495
- validValues: scorm12_values.validIntegerScaledRange,
496
- invalidValues: scorm12_values.invalidIntegerScaledRange,
497
- });
498
-
499
- /**
500
- * cmi.interactions Properties
501
- */
502
- h.checkReadOnly({
503
- cmi: cmi(),
504
- fieldName: 'cmi.interactions._children',
505
- expectedValue: aicc_constants.interactions_children,
506
- expectedError: invalid_set,
507
- });
508
- h.checkReadOnly({
509
- cmi: cmi(),
510
- fieldName: 'cmi.interactions._count', expectedValue: 0,
511
- expectedError: invalid_set,
512
- });
513
-
514
- it('should export JSON', () => {
515
- const cmiObj = cmi();
516
- cmiObj.objectives.childArray.push(new CMIObjectivesObject());
517
- cmiObj.interactions.childArray.push(new CMIInteractionsObject());
518
- cmiObj.evaluation.comments.childArray.push(
519
- new CMIEvaluationCommentsObject());
520
- cmiObj.student_data.tries.childArray.push(new CMITriesObject());
521
- expect(
522
- JSON.stringify(cmiObj),
523
- ).
524
- to.
525
- equal(
526
- '{"suspend_data":"","launch_data":"","comments":"","comments_from_lms":"","core":{"student_id":"","student_name":"","lesson_location":"","credit":"","lesson_status":"not attempted","entry":"","lesson_mode":"normal","exit":"","session_time":"00:00:00","score":{"raw":"","min":"","max":"100"}},"objectives":{"0":{"id":"","status":"","score":{"raw":"","min":"","max":"100"}}},"student_data":{"mastery_score":"","max_time_allowed":"","time_limit_action":"","tries":{"0":{"status":"","time":"","score":{"raw":"","min":"","max":"100"}}}},"student_preference":{"audio":"","language":"","lesson_type":"","speed":"","text":"","text_color":"","text_location":"","text_size":"","video":"","windows":{}},"student_demographics":{"city":"","class":"","company":"","country":"","experience":"","familiar_name":"","instructor_name":"","title":"","native_language":"","state":"","street_address":"","telephone":"","years_experience":""},"interactions":{"0":{"id":"","time":"","type":"","weighting":"","student_response":"","result":"","latency":"","objectives":{},"correct_responses":{}}},"evaluation":{"comments":{"0":{"content":"","location":"","time":""}}},"paths":{}}');
527
- });
528
- });
529
-
530
- describe('CMITriesObject Tests', () => {
531
- const triesObject = () => {
532
- return new CMITriesObject();
533
- };
534
- const triesInitialized = () => {
535
- const cmi = new CMITriesObject();
536
- cmi.initialize();
537
- return cmi;
538
- };
539
-
540
- /**
541
- * cmi.interactions.n.objectives.n object
542
- */
543
- h.checkRead({
544
- cmi: triesObject(),
545
- fieldName: 'cmi.status',
546
- });
547
- h.checkRead({
548
- cmi: triesInitialized(),
549
- fieldName: 'cmi.status',
550
- });
551
- h.checkValidValues({
552
- cmi: triesObject(),
553
- fieldName: 'cmi.status',
554
- validValues: scorm12_values.validLessonStatus.concat([
555
- 'not attempted',
556
- ]),
557
- invalidValues: scorm12_values.invalidLessonStatus,
558
- });
559
- h.checkReadAndWrite({
560
- cmi: triesObject(),
561
- fieldName: 'cmi.time',
562
- expectedError: write_only,
563
- valueToTest: '23:59:59',
564
- });
565
- h.checkValidValues({
566
- cmi: triesObject(),
567
- fieldName: 'cmi.time',
568
- validValues: scorm12_values.validTime,
569
- invalidValues: scorm12_values.invalidTime,
570
- });
571
-
572
- /**
573
- * cmi.student_data.tries.n.score Properties
574
- */
575
- h.checkReadOnly({
576
- cmi: triesObject(),
577
- fieldName: 'cmi.score._children',
578
- expectedValue: aicc_constants.score_children,
579
- expectedError: invalid_set,
580
- });
581
- h.checkValidValues({
582
- cmi: triesObject(),
583
- fieldName: 'cmi.score.raw',
584
- validValues: scorm12_values.validScoreRange,
585
- invalidValues: scorm12_values.invalidScoreRange,
586
- });
587
- h.checkValidValues({
588
- cmi: triesObject(),
589
- fieldName: 'cmi.score.min',
590
- validValues: scorm12_values.validScoreRange,
591
- invalidValues: scorm12_values.invalidScoreRange,
592
- });
593
- h.checkValidValues({
594
- cmi: triesObject(),
595
- fieldName: 'cmi.score.max',
596
- validValues: scorm12_values.validScoreRange,
597
- invalidValues: scorm12_values.invalidScoreRange,
598
- });
599
-
600
- it('should export JSON', () => {
601
- const cmi = triesObject();
602
- expect(
603
- JSON.stringify(cmi),
604
- ).
605
- to.
606
- equal(
607
- '{"status":"","time":"","score":{"raw":"","min":"","max":"100"}}');
608
- });
609
- });
610
-
611
- describe('CMIEvaluationCommentsObject Tests', () => {
612
- const evaluationComment = () => {
613
- return new CMIEvaluationCommentsObject();
614
- };
615
-
616
- /**
617
- * cmi.evaluation.comments.n object
618
- */
619
- h.checkFieldConstraintSize({
620
- cmi: evaluationComment(),
621
- fieldName: 'cmi.content',
622
- expectedError: type_mismatch,
623
- limit: 255,
624
- });
625
- h.checkFieldConstraintSize({
626
- cmi: evaluationComment(),
627
- fieldName: 'cmi.location',
628
- expectedError: type_mismatch,
629
- limit: 255,
630
- });
631
- h.checkReadAndWrite({
632
- cmi: evaluationComment(),
633
- fieldName: 'cmi.time',
634
- expectedError: write_only,
635
- valueToTest: '23:59:59',
636
- });
637
- h.checkValidValues({
638
- cmi: evaluationComment(),
639
- fieldName: 'cmi.time',
640
- validValues: scorm12_values.validTime,
641
- invalidValues: scorm12_values.invalidTime,
642
- });
643
-
644
- it('should export JSON', () => {
645
- const cmi = evaluationComment();
646
- expect(
647
- JSON.stringify(cmi),
648
- ).to.equal('{"content":"","location":"","time":""}');
649
- });
650
- });
651
-
652
- describe('NAV Tests', () => {
653
- const nav = () => {
654
- return new NAV();
655
- };
656
-
657
- /**
658
- * cmi.interactions.n.correct_responses.n object
659
- */
660
- h.checkValidValues({
661
- cmi: nav(),
662
- fieldName: 'cmi.event',
663
- validValues: [
664
- 'previous',
665
- 'continue',
666
- ],
667
- invalidValues: [
668
- 'P',
669
- 'f',
670
- 'complete',
671
- 'started',
672
- 'in progress',
673
- ],
674
- });
675
-
676
- it('should export JSON', () => {
677
- const cmi = nav();
678
- expect(
679
- JSON.stringify(cmi),
680
- ).to.equal('{"event":""}');
681
- });
682
- });
683
- });
684
- });