UNPKG

@onereach/time-interpreter

Version:

Convert dates, durations and time to canonical format (dates -> ISO 8601, durations -> milliseconds).

137 lines (125 loc) 5.96 kB
const assert = require("assert").strict; const Interpreter = require("../index.js"); const converter = new Interpreter(); const testFormatDuration = (assert, input, expected, option) => { let key; if (typeof input === "object") key = JSON.stringify(input); else key = input; it(key, function () { assert.deepEqual(converter.formatDuration(input, option), expected); }); }; describe("#formatDuration test valid input string", function () { testFormatDuration(assert, "123", 123); testFormatDuration(assert, "5hours 30 minutes 3 h 15 m", 11700000); testFormatDuration(assert, "5h 6 m 15 s", 18375000); testFormatDuration(assert, "13h 50 minutes", 49800000); testFormatDuration(assert, "10.2019", 2678400000); testFormatDuration(assert, "PT2H35M28S", 9328000); testFormatDuration(assert, "04:30:59", 16259000); testFormatDuration(assert, "4 23:59:59", 431999000); testFormatDuration(assert, "2d", 172800000); testFormatDuration(assert, "2w 1d5h", 1314000000); testFormatDuration(assert, "P2Y2M16DT2H2M2S", 69732122000); testFormatDuration(assert, "0", 0); testFormatDuration(assert, "2h", 7200000); testFormatDuration(assert, "2 weeks 1 days 5hours", 1314000000); // 1.0.13 testFormatDuration(assert, "1h 30 m 4s", 5404000); testFormatDuration(assert, "1 y 2 M 3week 5day", 39052800000); testFormatDuration(assert, "3 years 6months 6days", 110937600000); testFormatDuration(assert, "3 year 6month 4d", 110764800000); testFormatDuration(assert, "1hour 30 minutes 5sec", 5405000); testFormatDuration(assert, "1h 30 min 5 sec", 5405000); testFormatDuration(assert, "1hours 30 minute 5 second", 5405000); testFormatDuration(assert, "1hour 30 minutes 5sec 4h 20min 15seconds", 15615000); }); // OBJECT describe("#formatDuration test valid input object", function () { testFormatDuration( assert, { seconds: 2, minutes: 2, hours: 2, days: 2, weeks: 2, months: "2", years: "2", }, 69732122000 ); }); // 1.0.19 describe("#formatDuration test valid inputs and output as object", function () { testFormatDuration(assert, "5hours 30 minutes 3 h 15 m", {asMilliseconds: null, asObject: null, humanized: null}, true); testFormatDuration(assert, "5h 6 m 15 s", {asMilliseconds: 18375000, asObject: {hours:5, minutes:6, seconds: 15}, humanized: "5 hours 6 minutes 15 seconds"}, true); testFormatDuration(assert, "13h 50 minutes", {asMilliseconds: 49800000, asObject: {hours:13, minutes: 50}, humanized: "13 hours 50 minutes"}, true); testFormatDuration(assert, "2d", {asMilliseconds: 172800000, asObject: {days: 2}, humanized: "2 days"}, true); testFormatDuration(assert, "2 weeks 1 days 5hours", {asMilliseconds: 1314000000, asObject: {weeks: 2, days: 1, hours: 5}, humanized: "2 weeks 1 days 5 hours"}, true); testFormatDuration(assert, "2w 1d5h", {asMilliseconds: 1314000000, asObject:{weeks: 2, days: 1, hours: 5}, humanized: "2 weeks 1 days 5 hours"}, true); testFormatDuration(assert, "2h", {asMilliseconds: 7200000, asObject: {hours: 2}, humanized: "2 hours"}, true); testFormatDuration(assert, "1h 30 m 4s", {asMilliseconds: 5404000, asObject: {hours: 1, minutes: 30, seconds: 4}, humanized: "1 hours 30 minutes 4 seconds"}, true); testFormatDuration(assert, "1 y 2 M 3week 5day", {asMilliseconds: 39052800000, asObject: {years: 1, months: 2, weeks: 3, days: 5}, humanized: "1 years 2 months 3 weeks 5 days"}, true); testFormatDuration(assert, "3 years 6months 6days", {asMilliseconds: 110937600000, asObject: {years: 3, months: 6, days: 6}, humanized: "3 years 6 months 6 days"}, true); testFormatDuration(assert, "3 year 6month 4d", {asMilliseconds: 110764800000, asObject: {years: 3, months: 6, days: 4}, humanized: "3 years 6 months 4 days"}, true); testFormatDuration(assert, "1hour 30 minutes 5sec", {asMilliseconds: 5405000, asObject: {hours: 1, minutes: 30, seconds: 5}, humanized: "1 hours 30 minutes 5 seconds"}, true); testFormatDuration(assert, "1h 30 min 5 sec", {asMilliseconds: 5405000, asObject: {hours: 1, minutes: 30, seconds: 5}, humanized: "1 hours 30 minutes 5 seconds"}, true); testFormatDuration(assert, "1hours 30 minute 5 second", {asMilliseconds: 5405000, asObject: {hours: 1, minutes: 30, seconds: 5}, humanized: "1 hours 30 minutes 5 seconds"}, true); testFormatDuration(assert, "1hour 30 minutes 5sec 4h 20min 15seconds", {asMilliseconds: null, asObject: null, humanized: null}, true); testFormatDuration(assert, "P2Y2M16DT2H2M2S", {asMilliseconds: 69732122000, asObject: { years: 2, months: 2, days: 16, hours: 2, minutes: 2, seconds: 2 }, humanized: "2 years 2 months 16 days 2 hours 2 minutes 2 seconds"}, true); testFormatDuration(assert, "PT2H35M28S", {asMilliseconds: 9328000, asObject: { hours: 2, minutes: 35, seconds: 28 }, humanized: "2 hours 35 minutes 28 seconds"}, true); testFormatDuration( assert, { seconds: 2, minutes: 2, hours: 2, days: 2, weeks: 2, months: "2", years: "2", }, {asMilliseconds: 69732122000, asObject: { seconds: 2, minutes: 2, hours: 2, days: 2, weeks: 2, months: 2, years: 2 }, humanized: "2 seconds 2 minutes 2 hours 2 days 2 weeks 2 months 2 years"}, true ); }); // INVALID describe("#formatDuration test invalid input", function () { it("month", function () { assert.equal(isNaN(converter.formatDuration("month")), true); }); it("2h 2h", function () { assert.equal(isNaN(converter.formatDuration("2h 2h")), true); }); it("2 Weeks 1 Days 5hours", function () { assert.equal( isNaN(converter.formatDuration("2 Weeks 1 Days 5hours")), true ); }); it("2D", function () { assert.equal(isNaN(converter.formatDuration("2D")), true); }); it("qwerty", function () { assert.equal(isNaN(converter.formatDuration("qwerty")), true); }); });