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();
});
});
});