/** * Tests for the BackupModal component. */ import { describe, it, expect, vi, beforeEach } from 'vitest'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { render } from '../utils'; import { BackupModal } from '../../components/BackupModal'; import { http, HttpResponse } from 'msw'; import { server } from '../mocks/server'; describe('BackupModal', () => { const mockOnClose = vi.fn(); beforeEach(() => { vi.clearAllMocks(); server.use( http.post('/api/v1/settings/backup', () => { return new HttpResponse( JSON.stringify({ success: true }), { headers: { 'Content-Type': 'application/json', }, } ); }) ); }); describe('rendering', () => { it('renders the modal title', () => { render(); expect(screen.getByText(/backup/i)).toBeInTheDocument(); }); it('shows backup options', () => { render(); expect(screen.getByText(/settings/i)).toBeInTheDocument(); }); it('shows export button', () => { render(); expect(screen.getByRole('button', { name: /export/i })).toBeInTheDocument(); }); it('shows cancel button', () => { render(); expect(screen.getByRole('button', { name: /cancel/i })).toBeInTheDocument(); }); }); describe('backup options', () => { it('has checkbox for printers', () => { render(); expect(screen.getByText('Printers')).toBeInTheDocument(); }); it('has checkbox for archives', () => { render(); expect(screen.getByText(/archives/i)).toBeInTheDocument(); }); it('has checkbox for projects', () => { render(); expect(screen.getByText('Projects')).toBeInTheDocument(); }); }); describe('actions', () => { it('calls onClose when cancel is clicked', async () => { const user = userEvent.setup(); render(); await user.click(screen.getByRole('button', { name: /cancel/i })); expect(mockOnClose).toHaveBeenCalled(); }); }); });