| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /**
- * Tests for the VirtualPrinterDiagnosticModal component.
- */
- import { describe, it, expect, vi } from 'vitest';
- import { screen, waitFor } from '@testing-library/react';
- import userEvent from '@testing-library/user-event';
- import { http, HttpResponse } from 'msw';
- import { server } from '../mocks/server';
- import { render } from '../utils';
- import { VirtualPrinterDiagnosticModal } from '../../components/VirtualPrinterDiagnosticModal';
- import type { VPDiagnosticResult } from '../../api/client';
- const problemResult: VPDiagnosticResult = {
- vp_id: 3,
- vp_name: 'Garage VP',
- mode: 'archive',
- overall: 'problems',
- checks: [
- { id: 'enabled', status: 'pass', params: {} },
- { id: 'running', status: 'fail', params: {} },
- { id: 'port_mqtt', status: 'fail', params: { port: 8883 } },
- ],
- };
- /** Stub the diagnostic endpoint and count how often it is hit. */
- function setupDiagnostic(result: VPDiagnosticResult): { calls: () => number } {
- let count = 0;
- server.use(
- http.get('*/virtual-printers/:id/diagnostic', () => {
- count += 1;
- return HttpResponse.json(result);
- }),
- );
- return { calls: () => count };
- }
- describe('VirtualPrinterDiagnosticModal', () => {
- it('runs the diagnostic on mount and renders the checks', async () => {
- const probe = setupDiagnostic(problemResult);
- render(<VirtualPrinterDiagnosticModal vpId={3} vpName="Garage VP" onClose={() => {}} />);
- expect(await screen.findByText(/Found problems that explain/)).toBeInTheDocument();
- expect(probe.calls()).toBe(1);
- // Per-check titles render; the port param is interpolated into the title.
- expect(screen.getByText('Services running')).toBeInTheDocument();
- expect(screen.getByText('Control service (port 8883)')).toBeInTheDocument();
- });
- it('re-runs the diagnostic when "Run again" is clicked', async () => {
- const probe = setupDiagnostic(problemResult);
- const user = userEvent.setup();
- render(<VirtualPrinterDiagnosticModal vpId={3} vpName="Garage VP" onClose={() => {}} />);
- await screen.findByText(/Found problems that explain/);
- expect(probe.calls()).toBe(1);
- await user.click(screen.getByText('Run again'));
- await waitFor(() => expect(probe.calls()).toBe(2));
- });
- it('calls onClose when the Close button is clicked', async () => {
- setupDiagnostic({ ...problemResult, overall: 'ok' });
- const onClose = vi.fn();
- const user = userEvent.setup();
- render(<VirtualPrinterDiagnosticModal vpId={3} vpName="Garage VP" onClose={onClose} />);
- await screen.findByText(/set up correctly/);
- await user.click(screen.getByText('Close'));
- expect(onClose).toHaveBeenCalled();
- });
- });
|