import { useMedicationCodeableConcept, useMedicationFormulations } from './medication.resource'; import { vi, describe, expect, test } from 'vitest'; import useSWR from 'swr'; import { openmrsFetch } from '@openmrs/esm-framework'; vi.mocked(openmrsFetch); vi.mock('swr'); describe('Medication Resource Tests', () => { test('useMedicationCodeableConcept should call useSWR with null reference if existing codeable concept uuid passed in', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: null })); const result = useMedicationCodeableConcept('123abc', 'Medication/123abc'); expect(useSWR).toHaveBeenCalledWith(null, openmrsFetch); expect(result.medicationCodeableConceptUuid).toBeNull(); }); test('useMedicationCodeableConcept should call useSWR with medication reference if no existing codeable concept uuid passed in', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: { code: { coding: [{ code: 'def678' }] } } }, })); const result = useMedicationCodeableConcept(null, 'Medication/123abc'); expect(useSWR).toHaveBeenCalledWith('/ws/fhir2/R4/Medication/123abc', openmrsFetch); expect(result.medicationCodeableConceptUuid).toBe('def678'); }); test('useMedicationFormulations should call useSWR with null reference if no concept uuid provided', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: null })); const result = useMedicationFormulations(null); expect(useSWR).toHaveBeenCalledWith(null, openmrsFetch); expect(result.medicationFormulations).toBeUndefined(); // TODO: is this really what we want? or rather null or empty }); test('useMedicationFormulations should call useSWR with with medications by concept endpoint and return formualations if concept defined', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: { resourceType: 'Bundle', id: '2ee923c2-6e97-464e-ae0b-797b24c3b3b5', meta: { lastUpdated: '2023-02-27T17:51:19.801-05:00', }, type: 'searchset', total: 2, link: [ { relation: 'self', url: 'https://ci.pih-emr.org/openmrs/ws/fhir2/R4/Medication?code=3cd27a8a-26fe-102b-80cb-0017a47871b2', }, ], entry: [ { fullUrl: 'https://ci.pih-emr.org/openmrs/ws/fhir2/R4/Medication/e47fa273-0c52-4f0f-b57b-34001a3e9677', resource: { resourceType: 'Medication', id: 'e47fa273-0c52-4f0f-b57b-34001a3e9677', meta: { lastUpdated: '2019-09-09T22:55:46.000-04:00', }, text: { status: 'generated', div: '
Id:e47fa273-0c52-4f0f-b57b-34001a3e9677
Code:Isoniazide
Status:ACTIVE
', }, extension: [ { url: 'http://fhir.openmrs.org/ext/medicine', extension: [ { url: 'http://fhir.openmrs.org/ext/medicine#drugName', valueString: 'Isoniazid (H), 100mg tablet', }, ], }, ], code: { coding: [ { code: '3cd27a8a-26fe-102b-80cb-0017a47871b2', display: 'Isoniazide', }, { system: 'https://openconceptlab.org/orgs/CIEL/sources/CIEL', code: '1679', display: 'Isoniazide', }, { system: 'http://snomed.info/sct', code: '81335000', display: 'Isoniazide', }, ], text: 'Isoniazide', }, status: 'active', }, }, { fullUrl: 'https://ci.pih-emr.org/openmrs/ws/fhir2/R4/Medication/849218ee-901c-46b3-80f9-7c808132893b', resource: { resourceType: 'Medication', id: '849218ee-901c-46b3-80f9-7c808132893b', meta: { lastUpdated: '2019-09-09T22:55:46.000-04:00', }, text: { status: 'generated', div: '
Id:849218ee-901c-46b3-80f9-7c808132893b
Code:Isoniazide
Status:ACTIVE
', }, extension: [ { url: 'http://fhir.openmrs.org/ext/medicine', extension: [ { url: 'http://fhir.openmrs.org/ext/medicine#drugName', valueString: 'Isoniazid (H), 300mg tablet', }, ], }, ], code: { coding: [ { code: '3cd27a8a-26fe-102b-80cb-0017a47871b2', display: 'Isoniazide', }, { system: 'https://openconceptlab.org/orgs/CIEL/sources/CIEL', code: '1679', display: 'Isoniazide', }, { system: 'http://snomed.info/sct', code: '81335000', display: 'Isoniazide', }, ], text: 'Isoniazide', }, status: 'active', }, }, ], }, }, })); const result = useMedicationFormulations('123abc'); expect(useSWR).toHaveBeenCalledWith('/ws/fhir2/R4/Medication?code=123abc', openmrsFetch); expect(result.medicationFormulations.length).toBe(2); expect(result.medicationFormulations[0].id).toBe('e47fa273-0c52-4f0f-b57b-34001a3e9677'); expect(result.medicationFormulations[0].resourceType).toBe('Medication'); expect(result.medicationFormulations[1].id).toBe('849218ee-901c-46b3-80f9-7c808132893b'); expect(result.medicationFormulations[1].resourceType).toBe('Medication'); }); });