AkurAI Build
Menu

Public repository / 275d4fa11a39ecc30e2caf604d5a0d499910e8db

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("");
  });
});