Files
aiturk-hermes-ide/web/src/lib/resolve-page-title.test.ts
T

57 lines
1.8 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { resolvePageTitle } from "./resolve-page-title";
import type { Translations } from "@/i18n/types";
// Minimal translations stub — only the fields resolvePageTitle touches.
const t = {
app: {
webUi: "Web UI",
nav: {
analytics: "Analytics",
chat: "Chat",
config: "Config",
cron: "Cron",
documentation: "Documentation",
keys: "Keys",
logs: "Logs",
models: "Models",
profiles: "Profiles",
plugins: "Plugins",
sessions: "Sessions",
skills: "Skills",
},
},
} as unknown as Translations;
describe("resolvePageTitle", () => {
it("uses i18n nav keys for translated routes", () => {
expect(resolvePageTitle("/sessions", t, [])).toBe("Sessions");
expect(resolvePageTitle("/env", t, [])).toBe("Keys");
});
it("renders initialisms and literal labels correctly", () => {
// Regression: the naive capitalize fallback produced "Mcp".
expect(resolvePageTitle("/mcp", t, [])).toBe("MCP");
expect(resolvePageTitle("/system", t, [])).toBe("System");
expect(resolvePageTitle("/channels", t, [])).toBe("Channels");
expect(resolvePageTitle("/webhooks", t, [])).toBe("Webhooks");
expect(resolvePageTitle("/pairing", t, [])).toBe("Pairing");
expect(resolvePageTitle("/files", t, [])).toBe("Files");
});
it("prefers plugin tab labels", () => {
expect(
resolvePageTitle("/kanban", t, [{ path: "/kanban", label: "Kanban" }]),
).toBe("Kanban");
});
it("falls back to capitalized path segment for unknown routes", () => {
expect(resolvePageTitle("/whatever", t, [])).toBe("Whatever");
});
it("treats root as sessions and trailing slashes as equivalent", () => {
expect(resolvePageTitle("/", t, [])).toBe("Sessions");
expect(resolvePageTitle("/mcp/", t, [])).toBe("MCP");
});
});