UNPKG

scorm-again

Version:

A modern SCORM JavaScript run-time library for AICC, SCORM 1.2, and SCORM 2004

320 lines (281 loc) 8.73 kB
import { expect } from "expect"; import { describe, it } from "mocha"; import * as Utilities from "../src/utilities"; import { scorm12_regex, scorm2004_regex } from "../src/constants/regex"; describe("Utility Tests", () => { describe("getSecondsAsHHMMSS()", () => { it("10 returns 00:00:10", () => { expect(Utilities.getSecondsAsHHMMSS(10)).toEqual("00:00:10"); }); it("60 returns 00:01:00", () => { expect(Utilities.getSecondsAsHHMMSS(60)).toEqual("00:01:00"); }); it("3600 returns 01:00:00", () => { expect(Utilities.getSecondsAsHHMMSS(3600)).toEqual("01:00:00"); }); it("70 returns 00:01:10", () => { expect(Utilities.getSecondsAsHHMMSS(70)).toEqual("00:01:10"); }); it("3670 returns 01:01:10", () => { expect(Utilities.getSecondsAsHHMMSS(3670)).toEqual("01:01:10"); }); it("90000 returns 25:00:00, check for hours greater than 24", () => { expect(Utilities.getSecondsAsHHMMSS(90000)).toEqual("25:00:00"); }); it("-3600 returns 00:00:00, negative time not allowed in SCORM session times", () => { expect(Utilities.getSecondsAsHHMMSS(-3600)).toEqual("00:00:00"); }); it("Empty seconds returns 00:00:00", () => { expect(Utilities.getSecondsAsHHMMSS(null)).toEqual("00:00:00"); }); }); describe("getSecondsAsISODuration()", () => { it("10 returns PT10S", () => { expect(Utilities.getSecondsAsISODuration(10)).toEqual("PT10S"); }); it("60 returns PT1M", () => { expect(Utilities.getSecondsAsISODuration(60)).toEqual("PT1M"); }); it("3600 returns PT1H", () => { expect(Utilities.getSecondsAsISODuration(3600)).toEqual("PT1H"); }); it("70 returns PT1M10S", () => { expect(Utilities.getSecondsAsISODuration(70)).toEqual("PT1M10S"); }); it("916.88 returns PT15M16.88S", () => { expect(Utilities.getSecondsAsISODuration(916.88)).toEqual("PT15M16.88S"); }); it("3670 returns PT1H1M10S", () => { expect(Utilities.getSecondsAsISODuration(3670)).toEqual("PT1H1M10S"); }); it("90000 returns P1DT1H", () => { expect(Utilities.getSecondsAsISODuration(90000)).toEqual("P1DT1H"); }); it("90061 returns P1DT1H1M1S", () => { expect(Utilities.getSecondsAsISODuration(90061)).toEqual("P1DT1H1M1S"); }); it("-3600 returns PT0S, negative time not allowed in SCORM session times", () => { expect(Utilities.getSecondsAsISODuration(-3600)).toEqual("PT0S"); }); it("Empty seconds returns PT0S", () => { expect(Utilities.getSecondsAsISODuration(null)).toEqual("PT0S"); }); }); describe("getTimeAsSeconds()", () => { it("00:00:10 returns 10", () => { expect( Utilities.getTimeAsSeconds("00:00:10", scorm12_regex.CMITimespan), ).toEqual(10); }); it("00:01:10 returns 70", () => { expect( Utilities.getTimeAsSeconds("00:01:10", scorm12_regex.CMITimespan), ).toEqual(70); }); it("01:01:10 returns 3670", () => { expect( Utilities.getTimeAsSeconds("01:01:10", scorm12_regex.CMITimespan), ).toEqual(3670); }); it("100:00:00 returns 3670", () => { expect( Utilities.getTimeAsSeconds("100:00:00", scorm12_regex.CMITimespan), ).toEqual(360000); }); it("-01:00:00 returns 0", () => { expect( Utilities.getTimeAsSeconds("-01:00:00", scorm12_regex.CMITimespan), ).toEqual(0); }); it("Number value returns 0", () => { expect( Utilities.getTimeAsSeconds(999, scorm12_regex.CMITimespan), ).toEqual(0); }); it("boolean value returns 0", () => { expect( Utilities.getTimeAsSeconds(true, scorm12_regex.CMITimespan), ).toEqual(0); }); it("Empty value returns 0", () => { expect( Utilities.getTimeAsSeconds(null, scorm12_regex.CMITimespan), ).toEqual(0); }); }); describe("getDurationAsSeconds()", () => { it("P0S returns 0", () => { expect( Utilities.getDurationAsSeconds("P0S", scorm2004_regex.CMITimespan), ).toEqual(0); }); it("P70S returns 70", () => { expect( Utilities.getDurationAsSeconds("P70S", scorm2004_regex.CMITimespan), ).toEqual(70); }); it("PT1M10S returns 70", () => { expect( Utilities.getDurationAsSeconds("PT1M10S", scorm2004_regex.CMITimespan), ).toEqual(70); }); it("PT15M16.88S returns 916.88", () => { expect( Utilities.getDurationAsSeconds( "PT15M16.88S", scorm2004_regex.CMITimespan, ), ).toEqual(916.88); }); it("P1D returns 86400", () => { expect( Utilities.getDurationAsSeconds("P1D", scorm2004_regex.CMITimespan), ).toEqual(24 * 60 * 60); }); it("P1Y returns number of seconds for one year from now", () => { expect( Utilities.getDurationAsSeconds("P1Y", scorm2004_regex.CMITimespan), ).toEqual(365 * 24 * 60 * 60); }); it("Invalid duration returns 0", () => { expect( Utilities.getDurationAsSeconds("T1M10S", scorm2004_regex.CMITimespan), ).toEqual(0); }); it("Empty duration returns 0", () => { expect( Utilities.getDurationAsSeconds(null, scorm2004_regex.CMITimespan), ).toEqual(0); }); }); describe("addTwoDurations()", () => { it("P1H5M30.5S plus PT15M10S equals P1H20M40.5S", () => { expect( Utilities.addTwoDurations( "PT1H5M30.5S", "PT15M30S", scorm2004_regex.CMITimespan, ), ).toEqual("PT1H21M0.5S"); }); it("P1Y364D plus P2DT1H45M52S equals P731DT1H45M52S", () => { expect( Utilities.addTwoDurations( "P1Y364D", "P2DT1H45M52S", scorm2004_regex.CMITimespan, ), ).toEqual("P731DT1H45M52S"); }); it("Invalid plus valid equals valid", () => { expect( Utilities.addTwoDurations( "NOT A VALID DURATION", "PT1H30M45S", scorm2004_regex.CMITimespan, ), ).toEqual("PT1H30M45S"); }); it("Valid plus invalid equals valid", () => { expect( Utilities.addTwoDurations( "PT1H30M45S", "NOT A VALID DURATION", scorm2004_regex.CMITimespan, ), ).toEqual("PT1H30M45S"); }); }); describe("addHHMMSSTimeStrings()", () => { it("01:05:30.5 plus 00:15:10 equals 01:20:40.5", () => { expect( Utilities.addHHMMSSTimeStrings( "01:05:30.5", "00:15:30", scorm12_regex.CMITimespan, ), ).toEqual("01:21:00.5"); }); it("17496:00:00 plus 49:35:52 equals 17545:35:52", () => { expect( Utilities.addHHMMSSTimeStrings( "17496:00:00", "49:35:52", scorm12_regex.CMITimespan, ), ).toEqual("17545:35:52"); }); it("Invalid plus valid equals valid", () => { expect( Utilities.addHHMMSSTimeStrings( "-00:15:10", "01:05:30.5", scorm12_regex.CMITimespan, ), ).toEqual("01:05:30.5"); }); it("Valid plus invalid equals valid", () => { expect( Utilities.addHHMMSSTimeStrings( "01:05:30.5", "NOT A VALID DURATION", scorm12_regex.CMITimespan, ), ).toEqual("01:05:30.5"); }); }); describe("flatten()", () => { it("Should return flattened object", () => { expect( Utilities.flatten({ cmi: { core: { learner_id: "jputney", learner_name: "Jonathan", }, objectives: { "0": { id: "AAA", }, "1": { id: "BBB", }, }, }, }), ).toEqual({ "cmi.core.learner_id": "jputney", "cmi.core.learner_name": "Jonathan", "cmi.objectives.0.id": "AAA", "cmi.objectives.1.id": "BBB", }); }); }); describe("unflatten()", () => { it("Should return flattened object", () => { expect( Utilities.unflatten({ "cmi.core.learner_id": "jputney", "cmi.core.learner_name": "Jonathan", "cmi.objectives.0.id": "AAA", "cmi.objectives.1.id": "BBB", }), ).toEqual({ cmi: { core: { learner_id: "jputney", learner_name: "Jonathan", }, objectives: { "0": { id: "AAA", }, "1": { id: "BBB", }, }, }, }); }); }); });