import { rmSync } from "node:fs"; import { mkdtemp } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, test } from "vitest"; import { dimensionLabDashboardFixture } from "$lib/model/fixtures/dimensionlab"; import { genericDashboardFixture } from "$lib/model/fixtures/generic"; import { createDashboardStore, type DashboardStore } from "./db/dashboard-store"; import { loadDashboardRuntime } from "./dashboard"; const stores: DashboardStore[] = []; const tempRoots: string[] = []; afterEach(() => { stores.splice(0).forEach((store) => store.close()); tempRoots.splice(0).forEach((path) => rmSync(path, { force: true, recursive: true })); }); describe("dashboard runtime loader", () => { test("seeds and loads the active dashboard from sqlite", async () => { const store = await createTestStore(); const runtime = loadDashboardRuntime(store); expect(runtime.state).toBe("ready"); if (runtime.state !== "ready") throw new Error("expected ready dashboard"); expect(runtime.document.metadata.title).toBe(dimensionLabDashboardFixture.metadata.title); expect(runtime.document.metadata.subtitle).toBe(dimensionLabDashboardFixture.metadata.subtitle); expect(runtime.schemaVersion).toBe(dimensionLabDashboardFixture.schemaVersion); expect(runtime.currentRevisionId).toBe(store.getActiveDashboard()?.currentRevisionId); expect(store.listRevisions()).toHaveLength(1); }); test("loads an existing active dashboard without reseeding", async () => { const store = await createTestStore(); const seed = store.commitDashboard(genericDashboardFixture, { actor: "test", message: "existing dashboard", }); const runtime = loadDashboardRuntime(store); expect(runtime.state).toBe("ready"); if (runtime.state !== "ready") throw new Error("expected ready dashboard"); expect(runtime.currentRevisionId).toBe(seed.id); expect(runtime.document.metadata.title).toBe(genericDashboardFixture.metadata.title); expect(store.listRevisions()).toHaveLength(1); }); }); async function createTestStore() { const root = await mkdtemp(join(tmpdir(), "dimensionlab-dashboard-runtime-")); tempRoots.push(root); const store = createDashboardStore({ databaseUrl: `file:${join(root, "dashboard.sqlite")}`, }); stores.push(store); return store; }