/**
* Tests for Linker Dashboard
*/
import { render, screen, waitFor } from '@testing-library/react';
import { BrowserRouter } from 'react-router';
import LinkerDashboard from '../Dashboard';
import { fetchContent } from '../../../services/api';
vi.mock('../../../services/api');
vi.mock('../../../store/siteStore', () => ({
useSiteStore: () => ({ activeSite: { id: 1, name: 'Test Site' } }),
}));
vi.mock('../../../store/sectorStore', () => ({
useSectorStore: () => ({ activeSector: { id: 1, name: 'Test Sector' } }),
}));
describe('LinkerDashboard', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('renders dashboard title', () => {
(fetchContent as any).mockResolvedValue({ results: [], count: 0 });
render(
);
expect(screen.getByText('Linker Dashboard')).toBeInTheDocument();
});
it('displays stats cards when data is loaded', async () => {
(fetchContent as any).mockResolvedValue({
results: [
{ id: 1, internal_links: [{ id: 1 }] },
{ id: 2, internal_links: [] },
],
count: 2,
});
render(
);
await waitFor(() => {
expect(screen.getByText('Total Linked')).toBeInTheDocument();
expect(screen.getByText('Total Links')).toBeInTheDocument();
});
});
it('shows loading state initially', () => {
(fetchContent as any).mockImplementation(() => new Promise(() => {}));
render(
);
expect(screen.getByText('Loading stats...')).toBeInTheDocument();
});
it('renders quick actions', async () => {
(fetchContent as any).mockResolvedValue({ results: [], count: 0 });
render(
);
await waitFor(() => {
expect(screen.getByText('Link Content')).toBeInTheDocument();
expect(screen.getByText('View Content')).toBeInTheDocument();
});
});
});