@vidal-community/vidal-web-components
Version:
Vidal Web Components
169 lines • 11.4 kB
JavaScript
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