orderNumber.test.mjs
Language JavaScript2.6 KB58 lines
// Unit tests for lib/orderNumber.ts. Run after `npm run build` (npm test does both).import { test } from "node:test";import assert from "node:assert/strict";import { resolveDisplayNumber } from "../dist/lib/orderNumber.js";const IN_2026 = new Date(Date.UTC(2026, 5, 15));test("current format: MD + two-digit year + order_ref resolves to the order_ref", () => {assert.deepEqual(resolveDisplayNumber("MD2639582", IN_2026), { action: "accept", orderId: 39582 });});test("current format: case and surrounding whitespace are ignored", () => {assert.deepEqual(resolveDisplayNumber(" md2639582 ", IN_2026), { action: "accept", orderId: 39582 });});test("current format: an earlier year is accepted", () => {assert.deepEqual(resolveDisplayNumber("MD2412345", IN_2026), { action: "accept", orderId: 12345 });});test("current format: leading zeros in the order_ref are dropped", () => {assert.deepEqual(resolveDisplayNumber("MD2600123", IN_2026), { action: "accept", orderId: 123 });});test("current format: a year later than now is accepted with a warning", () => {const result = resolveDisplayNumber("MD2739582", IN_2026);assert.equal(result.action, "warn");assert.equal(result.orderId, 39582);assert.match(result.note, /later than the current year/);});test("current format: the current year is taken in UTC", () => {const lastMinuteOf2026 = new Date(Date.UTC(2026, 11, 31, 23, 59));assert.equal(resolveDisplayNumber("MD2739582", lastMinuteOf2026).action, "warn");const firstMinuteOf2027 = new Date(Date.UTC(2027, 0, 1, 0, 1));assert.equal(resolveDisplayNumber("MD2739582", firstMinuteOf2027).action, "accept");});test("legacy format M- + six digits is refused and routed to a person", () => {const result = resolveDisplayNumber("M-123456", IN_2026);assert.equal(result.action, "refuse");assert.equal(result.orderId, undefined);assert.match(result.note, /Legacy number from before Plinth/);assert.match(result.note, /Route to a human/);});test("legacy format: case is ignored", () => {assert.equal(resolveDisplayNumber("m-123456", IN_2026).action, "refuse");assert.match(resolveDisplayNumber("m-123456", IN_2026).note, /Legacy/);});test("anything else is refused as unrecognized, quoting the input as given", () => {for (const input of ["39582", "M-12345", "M-1234567", "MD26", "XX2639582", ""]) {const result = resolveDisplayNumber(input, IN_2026);assert.equal(result.action, "refuse", `input ${JSON.stringify(input)}`);assert.equal(result.orderId, undefined, `input ${JSON.stringify(input)}`);assert.equal(result.note, `Unrecognized display-number format: ${input}`);}});