import React from 'react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { type i18n } from 'i18next';
import { screen, render } from '@testing-library/react';
import { usePrimaryIdentifierCode } from '@openmrs/esm-react-utils';
import { age } from '@openmrs/esm-utils';
import { PatientBannerPatientInfo } from './patient-banner-patient-info.component';
window.i18next = { language: 'en' } as i18n;
const mockUsePrimaryIdentifierCode = vi.mocked(usePrimaryIdentifierCode);
const nameWithFormat = {
id: 'efdb246f-4142-4c12-a27a-9be60b9592e9',
family: 'Wilson',
given: ['John'],
text: 'Wilson, John',
};
const mockPatient = {
resourceType: 'Patient',
id: '8673ee4f-e2ab-4077-ba55-4980f408773e',
extension: [
{
url: 'http://fhir-es.transcendinsights.com/stu3/StructureDefinition/resource-date-created',
valueDateTime: '2017-01-18T09:42:40+00:00',
},
{
url: 'https://purl.org/elab/fhir/StructureDefinition/Creator-crew-version1',
valueString: 'daemon',
},
],
identifier: [
{
use: 'official',
type: {
coding: [{ code: '05a29f94-c0ed-11e2-94be-8c13b969e334' }],
text: 'OpenMRS ID',
},
value: '100GEJ',
},
{
use: 'official',
type: {
coding: [{ code: '4281ec43-388b-4c25-8bb2-deaff0867b2c' }],
text: 'National ID',
},
value: '123456789',
},
],
active: true,
name: [nameWithFormat],
gender: 'male',
birthDate: '1972-04-04',
deceasedBoolean: false,
address: [],
};
describe('PatientBannerPatientInfo', () => {
beforeEach(() => {
mockUsePrimaryIdentifierCode.mockReturnValue({
primaryIdentifierCode: '05a29f94-c0ed-11e2-94be-8c13b969e334',
isLoading: false,
error: undefined,
});
});
it("renders the patient's name, demographics, and identifier details in the banner", () => {
render();
expect(screen.getByText(/wilson, john/i)).toBeInTheDocument();
expect(screen.getByText(/male/i)).toBeInTheDocument();
expect(screen.getByText(new RegExp(age(mockPatient.birthDate)!, 'i'))).toBeInTheDocument();
expect(screen.getByText(/04-Apr-1972/i)).toBeInTheDocument();
expect(screen.getByText(/openmrs id/i)).toBeInTheDocument();
expect(screen.getByText(/100gej/i)).toBeInTheDocument();
expect(screen.getByText(/national id/i)).toBeInTheDocument();
expect(screen.getByText(/123456789/i)).toBeInTheDocument();
});
it('renders the correct gender icon based on patient gender', () => {
render();
expect(screen.getByText('', { selector: 'use[href="#omrs-icon-gender-male"]' })).toBeInTheDocument();
const patientWithUnknownGender = { ...mockPatient, gender: 'unknown' };
render();
expect(screen.getByText('', { selector: 'use[href="#omrs-icon-gender-unknown"]' })).toBeInTheDocument();
});
});