mega-plant/lib/supplier.test.ts
David cfd54385b3 Add Suppliers list; book purchase orders and petty-cash slips against it
- /expenses/suppliers: terms (cash / 30 / 60 days), PO + petty cash totals per supplier,
  period filters, add/edit/delete, due dates
- POs and slips resolve to a supplier by code then folded name; new PO suppliers start
  with terms unset, new slip suppliers as cash
- Full-user guard on cash-float and job-card write routes

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 15:43:57 +02:00

21 lines
1 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { dueDate, supplierKey } from "./supplier";
test("the same supplier typed two ways folds to one key", () => {
assert.equal(supplierKey("Lube Force Traders cc"), supplierKey("LUBE FORCE TRADERS"));
assert.equal(supplierKey("PERCA SERVICES (PTY) LTD"), supplierKey("Perca Services"));
assert.equal(supplierKey("Hydra - Lab CC"), supplierKey("hydra lab"));
});
test("different suppliers stay different", () => {
assert.notEqual(supplierKey("Your Tyre Shop"), supplierKey("Tyre Shop"));
assert.notEqual(supplierKey("Jose Electrical"), supplierKey("Jose Plumbing"));
});
test("account purchases fall due PO date + terms; cash and unknown never do", () => {
assert.equal(dueDate("2026-10-07", "30"), "2026-11-06");
assert.equal(dueDate("2026-10-07", "60"), "2026-12-06");
assert.equal(dueDate("2026-12-20", "30"), "2027-01-19");
assert.equal(dueDate("2026-10-07", "cash"), "");
assert.equal(dueDate("2026-10-07", ""), "");
assert.equal(dueDate("nonsense", "30"), "");
});