// server/lib/metrics.test.ts import { test } from "node:test"; import assert from "node:assert/strict"; import { cancelRate, noShowRate, completionRate } from "./metrics.ts"; test("cancelRate: basic ratio rounded to 1 decimal", () => { assert.equal(cancelRate(1, 4), 25); assert.equal(cancelRate(3, 7), 42.9); assert.equal(cancelRate(0, 10), 0); }); test("cancelRate: zero total → 0 (no NaN)", () => { assert.equal(cancelRate(0, 0), 0); assert.equal(cancelRate(5, 0), 0); assert.equal(cancelRate(5, -3), 0); }); test("cancelRate: all cancelled → 100", () => { assert.equal(cancelRate(8, 8), 100); }); test("noShowRate: basic ratio rounded to 1 decimal", () => { assert.equal(noShowRate(1, 10), 10); assert.equal(noShowRate(1, 3), 33.3); assert.equal(noShowRate(2, 9), 22.2); }); test("noShowRate: zero total → 0", () => { assert.equal(noShowRate(0, 0), 0); assert.equal(noShowRate(3, 0), 0); }); test("completionRate: basic ratio rounded to whole percent", () => { assert.equal(completionRate(7, 10), 70); assert.equal(completionRate(1, 3), 33); assert.equal(completionRate(2, 3), 67); }); test("completionRate: zero total → 0", () => { assert.equal(completionRate(0, 0), 0); assert.equal(completionRate(5, 0), 0); }); test("completionRate: all completed → 100", () => { assert.equal(completionRate(10, 10), 100); });