87 lines
2.2 KiB
TypeScript
87 lines
2.2 KiB
TypeScript
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",
|
|
]);
|
|
});
|
|
});
|