collections.test.mjs
Language JavaScript2.6 KB68 lines
// Unit tests for lib/collections.ts. Run after `npm run build` (npm test does both).import { test } from "node:test";import assert from "node:assert/strict";import { normalizeCollection, toNumber } from "../dist/lib/collections.js";test("normalizeCollection: an empty collection arrives as [] and stays []", () => {assert.deepEqual(normalizeCollection([]), []);});test("normalizeCollection: a populated collection arrives keyed \"1\"..\"N\" and becomes an array", () => {const lines = { "1": { sku: "a" }, "2": { sku: "b" }, "3": { sku: "c" } };assert.deepEqual(normalizeCollection(lines), [{ sku: "a" }, { sku: "b" }, { sku: "c" }]);});test("normalizeCollection: ordinal keys come out in numeric order, so \"10\" follows \"9\"", () => {const keyed = {};for (let i = 10; i >= 1; i--) keyed[String(i)] = i;assert.deepEqual(normalizeCollection(keyed), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);});test("normalizeCollection: split_lines in either shape within one response normalize alike", () => {const asArray = [{ qty: 2 }, { qty: 5 }];const asObject = { "1": { qty: 2 }, "2": { qty: 5 } };assert.deepEqual(normalizeCollection(asObject), normalizeCollection(asArray));});test("normalizeCollection: an array passes through unchanged", () => {const arr = [3, 1, 2];assert.equal(normalizeCollection(arr), arr);});test("normalizeCollection: null, undefined and primitives give an empty array", () => {for (const value of [null, undefined, "", "text", 0, 7, true]) {assert.deepEqual(normalizeCollection(value), [], `input ${JSON.stringify(value)}`);}});test("toNumber: numbers pass through", () => {assert.equal(toNumber(42), 42);assert.equal(toNumber(0), 0);assert.equal(toNumber(-3.5), -3.5);});test("toNumber: numeric strings are coerced, surrounding whitespace allowed", () => {assert.equal(toNumber("42"), 42);assert.equal(toNumber("0"), 0);assert.equal(toNumber("19.95"), 19.95);assert.equal(toNumber(" 7 "), 7);});test("toNumber: empty, blank and unparseable strings give undefined, not NaN", () => {assert.equal(toNumber(""), undefined);assert.equal(toNumber(" "), undefined);assert.equal(toNumber("abc"), undefined);assert.equal(toNumber("12abc"), undefined);});test("toNumber: non-finite numbers give undefined", () => {assert.equal(toNumber(Number.NaN), undefined);assert.equal(toNumber(Number.POSITIVE_INFINITY), undefined);assert.equal(toNumber("Infinity"), undefined);});test("toNumber: other types give undefined", () => {for (const value of [null, undefined, true, {}, [], [5]]) {assert.equal(toNumber(value), undefined, `input ${JSON.stringify(value)}`);}});