Menu
Public repository / 0216cf0f6008aae88a648a82e9b3a462a6688302
AkurAI-Mail / src/framework/reader.test.js
Latest change 0216cf0f6008aae88a648a82e9b3a462a6688302 - OLI-248: reader view-model on framework ESM (wave 3 slice), tests red-first by Ólafur Búi Ólafsson
import { expect, test } from "bun:test";
import { signalTypeLabel, provenanceLabel, displaySignals, moveTargets, attachmentSizeLabel } from "./reader.js";
test("labels known signal types and passes unknown through", () => {
expect(signalTypeLabel("replyNeeded")).toBe("Reply needed");
expect(signalTypeLabel("followUpDue")).toBe("Follow-up due");
expect(signalTypeLabel("priority")).toBe("Priority");
expect(signalTypeLabel("deadlineDetected")).toBe("Deadline detected");
expect(signalTypeLabel("x")).toBe("x");
});
test("labels provenance", () => {
expect(provenanceLabel("deterministic")).toBe("Computed");
expect(provenanceLabel("model")).toBe("Model");
expect(provenanceLabel("user-corrected")).toBe("Your correction");
expect(provenanceLabel("other")).toBe("other");
});
test("displaySignals keeps only visible signal types", () => {
const sig = { conversationId: "c", replyNeeded: { value: true }, priority: { value: "high" }, junk: { value: 1 } };
expect(displaySignals(sig).map(([k]) => k)).toEqual(["replyNeeded", "priority"]);
expect(displaySignals(undefined)).toEqual([]);
});
test("moveTargets excludes Trash and tolerates missing list", () => {
expect(moveTargets([{ name: "Inbox" }, { name: "Trash" }]).map((f) => f.name)).toEqual(["Inbox"]);
expect(moveTargets(undefined)).toEqual([]);
});
test("attachmentSizeLabel rounds up to KB", () => {
expect(attachmentSizeLabel(1)).toBe("1 KB");
expect(attachmentSizeLabel(2049)).toBe("3 KB");
});