UNPKG

@vidal-community/vidal-web-components

Version:

Vidal Web Components

169 lines 11.4 kB
import { Drug } from '../model/drug'; import { assert, expect } from '@open-wc/testing'; import { useDrugService } from './drug-service'; import { Package } from '../model/package'; import { Product } from '../model/product'; import { Vmp } from '../model/vmp'; import { PrescriptionLine } from '../model/prescription-line'; import { MultiComposableDrugData } from '../model/multi-composable-drug-data'; import { ActivePrinciple } from '../model/active-principle'; import { Unit } from '../model/unit'; import { ConversionRate } from '../model/conversion-rate'; import { EquivalentDrug } from '../model/equivalent-drug'; suite('drug-service', () => { suite('get drugs', () => { test('for UCDs', async () => { const drugs = await useDrugService().getDrugsByIds(['vidal://ucd/8070', 'vidal://ucd/2447'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult.xml')); assert.lengthOf(drugs, 2); assert.deepEqual(drugs, [ new Drug('vidal://ucd/8070', 'DOLIPRANE 1000MG CPR', 1), new Drug('vidal://ucd/2447', 'XANAX 0,25MG CPR', 2), ]); }); test('for packages with no UCD', async () => { const drugs = await useDrugService().getDrugsByIds(['vidal://package/790860'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult_packageWithoutUcd.xml')); assert.lengthOf(drugs, 1); assert.deepEqual(drugs, [ new Package('vidal://package/790860', 'ALVITA Ceinture lombaire standard à croisillon dorsal H21cm T1', undefined), ]); }); test('for packages with UCD', async () => { const drugs = await useDrugService().getDrugsByIds(['vidal://package/1732'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult_packageWithUnavailableUcd.xml')); assert.lengthOf(drugs, 1); assert.instanceOf(drugs[0], Package); const expectedPackage = new Package('vidal://package/1732', 'AMOXICILLINE PANPHARMA 2 g Pdr sol inj 10Fl', new Drug('vidal://ucd/10448', 'AMOXICILLINE PAN 2G INJ FL')); assert.deepEqual(drugs[0].ucd, expectedPackage.ucd); assert.equal(drugs[0].name, expectedPackage.name); assert.equal(drugs[0].uri, expectedPackage.uri); }); test('for products with UCDs', async () => { var _a; const drugs = await useDrugService().getDrugsByIds(['vidal://product/3660'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult_productWithTwoUcds.xml')); assert.lengthOf(drugs, 1); assert.instanceOf(drugs[0], Product); const expectedProduct = new Product([ new Drug('vidal://ucd/12662', 'MAGNESIUM C.10% LAV AB10ML'), new Drug('vidal://ucd/39058', 'MAGNESIUM C.10% LAV AP10ML'), ], 'vidal://product/3660', 'CHLORURE DE MAGNESIUM LAVOISIER 10 % (1 g/10 ml) sol inj en ampoule IV'); assert.sameDeepMembers((_a = drugs[0]) === null || _a === void 0 ? void 0 : _a.ucd, expectedProduct.ucd); assert.equal(drugs[0].name, expectedProduct.name); assert.equal(drugs[0].uri, expectedProduct.uri); }); test('for VMPs with UCDs', async () => { var _a; const drugs = await useDrugService().getDrugsByIds(['vidal://vmp/17800'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult_vmpWithUcd.xml')); assert.lengthOf(drugs, 1); assert.instanceOf(drugs[0], Vmp); const expectedVmp = new Vmp([new Drug('vidal://ucd/39228', 'DOVATO 50MG/300MG CPR', 1)], 'vidal://vmp/17800', 'DOLUTEGRAVIR (sodique) 50 mg + LAMIVUDINE 300 mg cp'); assert.sameDeepMembers((_a = drugs[0]) === null || _a === void 0 ? void 0 : _a.ucd, expectedVmp.ucd); assert.equal(drugs[0].name, expectedVmp.name); assert.equal(drugs[0].uri, expectedVmp.uri); }); test('for non supported drugs', async () => { const drugs = await useDrugService().getDrugsByIds(['vidal://unknown/42'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult_unknownType.xml')); assert.lengthOf(drugs, 0); }); }); suite('get units', () => { test('none', async () => { const unitsPerDrug = await useDrugService().getUnitsByIds(['vidal://ucd/8070'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult.xml')); expect(unitsPerDrug).not.empty; assert.isEmpty(unitsPerDrug.get('vidal://ucd/8070')); }); test('several', async () => { const unitsPerDrug = await useDrugService().getUnitsByIds(['vidal://ucd/8070'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsResult_withUnits.xml')); expect(unitsPerDrug).lengthOf(1); assert.deepInclude([...unitsPerDrug.get('vidal://ucd/8070')], new Unit('vidal://unit/35', 'g', [ new ConversionRate(new Unit('vidal://unit/35', 'g', []), new Unit('vidal://unit/57', 'mg', []), 1, 0.001), new ConversionRate(new Unit('vidal://unit/35', 'g', []), new Unit('vidal://unit/129', 'cp', []), 1, 1), ])); }); }); test('get indicators', async () => { const result = await useDrugService().getIndicatorsByIds(['vidal://ucd/8070', 'vidal://product/468'], () => fetch('../../components/vidal-substitution/test-resources/searchIdsAggregateIndicatorsProducts.xml')); assert.equal(result.size, 2); const indicatorsOfUcd8070 = result.get('vidal://ucd/8070'); assert.sameMembers(indicatorsOfUcd8070.indicators, [ '9', '26', '74', '27', '28', '30', ]); const indicatorsOfProduct468 = result.get('vidal://product/468'); assert.sameMembers(indicatorsOfProduct468.indicators, [ '16', '19', '73', '74', ]); assert.equal(indicatorsOfUcd8070 === null || indicatorsOfUcd8070 === void 0 ? void 0 : indicatorsOfUcd8070.relatedMoleculeHref, '/rest/api/product/19649/molecules'); assert.equal(indicatorsOfProduct468 === null || indicatorsOfProduct468 === void 0 ? void 0 : indicatorsOfProduct468.relatedMoleculeHref, '/rest/api/product/468/molecules'); }); suite('get active principles', () => { test('no active principles if no molecule href', async () => { var _a; const prescriptionLine = new PrescriptionLine(new Drug('vidal://ucd/14195', 'JASMINELLECONTINU 0,02/3MG C')); const result = await useDrugService().getActivePrinciplesForMonoItems(() => fetch('../../components/vidal-substitution/test-resources/searchIdsAggregateIndicatorsProducts.xml'), (_a = prescriptionLine.multiComposableDrugData) === null || _a === void 0 ? void 0 : _a.relatedMoleculeHref); assert.deepEqual(result, []); }); test('no active principles if multi item', async () => { const prescriptionLine = new PrescriptionLine(new Drug('vidal://ucd/14195', 'JASMINELLECONTINU 0,02/3MG C')); prescriptionLine.multiComposableDrugData = new MultiComposableDrugData([], '/rest/api/product/76315/molecules'); const result = await useDrugService().getActivePrinciplesForMonoItems(() => fetch('../../components/vidal-substitution/test-resources/productMoleculesResult.xml'), prescriptionLine.multiComposableDrugData.relatedMoleculeHref); assert.deepEqual(result, []); }); test('for mono item', async () => { const prescriptionLine = new PrescriptionLine(new Drug('vidal://ucd/14195', 'JASMINELLECONTINU 0,02/3MG C')); prescriptionLine.multiComposableDrugData = new MultiComposableDrugData([], '/rest/api/product/76315/molecules'); const result = await useDrugService().getActivePrinciplesForMonoItems(() => fetch('../../components/vidal-substitution/test-resources/ProductMoleculesForMonoItemHavingMultipleActivePrinciples.xml'), prescriptionLine.multiComposableDrugData.relatedMoleculeHref); const expectedAcvtivePrinciples = [ new ActivePrinciple(1417, 57, 0.02), new ActivePrinciple(21866, 57, 3.0), ]; assert.equal(result.length, 2); assert.sameDeepMembers(result, expectedAcvtivePrinciples); }); }); test('get ucd for molecules', async () => { const results = await useDrugService().getUcdsForMolecule(2649, () => fetch('../../components/vidal-substitution/test-resources/ucdsForMoleculesResults.xml')); assert.equal(results.length, 1); const equivalentDrug1 = new EquivalentDrug('vidal://ucd/7248', 'ACTIFED RHUME CPR', [], 1); assert.equal(results[0].uri, equivalentDrug1.uri); assert.equal(results[0].name, equivalentDrug1.name); assert.equal(results[0].divisibility, equivalentDrug1.divisibility); assert.deepEqual(results[0].units, equivalentDrug1.units); }); test('get indicators and routes for ucd', async () => { const multiComposableDrugDataResult = await useDrugService().getIndicatorsAndRoutes('vidal://ucd/14195', () => fetch('../../components/vidal-substitution/test-resources/ucdAggregateRoutesAndIndicatorsResult.xml')); const expectedMultiComposableDrugData = new MultiComposableDrugData(['32', '82', '71', '9', '26', '74', '28', '29', '30', '31'], '/rest/api/product/76315/molecules'); expectedMultiComposableDrugData.routeUris = ['vidal://route/38']; assert.sameDeepMembers(multiComposableDrugDataResult.indicators, expectedMultiComposableDrugData.indicators); assert.sameDeepMembers(multiComposableDrugDataResult.routeUris, expectedMultiComposableDrugData.routeUris); assert.equal(multiComposableDrugDataResult.relatedMoleculeHref, expectedMultiComposableDrugData.relatedMoleculeHref); }); test('get ucdv', async () => { const ucdvResult = await useDrugService().getUcdv('vidal://ucd/5895', (url) => ucdvMockDataSupplier(url)); const expectedUcdvActivePrinciples = [ new ActivePrinciple(5738, 57, 25), new ActivePrinciple(8243, 57, 100), ]; const expectedUcdvDispensingUnit = new Unit('vidal://unit/138', 'fl'); assert.sameDeepMembers(ucdvResult.activePrinciples, expectedUcdvActivePrinciples); assert.deepEqual(ucdvResult.dispensingUnit, expectedUcdvDispensingUnit); }); function ucdvMockDataSupplier(url) { if (url === '/rest/api/ucd/5895/packages') { return fetch('../../components/vidal-substitution/test-resources/ucd5895PackagesResult.xml'); } if (url === '/rest/api/package/9180?aggregate=ucdvs') { return fetch('../../components/vidal-substitution/test-resources/package9180UcdvsResult.xml'); } if (url === '/rest/api/ucdv/1150?aggregate=units&aggregate=molecules') { return fetch('../../components/vidal-substitution/test-resources/ucdv1150WithUnitsAndMoleculesResult.xml'); } return Promise.reject(new Response()); } }); //# sourceMappingURL=drug-service_test.js.map