import { it, expect, vi } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/svelte'; import { createRawSnippet } from 'svelte'; import Modal from './Modal.svelte'; const children = createRawSnippet(() => ({ render: () => '
content
' })); it('renders the title and children when open', () => { render(Modal, { props: { open: true, title: 'My dialog', children } }); expect(screen.getByTestId('modal')).toBeTruthy(); expect(screen.getByText('My dialog')).toBeTruthy(); expect(screen.getByTestId('modal-body')).toBeTruthy(); }); it('does not render when closed', () => { render(Modal, { props: { open: false, title: 'Hidden', children } }); expect(screen.queryByTestId('modal')).toBeNull(); }); it('invokes onclose when the close button is clicked', async () => { const onclose = vi.fn(); render(Modal, { props: { open: true, title: 'X', onclose, children } }); await fireEvent.click(screen.getByTestId('modal-close-btn')); expect(onclose).toHaveBeenCalled(); }); it('closes on Escape', async () => { const onclose = vi.fn(); render(Modal, { props: { open: true, title: 'X', onclose, children } }); await fireEvent.keyDown(window, { key: 'Escape' }); expect(onclose).toHaveBeenCalled(); });