import { describe, expect, it } from "vitest"; import { configuredNavEntries, remoteMachineNavEntries, SERVICE_TYPE_NAV_ENTRIES, } from "../navEntries"; describe("navEntries", () => { it("returns no entries when no types are configured", () => { expect(configuredNavEntries(new Set())).toEqual([]); }); it("returns Jellyfin when jellyfin is configured", () => { const entries = configuredNavEntries(new Set(["jellyfin"])); expect(entries).toHaveLength(1); expect(entries[0].label).toBe("Jellyfin"); expect(entries[0].path).toBe("/services/jellyfin"); }); it("creates one top-level entry per enabled remote machine", () => { const entries = remoteMachineNavEntries([ { id: "storage", name: "Storage", service_type: "remote_machine", enabled: true, }, { id: "worker", name: "Worker", service_type: "remote_machine", enabled: true, }, { id: "disabled", name: "Disabled", service_type: "remote_machine", enabled: false, }, ]); expect(entries.map((entry) => entry.label)).toEqual(["Storage", "Worker"]); expect(entries.map((entry) => entry.path)).toEqual([ "/services/remote_machine/storage", "/services/remote_machine/worker", ]); }); it("returns all observability entries", () => { const entries = configuredNavEntries( new Set(["alertmanager", "prometheus"]), ); expect(entries.map((entry) => entry.label)).toEqual([ "Alertmanager", "Prometheus", ]); }); it("returns Backups + Authentik when configured", () => { const entries = configuredNavEntries(new Set(["backups", "authentik"])); expect(entries.map((entry) => entry.label)).toEqual([ "Backups", "Authentik", ]); }); it("keeps non-operational service types out of the static map", () => { expect( SERVICE_TYPE_NAV_ENTRIES.filter( (entry) => entry.serviceType === "nextcloud" || entry.serviceType === "remote_machine", ), ).toEqual([]); }); it("preserves declaration order across mixed navigable types", () => { const entries = configuredNavEntries( new Set(["authentik", "remote_machine", "jellyfin"]), ); expect(entries.map((entry) => entry.label)).toEqual([ "Jellyfin", "Authentik", ]); }); });