@onereach/time-interpreter
Version:
Convert dates, durations and time to canonical format (dates -> ISO 8601, durations -> milliseconds).
96 lines (80 loc) • 3.27 kB
JavaScript
const jsonfile = require("jsonfile/index.js");
const _ = require("lodash");
const assert = require("assert").strict;
const Interpreter = require("../index.js");
const converter = new Interpreter();
// TODO: generate expected results files depending on summer/winter time
const objects = jsonfile.readFileSync("test/parse/objects.json");
const times = jsonfile.readFileSync("test/parse/times.json");
const testParseMethod = (assert, describe, input, expected) => {
describe("test-1 #parse(date)", function () {
input.forEach((date, i) => {
if (typeof date === "number") key = "input-" + date;
else if (typeof date === "object") key = JSON.stringify(date);
else key = date;
const expectedResult = expected[key].datetime;
const actualResult = converter.parse(date, "", "", "2021");
if (actualResult) delete actualResult.isoWithFractSec;
it(key, function () {
assert.deepEqual(actualResult, expectedResult);
});
});
});
describe("test-2 #parse(date, 'America/Denver')", function () {
input.forEach((date, i) => {
if (typeof date === "number") key = "input-" + date;
else if (typeof date === "object") key = JSON.stringify(date);
else key = date;
const expectedResult = expected[key].inZone;
const actualResult = converter.parse(date, "America/Denver", "", "2021");
if (actualResult) delete actualResult.isoWithFractSec;
it(key, function () {
assert.deepEqual(
actualResult,
expectedResult
);
});
});
});
describe("test-3 #parse(date, 'America/Denver', '-01:00')", function () {
input.forEach((date, i) => {
if (typeof date === "number") key = "input-" + date;
else if (typeof date === "object") key = JSON.stringify(date);
else key = date;
const expectedResult = expected[key].outOffset;
const actualResult = converter.parse(date, "America/Denver", "-01:00", "2021");
if (actualResult) delete actualResult.isoWithFractSec;
it(key, function () {
assert.deepEqual(
actualResult,
expectedResult
);
});
});
});
describe("test-4 #parse(date, '+01:00', 'GMT+0', '2021', '2008-12-15')", function () {
input.forEach((date, i) => {
if (typeof date === "number") key = "input-" + date;
else if (typeof date === "object") key = JSON.stringify(date);
else key = date;
const expectedResult = expected[key].date;
const actualResult = converter.parse(date, "+01:00", "GMT+0", "2021", "2008-12-15");
if (actualResult) delete actualResult.isoWithFractSec;
it(key, function () {
assert.deepEqual(
actualResult,
expectedResult
);
});
});
});
};
// TIMES
describe("input string is time value", function () {
testParseMethod(assert, describe, Object.keys(times), times);
});
// TYPE OF OBJECT
describe("input date/datetime object", function () {
const obj = Object.keys(objects).map((k) => JSON.parse(k.replace(/\//g, "")));
testParseMethod(assert, describe, obj, objects);
});