refactor(web): move website into turbo app workspace
This commit is contained in:
parent
2664804e91
commit
b4e626a868
66 changed files with 318 additions and 298 deletions
|
|
@ -1,150 +0,0 @@
|
|||
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, { seedIfEmpty: true });
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
test("refreshes an existing initial seed when the bundled seed changes", async () => {
|
||||
const store = await createTestStore();
|
||||
const oldSeed = olderDimensionLabSeed();
|
||||
store.seedDashboardIfEmpty(oldSeed, {
|
||||
actor: "initial-seed",
|
||||
message: "load initial dashboard document",
|
||||
});
|
||||
|
||||
const runtime = loadDashboardRuntime(store, {
|
||||
refreshSeedDocument: true,
|
||||
seedDocument: dimensionLabDashboardFixture,
|
||||
seedIfEmpty: true,
|
||||
});
|
||||
|
||||
expect(runtime.state).toBe("ready");
|
||||
if (runtime.state !== "ready") throw new Error("expected ready dashboard");
|
||||
expect(runtime.document.statusStrips[0]?.items.map((item) => item.id)).toContain(
|
||||
"auto-refresh",
|
||||
);
|
||||
expect(runtime.document.serviceGroups.flatMap((group) => group.services).map((service) => service.id)).toContain(
|
||||
"prompt-registry",
|
||||
);
|
||||
expect(store.listRevisions()).toHaveLength(2);
|
||||
expect(store.getActiveDashboard()?.revision.actor).toBe("initial-seed");
|
||||
});
|
||||
|
||||
test("does not refresh a dashboard after a user-authored revision", async () => {
|
||||
const store = await createTestStore();
|
||||
const oldSeed = olderDimensionLabSeed();
|
||||
store.seedDashboardIfEmpty(oldSeed, {
|
||||
actor: "initial-seed",
|
||||
message: "load initial dashboard document",
|
||||
});
|
||||
store.commitDashboard(
|
||||
{
|
||||
...oldSeed,
|
||||
metadata: {
|
||||
...oldSeed.metadata,
|
||||
title: "Custom Dashboard",
|
||||
},
|
||||
},
|
||||
{
|
||||
actor: "agent",
|
||||
message: "customize dashboard",
|
||||
},
|
||||
);
|
||||
|
||||
const runtime = loadDashboardRuntime(store, {
|
||||
refreshSeedDocument: true,
|
||||
seedDocument: dimensionLabDashboardFixture,
|
||||
seedIfEmpty: true,
|
||||
});
|
||||
|
||||
expect(runtime.state).toBe("ready");
|
||||
if (runtime.state !== "ready") throw new Error("expected ready dashboard");
|
||||
expect(runtime.document.metadata.title).toBe("Custom Dashboard");
|
||||
expect(runtime.document.statusStrips[0]?.items.map((item) => item.id)).not.toContain(
|
||||
"auto-refresh",
|
||||
);
|
||||
expect(store.listRevisions()).toHaveLength(2);
|
||||
});
|
||||
|
||||
test("returns empty state when no dashboard is active and seeding is disabled", async () => {
|
||||
const store = await createTestStore();
|
||||
|
||||
const runtime = loadDashboardRuntime(store);
|
||||
|
||||
expect(runtime.state).toBe("empty");
|
||||
if (runtime.state !== "empty") throw new Error("expected empty dashboard");
|
||||
expect(runtime.title).toBe("No Dashboard Model");
|
||||
expect(store.listRevisions()).toHaveLength(0);
|
||||
});
|
||||
});
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
function olderDimensionLabSeed() {
|
||||
const document = structuredClone(dimensionLabDashboardFixture);
|
||||
document.statusStrips = document.statusStrips.map((strip) => ({
|
||||
...strip,
|
||||
items: strip.items.filter((item) => item.id !== "auto-refresh"),
|
||||
}));
|
||||
document.serviceGroups = document.serviceGroups.map((group) =>
|
||||
group.id === "ai-automation"
|
||||
? {
|
||||
...group,
|
||||
services: group.services.filter((service) => service.id !== "prompt-registry"),
|
||||
}
|
||||
: group,
|
||||
);
|
||||
return document;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue