import React from 'react';
import { vi, describe, expect, test, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/react';
import { useActiveTickets } from './useActiveTickets';
import { updateSelectedQueueLocationName, updateSelectedQueueLocationUuid } from '../store/store';
import QueueScreen from './queue-screen.component';
const mockUseActiveTickets = vi.mocked(useActiveTickets);
vi.mock('./useActiveTickets', () => ({
useActiveTickets: vi.fn(),
}));
vi.mock('../hooks/useQueues', () => ({
useQueues: vi.fn(() => ({ queues: [] })),
}));
vi.mock('../create-queue-entry/hooks/useQueueLocations', () => ({
useQueueLocations: vi.fn(() => ({ queueLocations: [], isLoading: false, error: undefined })),
}));
describe('QueueScreen component', () => {
beforeEach(() => {
updateSelectedQueueLocationName('Room A');
updateSelectedQueueLocationUuid('123');
});
test('renders loading skeleton when data is loading', () => {
mockUseActiveTickets.mockReturnValue({ isLoading: true, activeTickets: [], error: undefined, mutate: vi.fn() });
render();
expect(screen.getByTestId('queue-screen-skeleton')).toBeInTheDocument();
});
test('renders error message when there is an error fetching data', () => {
mockUseActiveTickets.mockReturnValue({
error: new Error('Error'),
isLoading: false,
activeTickets: [],
mutate: vi.fn(),
});
render();
expect(screen.getByText('Error State')).toBeInTheDocument();
});
test('renders empty state when there are no active tickets', () => {
mockUseActiveTickets.mockReturnValue({
activeTickets: [],
isLoading: false,
error: undefined,
mutate: vi.fn(),
});
render();
expect(screen.getByText('No active tickets to display')).toBeInTheDocument();
});
test('renders table with active tickets when data is loaded', () => {
mockUseActiveTickets.mockReturnValue({
activeTickets: [
{
room: 'Room A',
ticketNumber: '123',
status: 'Pending',
},
],
isLoading: false,
error: undefined,
mutate: vi.fn(),
});
render();
expect(screen.getByText('Room : Room A')).toBeInTheDocument();
expect(screen.getByText('Ticket number')).toBeInTheDocument();
expect(screen.getByText('123')).toBeInTheDocument();
});
});