/**
* @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('./components/Sound/SoundBridge', () => ({
default: () => null,
}));
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/MissionDeckPage', () => ({ default: () => Mission Deck Page
}));
vi.mock('./pages/BuildManagerPage', () => ({ default: () => Builds Page
}));
vi.mock('./pages/SettingsPage', () => ({ default: () => Settings 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();
});
it('renders mission-deck route via App shell', async () => {
const { unmount } = render(
);
expect(await screen.findByText('Mission Deck Page')).toBeTruthy();
expect(screen.getAllByTestId('layout').length).toBeGreaterThan(0);
unmount();
});
});