import { render, screen } from '@testing-library/react'; import { vi } from 'vitest'; import { ReactNode } from 'react'; import { withTestRouter } from '@/react/test-utils/withRouter'; import { withTestQueryProvider } from '@/react/test-utils/withTestQuery'; import { withUserProvider } from '@/react/test-utils/withUserProvider'; import { UserViewModel } from '@/portainer/models/user'; import { ServiceAccountView } from './ServiceAccountView'; let mockParams: { endpointId: number; namespace: string; name: string; tab?: string; } = { endpointId: 1, namespace: 'default', name: 'my-sa' }; vi.mock('@@/Link', () => ({ Link: ({ children, ...props }: { children: ReactNode; [key: string]: unknown; }) => {children}, })); vi.mock('@uirouter/react', async (importOriginal: () => Promise) => { const actual = await importOriginal(); return { ...(actual as object), useCurrentStateAndParams: () => ({ params: mockParams }), }; }); vi.mock('./ServiceAccountDetailsWidget', () => ({ ServiceAccountDetailsWidget: () => (
Details Widget
), })); vi.mock('./ServiceAccountYAMLEditor', () => ({ ServiceAccountYAMLEditor: () => (
YAML Editor
), })); vi.mock('@/react/hooks/useEnvironmentId', () => ({ useEnvironmentId: () => 1, })); function getWrapped() { const user = new UserViewModel({ Username: 'admin' }); const routerConfig = [{ name: 'root', url: '/' }]; return withTestQueryProvider( withUserProvider( withTestRouter(ServiceAccountView, { route: 'root', stateConfig: routerConfig, }), user ) ); } describe('ServiceAccountView', () => { beforeEach(() => { mockParams = { endpointId: 1, namespace: 'default', name: 'my-sa' }; }); it('renders with page title', () => { const Wrapped = getWrapped(); render(); expect(screen.getByText('Service account details')).toBeInTheDocument(); }); it('renders service account name in breadcrumb', () => { const Wrapped = getWrapped(); render(); expect(screen.getByText('my-sa')).toBeInTheDocument(); }); });