import React from 'react';
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { showModal, useVisit } from '@openmrs/esm-framework';
import TransitionLatestQueueEntryButton from './transition-latest-queue-entry-button.component';
jest.mock('@openmrs/esm-framework', () => ({
showModal: jest.fn(),
useVisit: jest.fn(),
}));
describe('TransitionLatestQueueEntryButton', () => {
const patientUuid = 'patient-uuid';
const mockActiveVisit = { uuid: 'visit-uuid', display: 'Test Visit' };
beforeEach(() => {
jest.clearAllMocks();
(useVisit as jest.Mock).mockReturnValue({
activeVisit: mockActiveVisit,
isLoading: false,
});
});
it('should render a button when an active visit exists', () => {
render();
expect(screen.getByRole('button', { name: /transition/i })).toBeInTheDocument();
});
it('should launch the transition queue modal when clicked', async () => {
const user = userEvent.setup();
render();
await user.click(screen.getByRole('button', { name: /transition/i }));
expect(showModal).toHaveBeenCalledTimes(1);
expect(showModal).toHaveBeenCalledWith(
'transition-patient-to-latest-queue-modal',
expect.objectContaining({
closeModal: expect.any(Function),
activeVisit: mockActiveVisit,
}),
);
});
it('should show loading state when visit data is loading', () => {
(useVisit as jest.Mock).mockReturnValue({
activeVisit: null,
isLoading: true,
});
render();
expect(screen.queryByRole('button')).not.toBeInTheDocument();
});
it('should not render the button when no active visit exists', () => {
(useVisit as jest.Mock).mockReturnValue({
activeVisit: null,
isLoading: false,
});
render();
expect(screen.queryByRole('button', { name: /transition/i })).not.toBeInTheDocument();
});
});