@onereach/time-interpreter
Version:
Convert dates, durations and time to canonical format (dates -> ISO 8601, durations -> milliseconds).
137 lines (125 loc) • 5.96 kB
JavaScript
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);
});
});