Files
fusion/packages/dashboard/app/__tests__/lazy-loaded-views-docs.test.ts
Fusion d42d8ee2f2 fix(FN-3161): migrate roadmap dashboard surface to bundled plugin
- Move RoadmapsView UI, hooks, and tests from dashboard app into fusion-plugin-roadmap
- Replace the built-in roadmaps route/nav wiring with plugin view registration and host rendering
- Add bundled plugin view registration bootstrap in dashboard startup
- Update roadmap plugin build/test config and add FN-3161 removal changeset

Fusion-Task-Id: FN-3161
2026-05-08 16:51:07 -07:00

83 lines
2.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { readFileSync } from "node:fs";
import { resolve } from "node:path";
const EXPECTED_DOCUMENTED_VIEWS = new Set([
"AgentsView",
"NodesView",
"ChatView",
"MemoryView",
"DevServerView",
"InsightsView",
"DocumentsView",
"SkillsView",
"ResearchView",
"EvalsView",
"TodoView",
"SetupWizardModal",
"PluginManager",
"PiExtensionsManager",
"AgentDetailView",
]);
const EXPECTED_APP_LEVEL_VIEWS = new Set([
"AgentsView",
"DocumentsView",
"InsightsView",
"ResearchView",
"EvalsView",
"NodesView",
"ChatView",
"SkillsView",
"MemoryView",
"DevServerView",
"TodoView",
]);
function extractLazyLoadedSection(agentsDoc: string): string {
const match = agentsDoc.match(/### Lazy-Loaded Heavy Views[\s\S]*?(?=\n### |\n---|$)/);
if (!match) {
throw new Error("Lazy-Loaded Heavy Views section not found in AGENTS.md");
}
return match[0];
}
function extractBacktickedNamesFromBullets(section: string): string[] {
return section
.split("\n")
.filter((line) => line.trim().startsWith("- "))
.flatMap((line) => [...line.matchAll(/`([^`]+)`/g)].map((m) => m[1]));
}
function extractAppLazyViews(appSource: string): Set<string> {
const matches = [...appSource.matchAll(/const\s+(\w+)\s*=\s*lazy\(/g)].map((m) => m[1]);
return new Set(matches.map((name) => (name === "_TodoView" ? "TodoView" : name)));
}
describe("AGENTS lazy-loaded views inventory", () => {
it("documents the App-level lazy views accurately and keeps the curated 15-view list in sync", () => {
const agentsDoc = readFileSync(resolve(__dirname, "../../../../AGENTS.md"), "utf-8");
const appSource = readFileSync(resolve(__dirname, "../App.tsx"), "utf-8");
const section = extractLazyLoadedSection(agentsDoc);
const countMatch = section.match(/These\s+(\d+)\s+views\s+are lazy-loaded/);
expect(countMatch).toBeTruthy();
expect(Number(countMatch?.[1])).toBe(15);
const documentedViews = extractBacktickedNamesFromBullets(section);
expect(new Set(documentedViews)).toEqual(EXPECTED_DOCUMENTED_VIEWS);
expect(documentedViews).toHaveLength(15);
expect(section).toContain("`ResearchView`");
expect(section).toContain("`TodoView`");
expect((section.match(/`AgentDetailView`/g) ?? []).length).toBe(1);
const appLevelViews = extractAppLazyViews(appSource);
expect(appLevelViews).toEqual(EXPECTED_APP_LEVEL_VIEWS);
for (const view of appLevelViews) {
expect(EXPECTED_DOCUMENTED_VIEWS.has(view)).toBe(true);
}
});
});