import { describe, it, expect, vi } from 'vitest' import { render, screen, fireEvent } from '@testing-library/react' import ImportSuccessModal from '../ImportSuccessModal' describe('ImportSuccessModal', () => { const defaultProps = { visible: true, onClose: vi.fn(), onNavigateDashboard: vi.fn(), onNavigateHosts: vi.fn(), results: { created: 5, updated: 2, skipped: 1, errors: [], }, } beforeEach(() => { vi.clearAllMocks() }) it('renders import summary correctly', () => { render() expect(screen.getByText('Import Completed')).toBeInTheDocument() expect(screen.getByText('8 hosts processed')).toBeInTheDocument() expect(screen.getByText('5')).toBeInTheDocument() expect(screen.getByText(/hosts created/)).toBeInTheDocument() expect(screen.getByText('2')).toBeInTheDocument() expect(screen.getByText(/hosts updated/)).toBeInTheDocument() expect(screen.getByText('1')).toBeInTheDocument() expect(screen.getByText(/host skipped/)).toBeInTheDocument() }) it('displays certificate provisioning guidance when hosts are created', () => { render() expect(screen.getByText('Certificate Provisioning')).toBeInTheDocument() expect(screen.getByText(/SSL certificates will be automatically provisioned/)).toBeInTheDocument() expect(screen.getByText(/1-5 minutes per domain/)).toBeInTheDocument() }) it('hides certificate provisioning guidance when no hosts are created', () => { const props = { ...defaultProps, results: { created: 0, updated: 2, skipped: 0, errors: [] }, } render() expect(screen.queryByText('Certificate Provisioning')).not.toBeInTheDocument() }) it('shows errors when present', () => { const props = { ...defaultProps, results: { created: 0, updated: 0, skipped: 0, errors: ['example.com: duplicate entry', 'api.example.com: invalid config'], }, } render() expect(screen.getByText('2 errors encountered')).toBeInTheDocument() expect(screen.getByText('example.com: duplicate entry')).toBeInTheDocument() expect(screen.getByText('api.example.com: invalid config')).toBeInTheDocument() }) it('calls onNavigateDashboard when clicking Dashboard button', () => { const onNavigateDashboard = vi.fn() render() fireEvent.click(screen.getByText('Go to Dashboard')) expect(onNavigateDashboard).toHaveBeenCalledTimes(1) }) it('calls onNavigateHosts when clicking View Proxy Hosts button', () => { const onNavigateHosts = vi.fn() render() fireEvent.click(screen.getByText('View Proxy Hosts')) expect(onNavigateHosts).toHaveBeenCalledTimes(1) }) it('calls onClose when clicking Close button', () => { const onClose = vi.fn() render() fireEvent.click(screen.getByText('Close')) expect(onClose).toHaveBeenCalledTimes(1) }) it('calls onClose when clicking backdrop', () => { const onClose = vi.fn() const { container } = render() // Click the backdrop (the overlay behind the modal) const backdrop = container.querySelector('.bg-black\\/60') if (backdrop) { fireEvent.click(backdrop) } expect(onClose).toHaveBeenCalledTimes(1) }) it('does not render when visible is false', () => { render() expect(screen.queryByText('Import Completed')).not.toBeInTheDocument() }) it('does not render when results is null', () => { render() expect(screen.queryByText('Import Completed')).not.toBeInTheDocument() }) it('handles singular grammar correctly for single host', () => { const props = { ...defaultProps, results: { created: 1, updated: 0, skipped: 0, errors: [] }, } render() expect(screen.getByText('1 host processed')).toBeInTheDocument() expect(screen.getByText(/host created/)).toBeInTheDocument() }) it('handles single error with correct grammar', () => { const props = { ...defaultProps, results: { created: 0, updated: 0, skipped: 0, errors: ['single error'], }, } render() expect(screen.getByText('1 error encountered')).toBeInTheDocument() }) it('shows message when no hosts were processed', () => { const props = { ...defaultProps, results: { created: 0, updated: 0, skipped: 0, errors: [] }, } render() expect(screen.getByText('No hosts were processed')).toBeInTheDocument() }) })