import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import '@testing-library/jest-dom'; import SourcesCardBase from './SourcesCardBase'; describe('SourcesCardBase', () => { it('should render card correctly if one source with only a link is passed in', () => { render(); expect(screen.getByText('Source 1')).toBeTruthy(); // no buttons or navigation when there is only 1 source expect(screen.queryByRole('button')).toBeFalsy(); expect(screen.queryByText('1/1')).toBeFalsy(); }); it('should render card correctly if one source with a title is passed in', () => { render(); expect(screen.getByText('How to make an apple pie')).toBeTruthy(); }); it('should render card correctly if one source with a body is passed in', () => { render(); expect(screen.getByText('To make an apple pie, you must first...')).toBeTruthy(); }); it('should render card correctly if one source with a title and body is passed in', () => { render( ); expect(screen.getByText('How to make an apple pie')).toBeTruthy(); expect(screen.getByText('To make an apple pie, you must first...')).toBeTruthy(); }); it('should render multiple cards correctly', () => { render( ); expect(screen.getByText('How to make an apple pie')).toBeTruthy(); expect(screen.getByText('1/2')).toBeTruthy(); screen.getByRole('button', { name: /Go to previous page/i }); screen.getByRole('button', { name: /Go to next page/i }); }); it('should navigate between cards correctly', async () => { render( ); expect(screen.getByText('How to make an apple pie')).toBeTruthy(); expect(screen.getByText('1/2')).toBeTruthy(); expect(screen.getByRole('button', { name: /Go to previous page/i })).toBeDisabled(); await userEvent.click(screen.getByRole('button', { name: /Go to next page/i })); expect(screen.queryByText('How to make an apple pie')).toBeFalsy(); expect(screen.getByText('How to make cookies')).toBeTruthy(); expect(screen.getByText('2/2')).toBeTruthy(); expect(screen.getByRole('button', { name: /Go to previous page/i })).toBeEnabled(); expect(screen.getByRole('button', { name: /Go to next page/i })).toBeDisabled(); }); it('should apply className appropriately', () => { render( ); const element = screen.getByRole('navigation'); expect(element).toHaveClass('test'); }); it('should disable pagination appropriately', () => { render( ); expect(screen.getByRole('button', { name: /Go to previous page/i })).toBeDisabled(); expect(screen.getByRole('button', { name: /Go to next page/i })).toBeDisabled(); }); it('should render navigation aria label appropriately', () => { render( ); expect(screen.getByRole('navigation', { name: /Pagination/i })).toBeTruthy(); }); it('should change paginationAriaLabel appropriately', () => { render( ); expect(screen.getByRole('navigation', { name: /Navegación/i })).toBeTruthy(); }); it('should change toNextPageAriaLabel appropriately', () => { render( ); expect(screen.getByRole('button', { name: /Pase a la siguiente página/i })).toBeTruthy(); }); it('should change toPreviousPageAriaLabel appropriately', () => { render( ); expect(screen.getByRole('button', { name: /Presione para regresar a la página anterior/i })).toBeTruthy(); }); it('should call onNextClick appropriately', async () => { const spy = jest.fn(); render( ); await userEvent.click(screen.getByRole('button', { name: /Go to next page/i })); expect(spy).toHaveBeenCalled(); }); it('should call onPreviousClick appropriately', async () => { const spy = jest.fn(); render( ); await userEvent.click(screen.getByRole('button', { name: /Go to next page/i })); await userEvent.click(screen.getByRole('button', { name: /Go to previous page/i })); expect(spy).toHaveBeenCalled(); }); it('should call onSetPage appropriately', async () => { const spy = jest.fn(); render( ); await userEvent.click(screen.getByRole('button', { name: /Go to next page/i })); expect(spy).toHaveBeenCalledTimes(1); await userEvent.click(screen.getByRole('button', { name: /Go to previous page/i })); expect(spy).toHaveBeenCalledTimes(2); }); it('should handle showMore appropriately', async () => { render( ); expect(screen.getByRole('region')).toHaveAttribute('class', 'pf-v6-c-expandable-section__content'); }); it('should call onClick appropriately', async () => { const spy = jest.fn(); render(); await userEvent.click(screen.getByRole('link', { name: /How to make an apple pie/i })); expect(spy).toHaveBeenCalled(); }); it('should apply titleProps appropriately', () => { render( ); expect(screen.getByRole('link', { name: /How to make an apple pie/i })).toHaveClass('test'); }); });