/** * @vitest-environment happy-dom */ import type { ReactNode } from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import { MemoryRouter, Routes, Route, Navigate } from 'react-router-dom'; import App, { PageFallback } from './App'; import { routerFuture } from './routerFuture'; vi.mock('./context/WebSocketProvider', () => ({ WebSocketProvider: ({ children }: { children: ReactNode }) => <>{children}, })); vi.mock('./context/ForgeContext', () => ({ ForgeProvider: ({ children }: { children: ReactNode }) => <>{children}, })); vi.mock('./components/SessionGate', () => ({ default: ({ children }: { children: ReactNode }) => <>{children}, })); vi.mock('./components/Layout/Layout', () => ({ default: ({ children }: { children: ReactNode }) =>
{children}
, })); vi.mock('./pages/DashboardPage', () => ({ default: () =>
Dashboard Page
})); vi.mock('./pages/AgentsPage', () => ({ default: () =>
Agents Page
})); vi.mock('./pages/BuilderPage', () => ({ default: () =>
Forge Page
})); vi.mock('./pages/BuildManagerPage', () => ({ default: () =>
Builds Page
})); vi.mock('./pages/SettingsPage', () => ({ default: () =>
Settings Page
})); vi.mock('./pages/GuidePage', () => ({ default: () =>
Guide Page
})); vi.mock('./pages/CruciblePage', () => ({ default: () =>
Crucible Page
})); describe('PageFallback', () => { it('shows loading copy', () => { render(); expect(screen.getByText('Loading…')).toBeTruthy(); }); }); describe('App route config', () => { it('redirects / to dashboard and /builder to forge', () => { function RedirectProbe({ path }: { path: string }) { return ( } /> Dashboard Page} /> } /> Forge Page} /> ); } const { unmount: u1 } = render(); expect(screen.getByText('Dashboard Page')).toBeTruthy(); u1(); render(); expect(screen.getByText('Forge Page')).toBeTruthy(); }); it('renders crucible route via App shell', async () => { render( ); expect(await screen.findByText('Crucible Page')).toBeTruthy(); expect(screen.getByTestId('layout')).toBeTruthy(); }); });