- Rebrand all user-facing text to AgendaMax - Fix sidebar scrolling: card container no longer overflows html (flex h-full min-h-0) - Fix calendar toolbar hover: active buttons keep readable contrast - Sticky calendar toolbar (month/week/day always visible on scroll) - Seed guarantees 2-4 appointments per day for current week (Mon-Sat)
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
// 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);
|
|
});
|