From 7afcb78e0ed793973ce48e2736e79b8fbf4effa4 Mon Sep 17 00:00:00 2001 From: vince Date: Thu, 18 Jun 2026 19:16:44 +0200 Subject: [PATCH] fix: verify seed icon and fallback data --- src/lib/model/fixtures/dimensionlab.test.ts | 56 ++++++++++++++++++++- src/lib/model/fixtures/dimensionlab.ts | 4 +- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/lib/model/fixtures/dimensionlab.test.ts b/src/lib/model/fixtures/dimensionlab.test.ts index 473747e..ae13cbf 100644 --- a/src/lib/model/fixtures/dimensionlab.test.ts +++ b/src/lib/model/fixtures/dimensionlab.test.ts @@ -30,6 +30,12 @@ describe("Dimension Lab dashboard seed", () => { }); test("keeps icon, link, and datasource references in seed data", () => { + const iconIds = [ + ...dimensionLabDashboardFixture.telemetry.map((card) => card.icon), + ...allServices(dimensionLabDashboardFixture).map((service) => service.icon), + ...(dimensionLabDashboardFixture.modules || []).map((module) => module.icon), + ].filter((icon): icon is string => Boolean(icon)); + expect( dimensionLabDashboardFixture.telemetry.every( (card) => card.icon && card.datasource, @@ -50,24 +56,39 @@ describe("Dimension Lab dashboard seed", () => { for (const service of allServices(dimensionLabDashboardFixture)) { expect(service.icon, `${service.id} must declare an Iconify id`).toBeTruthy(); + expect(verifiedSeedIconIds.has(service.icon || ""), `${service.id} icon must be verified`).toBe(true); expect(service.datasource, `${service.id} must declare health source`).toBeTruthy(); if (service.link) { expect(service.link.label, `${service.id} link needs an accessible label`).toBeTruthy(); expect(service.link.external).toBe(true); } } + + for (const icon of iconIds) { + expect(verifiedSeedIconIds.has(icon), `${icon} must be verified`).toBe(true); + } }); test("labels fallback values and unresolved adapters explicitly", () => { const placeholders = collectDatasources(dimensionLabDashboardFixture).filter( (datasource) => datasource.type === "placeholder", ); - const details = [ + const fallbackText = [ ...dimensionLabDashboardFixture.telemetry.map((card) => card.detail || ""), + ...allServices(dimensionLabDashboardFixture).map((service) => service.detail || ""), + ...dimensionLabDashboardFixture.statusStrips.flatMap((strip) => + strip.items.map((item) => item.value), + ), ...(dimensionLabDashboardFixture.modules || []).map((module) => module.detail || ""), ].join("\n").toLowerCase(); - expect(details).toContain("fallback"); + expect(fallbackText).toContain("fallback"); + for (const service of allServices(dimensionLabDashboardFixture)) { + expect(service.detail?.toLowerCase(), `${service.id} detail must label fallback state`).toContain("fallback"); + } + for (const statusItem of dimensionLabDashboardFixture.statusStrips.flatMap((strip) => strip.items)) { + expect(statusItem.value.toLowerCase(), `${statusItem.id} value must label fallback state`).toContain("fallback"); + } expect(placeholders.length).toBeGreaterThan(0); for (const datasource of placeholders) { expect(datasource.reason.toLowerCase()).toMatch(/fallback|pending|unresolved/); @@ -92,3 +113,34 @@ function collectDatasources(document: DashboardDocument): DatasourceReference[] return [...telemetry, ...services, ...modules]; } + +const verifiedSeedIconIds = new Set([ + "mdi:account-hard-hat-outline", + "mdi:backup-restore", + "mdi:brain", + "mdi:cpu-64-bit", + "mdi:docker", + "mdi:expansion-card", + "mdi:fan", + "mdi:harddisk", + "mdi:image-edit-outline", + "mdi:memory", + "mdi:pulse", + "mdi:robot-outline", + "mdi:router-network", + "mdi:thermometer", + "mdi:web", + "mdi:weather-sunny", + "simple-icons:adminer", + "simple-icons:amazonwebservices", + "simple-icons:cockpit", + "simple-icons:forgejo", + "simple-icons:grafana", + "simple-icons:n8n", + "simple-icons:ollama", + "simple-icons:postgresql", + "simple-icons:prometheus", + "simple-icons:uptimekuma", + "simple-icons:vaultwarden", + "simple-icons:wikidotjs", +]); diff --git a/src/lib/model/fixtures/dimensionlab.ts b/src/lib/model/fixtures/dimensionlab.ts index 0078de1..9890fef 100644 --- a/src/lib/model/fixtures/dimensionlab.ts +++ b/src/lib/model/fixtures/dimensionlab.ts @@ -323,7 +323,7 @@ export const dimensionLabDashboardFixture: DashboardDocument = { id: "aws-start", label: "AWS Start", description: "AWS access portal", - icon: "simple-icons:amazonaws", + icon: "simple-icons:amazonwebservices", href: "https://dimensionlab.awsapps.com/start", datasource: httpStatus("https://dimensionlab.awsapps.com/start"), }), @@ -375,7 +375,7 @@ export const dimensionLabDashboardFixture: DashboardDocument = { id: "open-webui", label: "Open WebUI", description: "Chat and model interface", - icon: "simple-icons:openwebui", + icon: "mdi:web", href: "https://webui.dimensionlab.net", datasource: httpStatus("https://webui.dimensionlab.net/health"), }),