import React from 'react';
import { vi, describe, it, expect, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/react';
import { type LayoutType, useSession, useConfig, useLayoutType } from '@openmrs/esm-framework';
import { useOrderBasket, useMutatePatientOrders } from '@openmrs/esm-patient-common-lib';
import { mockSessionDataResponse } from '__mocks__';
import { useOrderEncounterForSystemWithVisitDisabled, useProviders } from '../api/api';
import OrderBasket from './order-basket.component';
const mockUseSession = vi.mocked(useSession);
const mockUseConfig = vi.mocked(useConfig);
const mockUseLayoutType = vi.mocked(useLayoutType);
const mockUseOrderBasket = vi.mocked(useOrderBasket);
const mockUseMutatePatientOrders = vi.mocked(useMutatePatientOrders);
const mockUseOrderEncounterForSystemWithVisitDisabled = vi.mocked(useOrderEncounterForSystemWithVisitDisabled);
const mockUseProviders = vi.mocked(useProviders);
vi.mock('@openmrs/esm-patient-common-lib', async () => ({
...((await vi.importActual('@openmrs/esm-patient-common-lib')) as object),
useOrderBasket: vi.fn(),
useMutatePatientOrders: vi.fn(),
}));
vi.mock('../api/api', () => ({
useOrderEncounterForSystemWithVisitDisabled: vi.fn(),
useProviders: vi.fn(),
}));
const mockPatientUuid = 'patient-uuid-123';
const mockPatient = {
id: mockPatientUuid,
resourceType: 'Patient',
} as fhir.Patient;
const mockVisitContext = {
uuid: 'visit-uuid-123',
visitType: { display: 'Facility Visit' },
} as any;
const mockCloseWorkspace = vi.fn(() => Promise.resolve(true));
const mockMutateVisitContext = vi.fn();
const mockOrderBasketExtensionProps = {
patient: mockPatient,
launchDrugOrderForm: vi.fn(),
launchLabOrderForm: vi.fn(),
launchGeneralOrderForm: vi.fn(),
};
const defaultMockConfig = {
orderTypes: [],
orderEncounterType: 'order-encounter-type',
ordererProviderRoles: [],
orderLocationTagName: null,
};
describe('OrderBasket', () => {
beforeEach(() => {
vi.clearAllMocks();
mockUseLayoutType.mockReturnValue('desktop' as LayoutType);
mockUseConfig.mockReturnValue(defaultMockConfig);
mockUseOrderBasket.mockReturnValue({
orders: [],
clearOrders: vi.fn(),
setOrders: vi.fn(),
} as any);
mockUseMutatePatientOrders.mockReturnValue({
mutate: vi.fn(),
} as any);
mockUseOrderEncounterForSystemWithVisitDisabled.mockReturnValue({
visitRequired: false,
isLoading: false,
encounterUuid: null,
error: null,
mutate: vi.fn(),
} as any);
mockUseProviders.mockReturnValue({
providers: [],
isLoading: false,
error: null,
} as any);
});
it('should render without crashing when currentProvider is null', () => {
mockUseSession.mockReturnValue({ ...mockSessionDataResponse.data, currentProvider: null } as any);
render(
,
);
expect(screen.getByText('Order Basket')).toBeInTheDocument();
});
it('should render normally when currentProvider exists', () => {
mockUseSession.mockReturnValue(mockSessionDataResponse.data as any);
render(
,
);
expect(screen.getByText('Order Basket')).toBeInTheDocument();
});
});