Menu
Public repository / 8b66e18ce8cb51ca3e4124f89fd1429a1d4792f3
AkurAI-Mail / src/framework/signal-badge.test.js
Latest change ecdd82c68dc11022c41dbf1ff22cac68e002a3e1 - OLI-247: wave 2 — signal-badge view model and signals-based sync state on framework runtime by Ólafur Búi Ólafsson
// @ts-nocheck
import { describe, expect, test } from "bun:test";
import { signalIconName, signalLabel, signalColorClass, unansweredAgeLabel } from "./signal-badge.js";
describe("signal badge view model", () => {
test("icon per signal type", () => {
expect(signalIconName("replyNeeded")).toBe("message-circle");
expect(signalIconName("followUpDue")).toBe("clock");
expect(signalIconName("priority")).toBe("flag");
expect(signalIconName("other")).toBe("bell");
});
test("labels", () => {
expect(signalLabel("replyNeeded")).toBe("Reply needed");
expect(signalLabel("followUpDue")).toBe("Follow-up");
expect(signalLabel("priority", { value: "high" })).toBe("High priority");
expect(signalLabel("priority", { value: "low" })).toBe("Priority");
expect(signalLabel("custom")).toBe("custom");
});
test("color classes", () => {
expect(signalColorClass("replyNeeded", "x")).toBe("signal-amber");
expect(signalColorClass("followUpDue", "x")).toBe("signal-blue");
expect(signalColorClass("priority", "high")).toBe("signal-red");
expect(signalColorClass("priority", "low")).toBe("signal-muted");
expect(signalColorClass("replyNeeded")).toBe("signal-muted");
});
test("unanswered age prefers days, falls back to hours", () => {
expect(unansweredAgeLabel({ days: 2, hours: 5 })).toBe("2d");
expect(unansweredAgeLabel({ days: 0, hours: 5 })).toBe("5h");
expect(unansweredAgeLabel(undefined)).toBe("");
});
});