import wrapper from '@cloudscape-design/components/test-utils/dom'; import '@testing-library/jest-dom'; import { render, screen } from '@testing-library/react'; import { useGetCaseById, useGetCaseActions } from '../../src/api/cases'; import { breadcrumbLabels, commonLabels } from '../../src/common/labels'; import CaseDetailsPage from '../../src/pages/case-detail'; let query: { caseId: string | undefined } = { caseId: '100' }; jest.mock('next/router', () => ({ useRouter: jest.fn().mockImplementation(() => ({ query, push: jest.fn(), })), })); jest.mock('../../src/api/cases', () => ({ useGetCaseById: jest.fn(), useGetCaseActions: jest.fn(), })); describe('CaseDetailsPage', () => { it('renders a blank page with no caseId', async () => { useGetCaseById.mockImplementation(() => ({ data: undefined, isLoading: false, })); const page = render(); const anyHeader = screen.queryByRole('heading'); expect(anyHeader).toBeTruthy(); expect(page).toBeTruthy(); // assert breadcrumb const breadcrumbWrapper = wrapper(page.container).findBreadcrumbGroup(); expect(breadcrumbWrapper).toBeTruthy(); const breadcrumbLinks = breadcrumbWrapper?.findBreadcrumbLinks()!; expect(breadcrumbLinks.length).toEqual(2); expect(breadcrumbLinks[0].getElement()).toHaveTextContent(breadcrumbLabels.homePageLabel); expect(breadcrumbLinks[1].getElement()).toHaveTextContent(breadcrumbLabels.caseDetailsLabel); }); it('renders a loading label during fetch', () => { useGetCaseById.mockImplementation(() => ({ data: undefined, isLoading: true, })); const page = render(); const label = screen.getByText(commonLabels.loadingLabel); expect(page).toBeTruthy(); expect(label).toBeTruthy(); }); it('renders a not found warning if no caseId is provided', () => { query = { caseId: undefined }; useGetCaseById.mockImplementation(() => ({ data: undefined, isLoading: false, })); const page = render(); const anyHeader = screen.queryByRole('heading'); expect(anyHeader).toBeTruthy(); expect(page).toBeTruthy(); }); });