import { render, screen, fireEvent } from '@testing-library/react'; import { DescendantsPageListModal } from './DescendantsPageListModal'; const mockClose = vi.hoisted(() => vi.fn()); const useIsDeviceLargerThanLg = vi.hoisted(() => vi.fn().mockReturnValue({ data: true })); vi.mock('next/router', () => ({ useRouter: () => ({ events: { on: vi.fn(), off: vi.fn(), }, }), })); vi.mock('~/stores/modal', () => ({ useDescendantsPageListModal: vi.fn().mockReturnValue({ data: { isOpened: true }, close: mockClose, }), })); vi.mock('~/stores/ui', () => ({ useIsDeviceLargerThanLg, })); describe('DescendantsPageListModal.tsx', () => { it('should render the modal when isOpened is true', () => { render(); expect(screen.getByTestId('descendants-page-list-modal')).not.toBeNull(); }); it('should call close function when close button is clicked', () => { render(); const closeButton = screen.getByLabelText('Close'); fireEvent.click(closeButton); expect(mockClose).toHaveBeenCalled(); }); describe('when device is larger than lg', () => { it('should render CustomNavTab', () => { render(); expect(screen.getByTestId('custom-nav-tab')).not.toBeNull(); }); it('should not render CustomNavDropdown', () => { render(); expect(screen.queryByTestId('custom-nav-dropdown')).toBeNull(); }); }); describe('when device is smaller than lg', () => { beforeEach(() => { useIsDeviceLargerThanLg.mockReturnValue({ data: false }); }); it('should render CustomNavDropdown on devices smaller than lg', () => { render(); expect(screen.getByTestId('custom-nav-dropdown')).not.toBeNull(); }); it('should not render CustomNavTab', () => { render(); expect(screen.queryByTestId('custom-nav-tab')).toBeNull(); }); }); });