import ImportAlert from '@/features/Events/ImportAlert' import { fireEvent, screen } from '@testing-library/react' import { renderWithProviders } from '../../utils/Renderwithproviders' // Mock the ErrorSnackbar component since we want to test ImportAlert logic, // but we can also test integration if we don't mock it. // Given ImportAlert uses EventErrorSnackbar which uses MUI Snackbar, // it's better to render it and check for text presence. describe('ImportAlert', () => { const preloadedState = { calendars: { list: { cal1: { id: 'cal1', name: 'Calendar 1', events: { event1: { uid: 'event1', title: 'Event 1', error: 'Error message 1' }, event2: { uid: 'event2', title: 'Event 2' // No error } } }, cal2: { id: 'cal2', name: 'Calendar 2', events: { event3: { uid: 'event3', title: 'Event 3', error: 'Error message 2' } } } } } } it('renders nothing when there are no errors', () => { const state = { calendars: { list: { cal1: { id: 'cal1', events: { event1: { uid: 'event1' } } } } } } const { container } = renderWithProviders(, state) expect(container).toBeEmptyDOMElement() }) it('renders snackbar with error message when there is one error', () => { renderWithProviders(, preloadedState) // EventErrorSnackbar shows "multipleEvents" if > 1, or the message if 1. // Here we have 2 errors in preloadedState. // Let's adjust state for single error test. const singleErrorState = { calendars: { list: { cal1: { id: 'cal1', events: { event1: { uid: 'event1', error: 'Single Error' } } } } } } renderWithProviders(, singleErrorState) expect(screen.getByText('Single Error')).toBeInTheDocument() }) it('renders summary message when there are multiple errors', () => { renderWithProviders(, preloadedState) // 2 errors in preloadedState // "error.multipleEvents" key is used. // In test environment, t function usually returns the key or formatted string. // We should check what the real t function does or if it's mocked. // Based on other tests, it seems we might need to check for the translation key or value. // Let's assume standard behavior: "error.multipleEvents" // Actually, EventErrorSnackbar uses: t("error.multipleEvents", { count: messages.length }) // If we don't have full i18n setup in tests, it might be tricky. // But renderWithProviders likely sets up i18n. // Let's check for the text that appears. // If translation is missing, it might show "error.multipleEvents". // Or if we can match regex. // Let's try to match partial text or use a custom state with known behavior. // If we look at EventErrorSnackbar: // const summary = messages.length === 1 ? messages[0] : t("error.multipleEvents", { count: messages.length }); // We can check if the Alert is present. expect(screen.getByRole('alert')).toBeInTheDocument() }) it('dismisses error when close button is clicked', () => { const singleErrorState = { calendars: { list: { cal1: { id: 'cal1', events: { event1: { uid: 'event1', error: 'Dismiss Me' } } } } } } renderWithProviders(, singleErrorState) expect(screen.getByText('Dismiss Me')).toBeInTheDocument() const closeButton = screen.getByRole('button', { name: /ok/i }) // EventErrorSnackbar has an "OK" button fireEvent.click(closeButton) // After clicking, it should disappear (or at least be removed from DOM or hidden) // Since we use local state to filter dismissed errors, it should re-render with null. expect(screen.queryByText('Dismiss Me')).not.toBeInTheDocument() }) })