import { fireEvent, render, screen } from '@testing-library/react'; import AccordionExpandableItem from './ExpandableItem'; describe('AccordionExpandableItem', () => { const baseProps = { id: 'uniqueTestID', accessibilityExpandLabel: 'click to expand', accessibilityCollapseLabel: 'click to collapse', title: 'test title', summary: ['summary1', 'summary2', 'summary3'], isCollapsed: true, // @ts-expect-error - TS2344 - Type 'undefined' does not satisfy the constraint 'any[]'. onExpand: jest.fn<[boolean], undefined>(), type: 'info', } as const; it('should render the collapsed state correctly', () => { render(Children); expect(screen.getByText(/test title/i)).toBeInTheDocument(); // eslint-disable-next-line testing-library/prefer-presence-queries -- Please fix the next time this file is touched! expect(screen.queryByText(/summary1/i)).toBeInTheDocument(); expect(screen.queryByText(/Children/i)).toBeNull(); const expandButton = screen.getByRole('button', { name: /click to expand/i, }); fireEvent.click(expandButton); expect(baseProps.onExpand).toHaveBeenCalledWith(false); }); it('should render icon correctly', () => { const props = { ...baseProps, icon: 'lock', iconAccessibilityLabel: 'test label', } as const; render(Children); expect(screen.getByText(/test title/i)).toBeInTheDocument(); expect(screen.getByRole('img', { name: /test label/i })).toBeInTheDocument(); // eslint-disable-next-line testing-library/prefer-presence-queries -- Please fix the next time this file is touched! expect(screen.queryByText(/summary1/i)).toBeInTheDocument(); expect(screen.queryByText(/Children/i)).toBeNull(); }); it('should render badge correctly', () => { const props = { ...baseProps, badge: { text: 'badge text' }, } as const; render(Children); expect(screen.getByText(/test title/i)).toBeInTheDocument(); // eslint-disable-next-line testing-library/prefer-presence-queries -- Please fix the next time this file is touched! expect(screen.queryByText(/badge text/i)).toBeInTheDocument(); // eslint-disable-next-line testing-library/prefer-presence-queries -- Please fix the next time this file is touched! expect(screen.queryByText(/summary1/i)).toBeInTheDocument(); expect(screen.queryByText(/Children/i)).toBeNull(); }); it('should render icon button correctly', () => { const props = { ...baseProps, icon: 'lock', iconAccessibilityLabel: 'test label', } as const; render(Children); expect(screen.getByText(/test title/i)).toBeInTheDocument(); expect(screen.getByRole('img', { name: /test label/i })).toBeInTheDocument(); // eslint-disable-next-line testing-library/prefer-presence-queries -- Please fix the next time this file is touched! expect(screen.queryByText(/summary1/i)).toBeInTheDocument(); expect(screen.queryByText(/Children/i)).toBeNull(); }); it('should render the expanded state correctly', () => { const props = { ...baseProps, isCollapsed: false, } as const; render(Children); expect(screen.getByText(/test title/i)).toBeInTheDocument(); expect(screen.queryByText(/summary1/i)).not.toBeInTheDocument(); expect(screen.getByText(/Children/i)).toBeInTheDocument(); const expandButton = screen.getByRole('button', { name: /click to collapse/i, }); fireEvent.click(expandButton); expect(props.onExpand).toHaveBeenCalledWith(true); }); it('should render the error state correctly', () => { const props = { ...baseProps, type: 'error', iconAccessibilityLabel: 'error icon label', isCollapsed: true, } as const; render(Children); expect(screen.getByRole('img', { name: /Error icon/i })).toBeInTheDocument(); expect(screen.getByText(/test title/i)).toBeInTheDocument(); expect(screen.getByText(/summary1/i)).toBeInTheDocument(); expect(screen.queryByText(/Children/i)).toBeNull(); }); });