import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; import ChatbotFootnote from './ChatbotFootnote'; describe('ChatbotFooternote', () => { const onClick = jest.fn(); const popoverProps = { title: 'Verify accuracy', description: 'description', bannerImage: { src: 'src', alt: 'alt' }, cta: { label: 'Got it', onClick }, link: { label: 'label', url: 'url' } }; it('should render ChatbotFooternote', () => { render(); expect(screen.getByText('Chatbot footer')).toBeTruthy(); }); it('should render ChatbotFooternote with popover', async () => { render(); // click on the footer button act(() => { fireEvent.click(screen.getByRole('button')); }); await waitFor(() => { // Check if the popover is visible and click on the cta button screen.getByLabelText('More information'); screen.getByText('Verify accuracy'); fireEvent.click(screen.getByRole('button', { name: 'Got it' })); expect(onClick).toHaveBeenCalled(); }); }); it('should call onClick handler when popover cta button is clicked', async () => { render(); // click on the footer button act(() => { fireEvent.click(screen.getByRole('button')); }); await waitFor(() => { // Check if the popover is visible and click on the cta button screen.getByLabelText('More information'); screen.getByText('Verify accuracy'); fireEvent.click(screen.getByRole('button', { name: 'Got it' })); expect(onClick).toHaveBeenCalled(); }); }); it('should close the popover when escape is pressed', async () => { render(); // click on the footer button act(() => { fireEvent.click(screen.getByRole('button')); }); await waitFor(() => { // Check if the popover is visible and click on the cta button screen.getByLabelText('More information'); screen.getByText('Verify accuracy'); }); act(() => { // trigger escape to close the popover fireEvent.keyDown(document, { key: 'Escape', code: 'Escape' }); }); await waitFor(() => { expect(screen.queryByText('Verify accuracy')).toBeFalsy(); }); }); });