test(FN-000): slim dashboard default tests
This commit is contained in:
@@ -210,6 +210,7 @@ describe("Scoped @fusion/* packages publishing config", () => {
|
||||
|
||||
describe("Workspace bootstrap script contract", () => {
|
||||
const rootPkg = loadRootPackageJson();
|
||||
const dashboardPkg = loadPackageJson("dashboard");
|
||||
|
||||
it("makes root test changed-only while keeping explicit full-suite and CI-shard commands", () => {
|
||||
expect(rootPkg.scripts?.test).toBe("node scripts/test-changed.mjs");
|
||||
@@ -246,6 +247,13 @@ describe("Workspace bootstrap script contract", () => {
|
||||
"pnpm --filter @fusion/dashboard build && pnpm --filter @fusion/mobile cap sync",
|
||||
);
|
||||
});
|
||||
|
||||
it("keeps dashboard's default test lane curated with explicit deep coverage", () => {
|
||||
expect(dashboardPkg.scripts?.test).toContain("--project dashboard-app-quality");
|
||||
expect(dashboardPkg.scripts?.test).toContain("--project dashboard-api-quality");
|
||||
expect(dashboardPkg.scripts?.["test:deep"]).toContain("--project dashboard-app");
|
||||
expect(dashboardPkg.scripts?.["test:deep"]).toContain("--project dashboard-api");
|
||||
});
|
||||
});
|
||||
|
||||
describe("Workflow YAML validity", () => {
|
||||
|
||||
@@ -38,19 +38,22 @@ const fsPromises = requireFromHere("node:fs/promises") as FsPromisesModule;
|
||||
const childProcess = requireFromHere("node:child_process") as ChildProcessModule;
|
||||
const { mkdtempSync, mkdirSync, rmSync, realpathSync, existsSync } = fs;
|
||||
|
||||
type EmitWarningArgs = Parameters<typeof process.emitWarning>;
|
||||
type EmitWarningRestArgs = EmitWarningArgs extends [string | Error, ...infer Rest] ? Rest : never;
|
||||
|
||||
function installWarningFilter(): void {
|
||||
const warningState = globalThis as typeof globalThis & { __fusionTestWarningFilterInstalled?: boolean };
|
||||
if (warningState.__fusionTestWarningFilterInstalled) return;
|
||||
warningState.__fusionTestWarningFilterInstalled = true;
|
||||
|
||||
const originalEmitWarning = process.emitWarning.bind(process);
|
||||
process.emitWarning = ((warning: string | Error, ...args: unknown[]) => {
|
||||
process.emitWarning = ((warning: string | Error, ...args: EmitWarningRestArgs) => {
|
||||
const warningText = warning instanceof Error ? warning.message : warning;
|
||||
const warningType = typeof args[0] === "string" ? args[0] : undefined;
|
||||
if (warningType === "ExperimentalWarning" && warningText.includes("SQLite is an experimental feature")) {
|
||||
return;
|
||||
}
|
||||
return originalEmitWarning(warning as string, ...(args as Parameters<typeof process.emitWarning> extends [any, ...infer Rest] ? Rest : never));
|
||||
return originalEmitWarning(warning, ...args);
|
||||
}) as typeof process.emitWarning;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,11 +36,12 @@
|
||||
"build:client": "vite build",
|
||||
"dev": "pnpm build && pnpm typecheck && pnpm dev:serve",
|
||||
"dev:serve": "vite dev",
|
||||
"test": "vitest run --silent=passed-only --reporter=dot --exclude '**/build-output.test.ts'",
|
||||
"test": "vitest run --project dashboard-app-quality --project dashboard-api-quality --silent=passed-only --reporter=dot --exclude '**/build-output.test.ts'",
|
||||
"test:app": "vitest run --project dashboard-app --silent=passed-only --reporter=dot --exclude '**/build-output.test.ts'",
|
||||
"test:api": "vitest run --project dashboard-api --silent=passed-only --reporter=dot",
|
||||
"test:deep": "vitest run --project dashboard-app --project dashboard-api --silent=passed-only --reporter=dot --exclude '**/build-output.test.ts'",
|
||||
"test:browser-smoke": "node scripts/browser-layout-smoke.mjs",
|
||||
"test:build": "vitest run --silent=passed-only --reporter=dot app/__tests__/build-output.test.ts",
|
||||
"test:build": "vitest run --project dashboard-app --silent=passed-only --reporter=dot app/__tests__/build-output.test.ts",
|
||||
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.app.json"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -5,6 +5,26 @@ import { computeMaxWorkers } from "../core/src/__test-utils__/vitest-workers";
|
||||
|
||||
const maxWorkers = computeMaxWorkers({ defaultCap: 3 });
|
||||
|
||||
const qualityAppTests = [
|
||||
// Top-level API-client, mobile layout, styling, auth, and shell regressions.
|
||||
"app/__tests__/*.test.{ts,tsx}",
|
||||
"app/api/**/*.test.ts",
|
||||
// Representative workflow/component coverage. Exhaustive modal/view suites
|
||||
// stay available in the full `dashboard-app` project.
|
||||
"app/components/__tests__/{ActiveAgentsPanel,AgentMentionPopup,AgentMetricsBar,AgentReflectionsTab,AgentTokenStatsPanel,AuthTokenRecoveryDialog,Board,Column,ConfirmDialog,ConversationHistory,DashboardLoader,DirectoryPicker,ErrorBoundary,ExecutorStatusBar,FileBrowser,FileEditor,InlineCreateCard,LoginInstructions,MessageComposer,MobileNavBar,NewTaskModal,NodeCard,NodeHealthDot,NodeStatusIndicator,ProjectCard,ProjectSelector,ProviderIcon,QuickChatFAB,TaskCard,TaskChangesTab,TaskComments,TaskDocumentsTab,TaskForm,ThemeSelectorSwatchContract,WorkflowResultsTab}.test.tsx",
|
||||
// Hooks and utilities are fast, user-visible state/formatting behavior.
|
||||
"app/context/**/*.test.tsx",
|
||||
"app/hooks/__tests__/{useAgents,useAgentLogs,useAppSettings,useAuthOnboarding,useConfirm,useCurrentProject,useNodes,useNodeSettingsSync,useProjects,useQuickChat,useTasks,useTerminalSessions,useTheme,useToast,useUsageData,useViewState}.test.{ts,tsx}",
|
||||
"app/utils/**/*.test.{ts,tsx}",
|
||||
];
|
||||
|
||||
const qualityApiTests = [
|
||||
// Critical HTTP/server behavior: auth, task/project/settings mutation,
|
||||
// git/GitHub, agents, nodes, chat/files, realtime, and isolation guards.
|
||||
"src/__tests__/{api-error,auth-middleware,auth-middleware-integration,chat-attachment-routes,chat-routes,file-service,github,github-webhooks,initialize,planning-flow-diagnostics-guardrail,project-routes,project-store-resolver,remote-access-routes,remote-auth,routes-agent-budget,routes-agent-keys,routes-agent-permissions,routes-agent-ratings,routes-agent-runs,routes-agent-soul-memory,routes-agents,routes-automation,routes-git,routes-github,routes-nodes,routes-settings,routes-tasks,server,server-static-assets,server-webhook,server.events,setup-routes,sse,sse-buffer,test-isolation-guard,update-check-route,websocket}.test.ts",
|
||||
"src/routes/__tests__/{custom-provider-routes,custom-providers,register-docker-node-routes}.test.ts",
|
||||
];
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
resolve: {
|
||||
@@ -54,6 +74,24 @@ export default defineConfig({
|
||||
testTimeout: 15_000,
|
||||
hookTimeout: 15_000,
|
||||
projects: [
|
||||
{
|
||||
extends: true,
|
||||
test: {
|
||||
name: "dashboard-app-quality",
|
||||
environment: "jsdom",
|
||||
include: qualityAppTests,
|
||||
css: { include: [/app\//] },
|
||||
},
|
||||
},
|
||||
{
|
||||
extends: true,
|
||||
test: {
|
||||
name: "dashboard-api-quality",
|
||||
environment: "node",
|
||||
include: qualityApiTests,
|
||||
css: { include: [] },
|
||||
},
|
||||
},
|
||||
{
|
||||
extends: true,
|
||||
test: {
|
||||
|
||||
Reference in New Issue
Block a user