BackupModal.test.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * Tests for the BackupModal component.
  3. */
  4. import { describe, it, expect, vi, beforeEach } from 'vitest';
  5. import { screen } from '@testing-library/react';
  6. import userEvent from '@testing-library/user-event';
  7. import { render } from '../utils';
  8. import { BackupModal } from '../../components/BackupModal';
  9. import { http, HttpResponse } from 'msw';
  10. import { server } from '../mocks/server';
  11. describe('BackupModal', () => {
  12. const mockOnClose = vi.fn();
  13. beforeEach(() => {
  14. vi.clearAllMocks();
  15. server.use(
  16. http.post('/api/v1/settings/backup', () => {
  17. return new HttpResponse(
  18. JSON.stringify({ success: true }),
  19. {
  20. headers: {
  21. 'Content-Type': 'application/json',
  22. },
  23. }
  24. );
  25. })
  26. );
  27. });
  28. describe('rendering', () => {
  29. it('renders the modal title', () => {
  30. render(<BackupModal onClose={mockOnClose} />);
  31. expect(screen.getByText(/backup/i)).toBeInTheDocument();
  32. });
  33. it('shows backup options', () => {
  34. render(<BackupModal onClose={mockOnClose} />);
  35. expect(screen.getByText(/settings/i)).toBeInTheDocument();
  36. });
  37. it('shows export button', () => {
  38. render(<BackupModal onClose={mockOnClose} />);
  39. expect(screen.getByRole('button', { name: /export/i })).toBeInTheDocument();
  40. });
  41. it('shows cancel button', () => {
  42. render(<BackupModal onClose={mockOnClose} />);
  43. expect(screen.getByRole('button', { name: /cancel/i })).toBeInTheDocument();
  44. });
  45. });
  46. describe('backup options', () => {
  47. it('has checkbox for printers', () => {
  48. render(<BackupModal onClose={mockOnClose} />);
  49. expect(screen.getByText('Printers')).toBeInTheDocument();
  50. });
  51. it('has checkbox for archives', () => {
  52. render(<BackupModal onClose={mockOnClose} />);
  53. expect(screen.getByText(/archives/i)).toBeInTheDocument();
  54. });
  55. it('has checkbox for projects', () => {
  56. render(<BackupModal onClose={mockOnClose} />);
  57. expect(screen.getByText('Projects')).toBeInTheDocument();
  58. });
  59. });
  60. describe('actions', () => {
  61. it('calls onClose when cancel is clicked', async () => {
  62. const user = userEvent.setup();
  63. render(<BackupModal onClose={mockOnClose} />);
  64. await user.click(screen.getByRole('button', { name: /cancel/i }));
  65. expect(mockOnClose).toHaveBeenCalled();
  66. });
  67. });
  68. });