import { describe, it, expect, vi } from 'vitest' import { render, screen, fireEvent } from '@testing-library/svelte' import ConfirmModal from './ConfirmModal.svelte' describe('ConfirmModal', () => { it('renders nothing when open is false', () => { render(ConfirmModal, { props: { open: false, title: 'Confirm', message: 'Are you sure?' }, }) expect(screen.queryByRole('dialog')).not.toBeInTheDocument() }) it('renders title and message when open', () => { render(ConfirmModal, { props: { open: true, title: 'Delete deck', message: 'This cannot be undone.', }, }) expect(screen.getByRole('dialog')).toBeInTheDocument() expect(screen.getByText('Delete deck')).toBeInTheDocument() expect(screen.getByText('This cannot be undone.')).toBeInTheDocument() }) it('calls onConfirm when Confirm is clicked', async () => { const onConfirm = vi.fn() render(ConfirmModal, { props: { open: true, title: 'Confirm', message: 'Proceed?', confirmLabel: 'Yes', onConfirm, }, }) await fireEvent.click(screen.getByRole('button', { name: 'Yes' })) expect(onConfirm).toHaveBeenCalledTimes(1) }) it('calls onCancel when Cancel is clicked', async () => { const onCancel = vi.fn() render(ConfirmModal, { props: { open: true, title: 'Confirm', message: 'Proceed?', cancelLabel: 'No', onCancel, }, }) await fireEvent.click(screen.getByRole('button', { name: 'No' })) expect(onCancel).toHaveBeenCalledTimes(1) }) it('calls onCancel on Escape key', async () => { const onCancel = vi.fn() render(ConfirmModal, { props: { open: true, title: 'Confirm', message: 'Proceed?', onCancel }, }) const dialog = screen.getByRole('dialog') await fireEvent.keyDown(dialog, { key: 'Escape' }) expect(onCancel).toHaveBeenCalledTimes(1) }) it('calls onCancel when backdrop is clicked', async () => { const onCancel = vi.fn() const { container } = render(ConfirmModal, { props: { open: true, title: 'Confirm', message: 'Proceed?', onCancel }, }) const backdrop = container.querySelector('.modal-backdrop') expect(backdrop).toBeTruthy() await fireEvent.click(backdrop) expect(onCancel).toHaveBeenCalledTimes(1) }) })