366 lines
8.2 KiB
JavaScript
366 lines
8.2 KiB
JavaScript
import {describe} from 'mocha';
|
|
import {scorm2004_error_codes} from '../../src/constants/error_codes';
|
|
import {scorm2004_constants} from '../../src/constants/api_constants';
|
|
import {CMI} from '../../src/cmi/scorm2004_cmi';
|
|
import * as h from '../helpers';
|
|
|
|
const read_only = scorm2004_error_codes.READ_ONLY_ELEMENT;
|
|
const write_only = scorm2004_error_codes.WRITE_ONLY_ELEMENT;
|
|
const invalid_set = scorm2004_error_codes.INVALID_SET_VALUE;
|
|
const type_mismatch = scorm2004_error_codes.TYPE_MISMATCH;
|
|
|
|
describe('SCORM 2004 CMI Tests', () => {
|
|
describe('CMI Spec Tests', () => {
|
|
describe('Pre-Initialize Tests', () => {
|
|
const cmi = () => {
|
|
return new CMI();
|
|
};
|
|
|
|
/**
|
|
* Base CMI Properties
|
|
*/
|
|
h.checkReadOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi._version',
|
|
expectedValue: '1.0',
|
|
expectedError: read_only,
|
|
});
|
|
h.checkReadOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi._children',
|
|
expectedValue: scorm2004_constants.cmi_children,
|
|
expectedError: read_only,
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.completion_status',
|
|
expectedError: type_mismatch,
|
|
validValues: [
|
|
'completed',
|
|
'incomplete',
|
|
'not attempted',
|
|
'unknown',
|
|
],
|
|
invalidValues: [
|
|
'complete',
|
|
'passed',
|
|
'failed',
|
|
],
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.completion_threshold',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.credit',
|
|
expectedValue: 'credit',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.entry',
|
|
});
|
|
h.checkWriteOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.exit',
|
|
expectedError: write_only,
|
|
valueToTest: 'time-out',
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.exit',
|
|
validValues: [
|
|
'time-out',
|
|
'suspend',
|
|
'logout',
|
|
'normal',
|
|
],
|
|
invalidValues: [
|
|
'close',
|
|
'exit',
|
|
'crash',
|
|
],
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.launch_data',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_id',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_name',
|
|
});
|
|
h.checkFieldConstraintSize({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.location',
|
|
limit: 1000,
|
|
expectedError: type_mismatch,
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.max_time_allowed',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.mode',
|
|
expectedValue: 'normal',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.max_time_allowed',
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.progress_measure',
|
|
validValues: [
|
|
'0.0',
|
|
'0.25',
|
|
'0.5',
|
|
'1.0',
|
|
],
|
|
invalidValues: [
|
|
'-1',
|
|
'-0.1',
|
|
'1.1',
|
|
'.25',
|
|
],
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.scaled_passing_score',
|
|
});
|
|
h.checkWriteOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.session_time',
|
|
valueToTest: 'P0S',
|
|
expectedError: write_only,
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.session_time',
|
|
validValues: [
|
|
'P1Y34DT23H45M15S',
|
|
'PT1M45S',
|
|
'P0S',
|
|
'PT75M',
|
|
],
|
|
invalidValues: [
|
|
'00:08:45',
|
|
'-P1H',
|
|
'1y45D',
|
|
'0',
|
|
],
|
|
});
|
|
h.checkRead({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.success_status',
|
|
expectedValue: 'unknown',
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.success_status',
|
|
validValues: [
|
|
'passed',
|
|
'failed',
|
|
'unknown',
|
|
],
|
|
invalidValues: [
|
|
'complete',
|
|
'incomplete',
|
|
'P',
|
|
'f',
|
|
],
|
|
});
|
|
h.checkFieldConstraintSize({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.suspend_data',
|
|
limit: 64000,
|
|
expectedError: type_mismatch,
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.time_limit_action',
|
|
expectedValue: 'continue,no message',
|
|
});
|
|
h.checkReadAndWrite({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.total_time',
|
|
expectedValue: '0',
|
|
});
|
|
|
|
/**
|
|
* cmi.interactions Properties
|
|
*/
|
|
h.checkReadOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.interactions._children',
|
|
expectedValue: scorm2004_constants.interactions_children,
|
|
expectedError: read_only,
|
|
});
|
|
h.checkReadOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.interactions._count',
|
|
expectedValue: 0,
|
|
expectedError: read_only,
|
|
});
|
|
|
|
/**
|
|
* cmi.learner_preference Properties
|
|
*/
|
|
h.checkInvalidSet({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_preference._children',
|
|
expectedValue: scorm2004_constants.student_preference_children,
|
|
expectedError: read_only,
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_preference.audio_level',
|
|
validValues: [
|
|
'1',
|
|
'50',
|
|
'100',
|
|
],
|
|
invalidValues: [
|
|
'invalid',
|
|
'a100',
|
|
'-1',
|
|
],
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_preference.language',
|
|
validValues: [
|
|
'en',
|
|
'fr',
|
|
'ru',
|
|
'es',
|
|
],
|
|
invalidValues: [
|
|
'invalid',
|
|
'a100',
|
|
],
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_preference.delivery_speed',
|
|
validValues: [
|
|
'1',
|
|
'50',
|
|
'100',
|
|
],
|
|
invalidValues: [
|
|
'invalid',
|
|
'a100',
|
|
],
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.learner_preference.audio_captioning',
|
|
validValues: [
|
|
'1',
|
|
'-1',
|
|
],
|
|
invalidValues: [
|
|
'invalid',
|
|
'a100',
|
|
'2',
|
|
'-2',
|
|
],
|
|
});
|
|
|
|
/**
|
|
* cmi.objectives Properties
|
|
*/
|
|
h.checkReadOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.objectives._children',
|
|
expectedValue: scorm2004_constants.objectives_children,
|
|
expectedError: read_only,
|
|
});
|
|
h.checkReadOnly({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.objectives._count',
|
|
expectedValue: 0,
|
|
expectedError: read_only,
|
|
});
|
|
|
|
/**
|
|
* cmi.score Properties
|
|
*/
|
|
h.checkInvalidSet({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.score._children',
|
|
expectedValue: scorm2004_constants.score_children,
|
|
expectedError: invalid_set,
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.score.scaled',
|
|
validValues: [
|
|
'1',
|
|
'0.5',
|
|
'0',
|
|
'-0.5',
|
|
'-1',
|
|
],
|
|
invalidValues: [
|
|
'-101',
|
|
'25.1',
|
|
'50.5',
|
|
'75',
|
|
'100',
|
|
],
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.score.raw',
|
|
validValues: [
|
|
'0',
|
|
'25.1',
|
|
'50.5',
|
|
'75',
|
|
'100',
|
|
],
|
|
invalidValues: [
|
|
'a100',
|
|
'invalid',
|
|
],
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.score.min',
|
|
validValues: [
|
|
'0',
|
|
'25.1',
|
|
'50.5',
|
|
'75',
|
|
'100',
|
|
],
|
|
invalidValues: [
|
|
'a100',
|
|
'invalid',
|
|
],
|
|
});
|
|
h.checkValidValues({
|
|
cmi: cmi(),
|
|
fieldName: 'cmi.score.max',
|
|
validValues: [
|
|
'0',
|
|
'25.1',
|
|
'50.5',
|
|
'75',
|
|
'100',
|
|
],
|
|
invalidValues: [
|
|
'a100',
|
|
'invalid',
|
|
],
|
|
});
|
|
});
|
|
});
|
|
});
|