import React from 'react';
import { vi, describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import { useConfig } from '@openmrs/esm-framework';
import { mockPastVisit } from '__mocks__';
import { useVisit } from './current-visit.resource';
import CurrentVisit from './current-visit-summary.component';
const useVisitMock = vi.mocked(useVisit);
vi.mocked(useConfig).mockReturnValue({ concepts: {} });
vi.mock('./current-visit.resource', () => ({
useVisit: vi.fn().mockReturnValue({
visit: {
visitType: { display: 'Visit Type' },
encounters: [],
},
error: null,
isLoading: false,
}),
}));
const patientUuid = mockPastVisit.data.results[0].patient.uuid;
const visitUuid = mockPastVisit.data.results[0].uuid;
describe('CurrentVisit', () => {
it('renders visit details correctly', async () => {
render();
expect(screen.queryByRole('progressbar')).not.toBeInTheDocument();
expect(screen.getByText('Visit Type')).toBeInTheDocument();
expect(screen.getByText('Scheduled for today')).toBeInTheDocument();
expect(screen.getByText('On time')).toBeInTheDocument();
});
it('renders a loading skeleton when fetching data', async () => {
useVisitMock.mockReturnValue({
visit: null,
error: null,
isLoading: true,
isValidating: false,
mutate: vi.fn(),
});
render();
expect(screen.getByRole('progressbar')).toBeInTheDocument();
});
it('renders a fallback when visit uuid is missing', async () => {
useVisitMock.mockReturnValue({
visit: null,
error: null,
isLoading: false,
isValidating: false,
mutate: vi.fn(),
});
render();
expect(useVisitMock).toHaveBeenCalledWith(undefined);
expect(screen.getByText('No active visit')).toBeInTheDocument();
});
it('renders a fallback when visit data is unavailable', async () => {
useVisitMock.mockReturnValue({
visit: null,
error: null,
isLoading: false,
isValidating: false,
mutate: vi.fn(),
});
render();
expect(screen.getByText('No active visit')).toBeInTheDocument();
});
});