import { render, screen } from '@testing-library/react'; import { fromPartial } from '@total-typescript/shoehorn'; import { useParams } from 'react-router-dom'; import { ShlinkWebComponentContainerFactory } from '../../src/common/ShlinkWebComponentContainer'; import type { NonReachableServer, NotFoundServer, SelectedServer } from '../../src/servers/data'; vi.mock('react-router-dom', async () => ({ ...(await vi.importActual('react-router-dom')), useParams: vi.fn(), })); describe('', () => { const ShlinkWebComponentContainer = ShlinkWebComponentContainerFactory(fromPartial({ buildShlinkApiClient: vi.fn().mockReturnValue(fromPartial({})), TagColorsStorage: fromPartial({}), ShlinkWebComponent: () => <>ShlinkWebComponent, ServerError: () => <>ServerError, })); const setUp = (selectedServer: SelectedServer) => render( , ); beforeEach(() => { (useParams as any).mockReturnValue({ serverId: 'abc123' }); }); it('shows loading indicator while loading server', () => { setUp(null); expect(screen.getByText('Loading...')).toBeInTheDocument(); expect(screen.queryByText('ServerError')).not.toBeInTheDocument(); expect(screen.queryByText('ShlinkWebComponent')).not.toBeInTheDocument(); }); it.each([ [fromPartial({ serverNotFound: true })], [fromPartial({ serverNotReachable: true })], ])('shows error for non reachable servers', (selectedServer) => { setUp(selectedServer); expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); expect(screen.getByText('ServerError')).toBeInTheDocument(); expect(screen.queryByText('ShlinkWebComponent')).not.toBeInTheDocument(); }); it('renders ShlinkWebComponent for reachable servers', () => { setUp(fromPartial({ version: '3.0.0' })); expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); expect(screen.queryByText('ServerError')).not.toBeInTheDocument(); expect(screen.getByText('ShlinkWebComponent')).toBeInTheDocument(); }); });