- /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>
21 lines
1 KiB
TypeScript
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"), "");
|
|
});
|