UNPKG

@vidal-community/vidal-web-components

Version:

Vidal Web Components

635 lines 46.5 kB
import { assert, elementUpdated, fixture } from '@open-wc/testing'; import { Drug } from '../model/drug'; import { EquivalentDrug } from '../model/equivalent-drug'; import { Unit } from '../model/unit'; import { ConversionRate } from '../model/conversion-rate'; import { VidalEquivalentForm } from './vidal-equivalent-form'; import { DrugWithDose } from '../model/drug-with-dose'; import { Prescribable } from '../model/prescribable'; import { EquivalentDrugWithDose } from '../model/equivalentDrugWithDose'; import { Dose } from '../model/dose'; suite('vidal-equivalent-form component', () => { test('is defined', () => { const el = document.createElement('vidal-equivalent-form'); assert.instanceOf(el, VidalEquivalentForm); }); suite('show equivalents with dosage', () => { const ucdName = 'DOLIPRANE 1000MG CPR'; test('show level 1 dosage direct conversion', async () => { var _a, _b, _c, _d, _e, _f, _g, _h; const el = document.createElement('vidal-equivalent-form'); const product = new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'); const gram = new Unit('vidal://unit/35', 'g'); const mg = new Unit('vidal://unit/57', 'mg'); gram.conversionRates = [new ConversionRate(gram, mg, 1000, 1)]; mg.conversionRates = [new ConversionRate(mg, gram, 1, 1000)]; const equivalentDrug = new EquivalentDrug('vidal://ucd/2080', ucdName, [ gram, mg, ]); el.prescriptionLine = createPrescriptionLine({ drug: product, dose: 42, unit: gram, }); el.equivalentUcds = [equivalentDrug]; const renderedElement = await fixture(el); assert.include((_b = (_a = renderedElement.renderRoot .querySelector('div[data-test="prescription-vidal-product-19649"]')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), '42 g'); assert.include((_d = (_c = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim(), equivalentDrug.name); assert.include((_f = (_e = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]')) === null || _e === void 0 ? void 0 : _e.textContent) === null || _f === void 0 ? void 0 : _f.trim(), '42 g'); assert.include((_h = (_g = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]')) === null || _g === void 0 ? void 0 : _g.textContent) === null || _h === void 0 ? void 0 : _h.trim(), '42000 mg'); }); test("show level 1 dosage conversion using prescription's conversion rates", async () => { var _a, _b, _c, _d, _e, _f, _g, _h; const el = document.createElement('vidal-equivalent-form'); const product = new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'); const gram = new Unit('vidal://unit/35', 'g'); const mg = new Unit('vidal://unit/57', 'mg'); gram.conversionRates = [new ConversionRate(gram, mg, 1000, 1)]; mg.conversionRates = [new ConversionRate(mg, gram, 1, 1000)]; const equivalentDrug = new EquivalentDrug('vidal://ucd/2080', ucdName, [ mg, ]); el.prescriptionLine = createPrescriptionLine({ drug: product, dose: 42, unit: gram, }); el.equivalentUcds = [equivalentDrug]; const renderedElement = await fixture(el); assert.include((_b = (_a = renderedElement.renderRoot .querySelector('div[data-test="prescription-vidal-product-19649"]')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), '42 g'); assert.include((_d = (_c = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim(), equivalentDrug.name); assert.notInclude((_f = (_e = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]')) === null || _e === void 0 ? void 0 : _e.textContent) === null || _f === void 0 ? void 0 : _f.trim(), '42 g'); assert.include((_h = (_g = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]')) === null || _g === void 0 ? void 0 : _g.textContent) === null || _h === void 0 ? void 0 : _h.trim(), '42000 mg'); }); suite('Filter', () => { test('equivalents check/uncheck for a non-divisible UCD', async () => { var _a, _b, _c, _d, _e, _f; const el = document.createElement('vidal-equivalent-form'); const mg = new Unit('vidal://unit/57', 'mg'); mg.isDispensingUnit = true; const equivalentDrug = new EquivalentDrug('vidal://ucd/2080', ucdName, [ mg, ]); equivalentDrug.divisibility = 1; el.prescriptionLine = createPrescriptionLine({ drug: new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'), dose: 1.7, unit: mg, }); el.equivalentUcds = [equivalentDrug]; const renderedElement = await fixture(el); assert.include(renderedElement.renderRoot .querySelector('div[data-test="substitution-vidal-product-19649-level-0"]') .textContent.trim(), 'Aucune UCD au livret ne présente une sécabilité compatible'); const checkbox = renderedElement.renderRoot.querySelector('input[name="displayEquivalentsWithImpossibleDoses"]'); assert.exists(checkbox, 'Cannot find checkbox'); // Check checkbox in order to show hidden equivalent with impossible dosage checkbox.checked = true; checkbox.dispatchEvent(new Event('change')); await elementUpdated(renderedElement); assert.include((_b = (_a = renderedElement.renderRoot .querySelector('div[data-test="substitution-vidal-product-19649-level-1"]')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), 'Niv. 1'); assert.include((_d = (_c = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim(), ucdName); assert.include((_f = (_e = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]')) === null || _e === void 0 ? void 0 : _e.textContent) === null || _f === void 0 ? void 0 : _f.trim(), '1.7 mg'); // Uncheck checkbox in order to hide equivalent with impossible dosage checkbox.checked = false; checkbox.dispatchEvent(new Event('change')); await elementUpdated(renderedElement); assert.include(renderedElement.renderRoot .querySelector('div[data-test="substitution-vidal-product-19649-level-0"]') .textContent.trim(), 'Aucune UCD au livret ne présente une sécabilité compatible'); }); test('no filter if prescription has no dose', async () => { var _a, _b; const el = document.createElement('vidal-equivalent-form'); const mg = new Unit('vidal://unit/57', 'mg'); mg.isDispensingUnit = true; const equivalentDrug = new EquivalentDrug('vidal://ucd/2080', ucdName, [ mg, ]); equivalentDrug.divisibility = 1; el.prescriptionLine = createPrescriptionLine({ drug: new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'), // no dose! 👀 }); el.equivalentUcds = [equivalentDrug]; const renderedElement = await fixture(el); const checkbox = renderedElement.renderRoot.querySelector('input[name="displayEquivalentsWithImpossibleDoses"]'); assert.notExists(checkbox, 'Checkbox should not exist!'); assert.include((_b = (_a = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), ucdName); assert.notExists(renderedElement.renderRoot.querySelector('.equivalent-drug-dose')); }); test('no filter if prescription has an invalid dose', async () => { var _a, _b; const el = document.createElement('vidal-equivalent-form'); const mg = new Unit('vidal://unit/57', 'mg'); mg.isDispensingUnit = true; const equivalentDrug = new EquivalentDrug('vidal://ucd/2080', ucdName, [ mg, ]); equivalentDrug.divisibility = 1; el.prescriptionLine = createPrescriptionLine({ drug: new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'), dose: 42, error: true, // Invalid dose }); el.equivalentUcds = [equivalentDrug]; const renderedElement = await fixture(el); const checkbox = renderedElement.renderRoot.querySelector('input[name="displayEquivalentsWithImpossibleDoses"]'); assert.notExists(checkbox, 'Checkbox should not exist!'); assert.include((_b = (_a = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), ucdName); assert.notExists(renderedElement.renderRoot.querySelector('.equivalent-drug-dose')); }); suite('Divisibility > 1', () => { const params = [ { dose: 1.7, possible: false }, { dose: 2, possible: true }, // {dose: 2.5, possible: true}, { dose: 2.51, possible: false }, ]; params.forEach((param) => { test(`filtering dose for bi-secable with dose = ${param.dose} and possible = ${param.possible}`, async () => { var _a, _b, _c, _d; const el = document.createElement('vidal-equivalent-form'); const mg = new Unit('vidal://unit/57', 'mg'); mg.isDispensingUnit = true; const equivalentDrug = new EquivalentDrug('vidal://ucd/2080', ucdName, [mg]); equivalentDrug.divisibility = 2; el.prescriptionLine = createPrescriptionLine({ drug: new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'), dose: param.dose, unit: mg, }); el.equivalentUcds = [equivalentDrug]; const renderedElement = await fixture(el); if (param.possible) { assert.include((_b = (_a = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), ucdName); assert.include((_d = (_c = renderedElement.renderRoot .querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]')) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim(), param.dose + ' mg'); assert.notInclude(renderedElement.renderRoot .querySelector('div[data-test="substitution-vidal-product-19649-level-1"]') .textContent.trim(), 'Aucune UCD au livret ne présente une sécabilité compatible'); } else { assert.notExists(renderedElement.renderRoot.querySelector('tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]>td')); assert.notExists(renderedElement.renderRoot.querySelector('.equivalent-drug-dose')); assert.include(renderedElement.renderRoot .querySelector('div[data-test="substitution-vidal-product-19649-level-0"]') .textContent.trim(), 'Aucune UCD au livret ne présente une sécabilité compatible'); const checkbox = renderedElement.renderRoot.querySelector('input[name="displayEquivalentsWithImpossibleDoses"]'); assert.exists(checkbox, 'Cannot find checkbox'); } }); }); }); }); }); suite('should add test-data attribute for end-to-end tests', () => { test('if one-to-one level 1 substitution', async () => { const el = document.createElement('vidal-equivalent-form'); const product = new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'); const equivalentDrugs = new EquivalentDrug('vidal://ucd/2080', 'DOLIPRANE 500MG CPR', []); el.prescriptionLine = createPrescriptionLine({ drug: product }); el.equivalentUcds = [equivalentDrugs]; const renderedElement = await fixture(el); assert.exists(renderedElement.renderRoot.querySelector("div[data-test='substitution-vidal-product-19649-level-1']")); }); test('if one-to-many level 2 substitution', async () => { const el = document.createElement('vidal-equivalent-form'); const product = new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'); product.prescribable = new Prescribable('vidal://prescribable/42'); const equivalentDrugs = [ new EquivalentDrug('vidal://ucd/2080', 'DOLIPRANE 500MG CPR', []), new EquivalentDrug('vidal://ucd/2080', 'DOLIPRANE 1000MG CPR', []), ]; el.prescriptionLine = createPrescriptionLine({ drug: product }); el.equivalentUcds = equivalentDrugs; const renderedElement = await fixture(el); assert.exists(renderedElement.renderRoot.querySelector("div[data-test='substitution-vidal-product-19649-level-2']")); }); }); suite('should display array of combinations', () => { test('two combinations with two dispensing units', async () => { const el = document.createElement('vidal-equivalent-form'); const product = new Drug('vidal://product/19649', 'DOLIPRANE 1000 mg cp'); const gram = new Unit('vidal://unit/35', 'g'); const mg = new Unit('vidal://unit/57', 'mg'); const cp = new Unit('vidal://unit/129', 'cp'); const gel = new Unit('vidal://unit/139', 'gel'); gram.conversionRates = [ new ConversionRate(gram, cp, 2, 1), new ConversionRate(gram, gel, 2, 1), ]; mg.conversionRates = [new ConversionRate(gram, mg, 1, 1000)]; cp.conversionRates = [new ConversionRate(cp, gram, 1, 2)]; cp.isDispensingUnit = true; gel.conversionRates = [new ConversionRate(gel, gram, 1, 2)]; gel.isDispensingUnit = true; const equivalentDrugCp = new EquivalentDrug('vidal://ucd/2080', 'DOLIPRANE 500MG CPR', [cp, mg, gram]); const equivalentDrugCp2 = new EquivalentDrug('vidal://ucd/2371', 'EFFERALGANMED 500MG CPR', [cp, mg, gram]); const equivalentDrugGel = new EquivalentDrug('vidal://ucd/4329', 'GELUPRANE 500MG GEL', [gel, mg, gram]); el.prescriptionLine = createPrescriptionLine({ drug: product, dose: 1, unit: gram, dispensingUnit: cp, }); el.equivalentUcds = [ equivalentDrugCp, equivalentDrugGel, equivalentDrugCp2, ]; const renderedElement = await fixture(el); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-0"]'); const combination1 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-1"]'); const combination2 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-2"]'); const combination3 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-3"]'); const combination4 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-4"]'); assert.exists(combination0(), 'Cannot find combination table'); assert.exists(renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-0"] > tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]'), 'Cannot find equivalent ucd'); assert.notExists(combination1(), 'Cannot find combination table'); assert.notExists(combination2(), 'Cannot find combination table'); assert.notExists(combination3(), 'Cannot find combination table'); assert.notExists(combination4(), 'Cannot find combination table'); renderedElement.switchDisplay(); await elementUpdated(renderedElement); assert.exists(combination0(), 'Cannot find combination table'); assert.exists(combination1(), 'Cannot find combination table'); assert.exists(renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-0"] > tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]'), 'Cannot find equivalent ucd'); assert.exists(combination2(), 'Cannot find combination table'); assert.exists(renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-1"] > tr[data-test="substitution-vidal-product-19649-vidal-ucd-2371"]'), 'Cannot find equivalent ucd'); assert.exists(renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-2"] > tr[data-test="substitution-vidal-product-19649-vidal-ucd-4329"]'), 'Cannot find equivalent ucd'); assert.exists(renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-3"] > tr[data-test="substitution-vidal-product-19649-vidal-ucd-2080"]'), 'Cannot find equivalent ucd'); assert.exists(renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-19649-combination-3"] > tr[data-test="substitution-vidal-product-19649-vidal-ucd-2371"]'), 'Cannot find equivalent ucd'); assert.notExists(combination4(), 'Cannot find combination table'); }); test('combinations for a divisible drugs', async () => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z; const el = document.createElement('vidal-equivalent-form'); const cp = new Unit('vidal://unit/129', 'cp'); const mg = new Unit('vidal://unit/57', 'mg'); cp.isDispensingUnit = true; cp.conversionRates = [new ConversionRate(mg, cp, 1, 20)]; mg.conversionRates = [new ConversionRate(mg, cp, 1, 20)]; const cortancyl = new EquivalentDrug('vidal://ucd/3513', 'CORTANCYL 20MG CPR', [cp, mg], 2); const prednisone = new EquivalentDrug('vidal://ucd/9185', 'PREDNISONE EG 20MG CPR', [cp, mg], 2); const prescribedPrednisone = new Drug('vidal://product/66190', 'PREDNISONE ARROW 20 mg cp séc'); el.prescriptionLine = createPrescriptionLine({ drug: prescribedPrednisone, dose: 1.5, unit: cp, dispensingUnit: cp, }); el.equivalentUcds = [cortancyl, prednisone]; el.switchDisplay(); const renderedElement = await fixture(el); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-66190-combination-0"]'); const combination1 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-66190-combination-1"]'); const combination2 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-66190-combination-2"]'); const combination3 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-66190-combination-3"]'); assert.exists(combination0(), 'Cannot find combination table'); assert.include((_b = (_a = combination0()) === null || _a === void 0 ? void 0 : _a.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-3513"]')) === null || _b === void 0 ? void 0 : _b.textContent, '1.5 cp'); assert.include((_d = (_c = combination0()) === null || _c === void 0 ? void 0 : _c.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-3513"]')) === null || _d === void 0 ? void 0 : _d.textContent, '30 mg'); assert.exists(combination1(), 'Cannot find combination table'); assert.include((_f = (_e = combination1()) === null || _e === void 0 ? void 0 : _e.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-9185"]')) === null || _f === void 0 ? void 0 : _f.textContent, '1.5 cp'); assert.include((_h = (_g = combination1()) === null || _g === void 0 ? void 0 : _g.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-9185"]')) === null || _h === void 0 ? void 0 : _h.textContent, '30 mg'); assert.exists(combination2(), 'Cannot find combination table'); assert.include((_k = (_j = combination2()) === null || _j === void 0 ? void 0 : _j.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-3513"]')) === null || _k === void 0 ? void 0 : _k.textContent, '1 cp'); assert.include((_m = (_l = combination2()) === null || _l === void 0 ? void 0 : _l.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-3513"]')) === null || _m === void 0 ? void 0 : _m.textContent, '20 mg'); assert.include((_p = (_o = combination2()) === null || _o === void 0 ? void 0 : _o.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-9185"]')) === null || _p === void 0 ? void 0 : _p.textContent, '0.5 cp'); assert.include((_r = (_q = combination2()) === null || _q === void 0 ? void 0 : _q.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-9185"]')) === null || _r === void 0 ? void 0 : _r.textContent, '10 mg'); assert.exists(combination3(), 'Cannot find combination table'); assert.include((_t = (_s = combination3()) === null || _s === void 0 ? void 0 : _s.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-3513"]')) === null || _t === void 0 ? void 0 : _t.textContent, '0.5 cp'); assert.include((_v = (_u = combination3()) === null || _u === void 0 ? void 0 : _u.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-3513"]')) === null || _v === void 0 ? void 0 : _v.textContent, '10 mg'); assert.include((_x = (_w = combination3()) === null || _w === void 0 ? void 0 : _w.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-9185"]')) === null || _x === void 0 ? void 0 : _x.textContent, '1 cp'); assert.include((_z = (_y = combination3()) === null || _y === void 0 ? void 0 : _y.querySelector('tr[data-test="substitution-vidal-product-66190-vidal-ucd-9185"]')) === null || _z === void 0 ? void 0 : _z.textContent, '20 mg'); }); test('sort equivalent combinations by number of take, number of drug and by number of divided doses)', async () => { const createCombination = (dose) => new EquivalentDrugWithDose(new EquivalentDrug('le uri', 'le name', [], 0), dose); const inputEquivalentDrugCombinations = []; const singleDose = { 'vidal://ucd/11826': createCombination(1) }; const fiveDoses = { 'vidal://ucd/123': createCombination(5) }; const combinationWithOneDividedDose = { 'vidal://ucd/11826': createCombination(0.75), 'vidal://ucd/15384': createCombination(1), }; const combinationWithTwoDividedDoses = { 'vidal://ucd/11826': createCombination(0.75), 'vidal://ucd/1362': createCombination(0.25), }; inputEquivalentDrugCombinations.push(combinationWithTwoDividedDoses, singleDose, fiveDoses, combinationWithOneDividedDose); const result = new VidalEquivalentForm().sortEquivalentDrugCombinations(inputEquivalentDrugCombinations); assert.sameDeepOrderedMembers(result, [ singleDose, combinationWithOneDividedDose, combinationWithTwoDividedDoses, fiveDoses, ]); }); test('sort equivalent combinations with all doses by dose', async () => { const dispensingUnit = new Unit('vidal://unit/57', 'mg'); dispensingUnit.isDispensingUnit = true; const dose10 = new Dose(10, dispensingUnit); const dose20 = new Dose(20, dispensingUnit); const dose2 = new Dose(2, dispensingUnit); const equivalentDrug1 = new EquivalentDrug('uri1', 'Drug 1', [ dispensingUnit, ]); const equivalentDrug2 = new EquivalentDrug('uri2', 'Drug 2', [ dispensingUnit, ]); const equivalentDrug3 = new EquivalentDrug('uri3', 'Drug 3', [ dispensingUnit, ]); const combinationDose10 = { combinationDose10: { dose: [dose10], equivalentDrug: equivalentDrug1, }, }; const combinationDose20 = { combinationDose20: { dose: [dose20], equivalentDrug: equivalentDrug2, }, }; const combinationDose2 = { combinationDose2: { dose: [dose2], equivalentDrug: equivalentDrug3, }, }; const drugCombinationsWithAllDoses = [ combinationDose10, combinationDose2, combinationDose20, ]; const result = new VidalEquivalentForm().sortCombinationsWithAllDosesByAscendingDose(drugCombinationsWithAllDoses); assert.sameDeepOrderedMembers(result, [ combinationDose2, combinationDose10, combinationDose20, ]); }); test('check selected equivalent combinations unit with dispensing unit selected by default', async () => { var _a, _b; const el = document.createElement('vidal-equivalent-form'); const cp = new Unit('vidal://unit/129', 'cp'); const mg = new Unit('vidal://unit/57', 'mg'); cp.isDispensingUnit = true; cp.conversionRates = [new ConversionRate(mg, cp, 1, 20)]; mg.conversionRates = [new ConversionRate(mg, cp, 1, 20)]; const cortancyl = new EquivalentDrug('vidal://ucd/3513', 'CORTANCYL 20MG CPR', [cp, mg]); const prescribedPrednisone = new Drug('vidal://product/66190', 'PREDNISONE ARROW 20 mg cp séc'); el.prescriptionLine = createPrescriptionLine({ drug: prescribedPrednisone, dose: 1, unit: cp, dispensingUnit: cp, }); el.equivalentUcds = [cortancyl]; const renderedElement = await fixture(el); const drugWithCpDoses = [ new DrugWithDose('vidal://ucd/3513', 'vidal://unit/129', 1), ]; assert.equal(renderedElement.selectedEquivalentCombinationForm.length, 1); assert.deepEqual(renderedElement.selectedEquivalentCombinationForm, drugWithCpDoses); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-66190-combination-0"]'); const cpInput = (_a = combination0()) === null || _a === void 0 ? void 0 : _a.querySelector('input[id="vidal-product-66190-vidal-unit-129"]'); assert.isTrue(cpInput.checked); const mgInput = (_b = combination0()) === null || _b === void 0 ? void 0 : _b.querySelector('input[id="vidal-product-66190-vidal-unit-57"]'); mgInput.checked = true; mgInput.dispatchEvent(new Event('change')); await elementUpdated(renderedElement); assert.isTrue(mgInput.checked); const drugWithMgDoses = [ new DrugWithDose('vidal://ucd/3513', 'vidal://unit/57', 20), ]; assert.deepEqual(renderedElement.selectedEquivalentCombinationForm, drugWithMgDoses); }); test('check selected equivalent combinations unit when there is no conversion rate between the dispensing unit and the other unit', async () => { var _a; const el = document.createElement('vidal-equivalent-form'); const cp = new Unit('vidal://unit/129', 'cp'); const appl = new Unit('vidal://unit/138', 'appl'); cp.isDispensingUnit = true; const cortancyl = new EquivalentDrug('vidal://ucd/3513', 'CORTANCYL 20MG CPR', [cp, appl]); const prescribedPrednisone = new Drug('vidal://product/66190', 'PREDNISONE ARROW 20 mg cp séc'); el.prescriptionLine = createPrescriptionLine({ drug: prescribedPrednisone, dose: 1, unit: appl, }); el.equivalentUcds = [cortancyl]; const renderedElement = await fixture(el); const drugWithApplDoses = [ new DrugWithDose('vidal://ucd/3513', 'vidal://unit/138', 1), ]; assert.equal(renderedElement.selectedEquivalentCombinationForm.length, 1); assert.deepEqual(renderedElement.selectedEquivalentCombinationForm, drugWithApplDoses); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-product-66190-combination-0"]'); const cpInput = (_a = combination0()) === null || _a === void 0 ? void 0 : _a.querySelector('input[id="vidal-product-66190-vidal-unit-138"]'); assert.isTrue(cpInput.checked); }); test('for which there is no single combination possible for each individual UCD', async () => { var _a, _b, _c, _d, _e, _f, _g, _h; const el = document.createElement('vidal-equivalent-form'); const cpPrescribed = new Unit('vidal://unit/129', 'cp'); const mgPrescribed = new Unit('vidal://unit/57', 'mg'); cpPrescribed.isDispensingUnit = true; cpPrescribed.conversionRates = [ new ConversionRate(mgPrescribed, cpPrescribed, 1, 5), ]; mgPrescribed.conversionRates = [ new ConversionRate(mgPrescribed, cpPrescribed, 1, 5), ]; const prescribable = new Prescribable('1756'); prescribable.refUnit = mgPrescribed; prescribable.ucds = [ new Drug('vidal://ucd/20492', 'OLANZAPINE ACC 10MG CPR'), new Drug('vidal://ucd/20492', 'OLANZAPINE ACC 10MG CPR'), ]; const prescribedOlanzapine = new Drug('vidal://ucd/20455', 'OLANZAPINE ACC 5MG CPR'); prescribedOlanzapine.prescribable = prescribable; el.prescriptionLine = createPrescriptionLine({ drug: prescribedOlanzapine, dose: 17.5, unit: mgPrescribed, dispensingUnit: cpPrescribed, }); const cpOlanzapine10mg = new Unit('vidal://unit/129', 'cp'); const mgOlanzapine10mg = new Unit('vidal://unit/57', 'mg'); cpOlanzapine10mg.conversionRates = [ new ConversionRate(mgOlanzapine10mg, cpOlanzapine10mg, 1, 10), ]; mgOlanzapine10mg.conversionRates = [ new ConversionRate(mgOlanzapine10mg, cpOlanzapine10mg, 1, 10), ]; cpOlanzapine10mg.isDispensingUnit = true; const equivalentOlanzapine10mg = new EquivalentDrug('vidal://ucd/20492', 'OLANZAPINE ACC 10MG CPR', [cpOlanzapine10mg, mgOlanzapine10mg], 1); const cpOlanzapine7_5mg = new Unit('vidal://unit/129', 'cp'); const mgOlanzapine7_5mg = new Unit('vidal://unit/57', 'mg'); cpOlanzapine7_5mg.conversionRates = [ new ConversionRate(mgOlanzapine7_5mg, cpOlanzapine7_5mg, 1, 7.5), ]; mgOlanzapine7_5mg.conversionRates = [ new ConversionRate(mgOlanzapine7_5mg, cpOlanzapine7_5mg, 1, 7.5), ]; cpOlanzapine7_5mg.isDispensingUnit = true; const equivalentOlanzapine7_5mg = new EquivalentDrug('vidal://ucd/20622', 'OLANZAPINE ACC 7.5MG CPR', [cpOlanzapine7_5mg, mgOlanzapine7_5mg], 1); el.equivalentUcds = [equivalentOlanzapine10mg, equivalentOlanzapine7_5mg]; el.switchDisplay(); const renderedElement = await fixture(el); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-ucd-20455-combination-0"]'); assert.exists(combination0(), 'Cannot find combination table'); assert.include((_b = (_a = combination0()) === null || _a === void 0 ? void 0 : _a.querySelector('tr[data-test="substitution-vidal-ucd-20455-vidal-ucd-20492"]')) === null || _b === void 0 ? void 0 : _b.textContent, '1 cp'); assert.include((_d = (_c = combination0()) === null || _c === void 0 ? void 0 : _c.querySelector('tr[data-test="substitution-vidal-ucd-20455-vidal-ucd-20492"]')) === null || _d === void 0 ? void 0 : _d.textContent, '10 mg'); assert.include((_f = (_e = combination0()) === null || _e === void 0 ? void 0 : _e.querySelector('tr[data-test="substitution-vidal-ucd-20455-vidal-ucd-20622"]')) === null || _f === void 0 ? void 0 : _f.textContent, '1 cp'); assert.include((_h = (_g = combination0()) === null || _g === void 0 ? void 0 : _g.querySelector('tr[data-test="substitution-vidal-ucd-20455-vidal-ucd-20622"]')) === null || _h === void 0 ? void 0 : _h.textContent, '7.5 mg'); }); test('display combinations for conversions with infinite decimal number', async () => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; const el = document.createElement('vidal-equivalent-form'); const mgPrescribed = new Unit('vidal://unit/57', 'mg'); const cpPrescribed = new Unit('vidal://unit/129', 'cp'); const prescribedBisoce = new Drug('vidal://ucd/15810', 'BISOCE 3,75MG CPR'); const prescribable = new Prescribable('2226'); prescribable.refUnit = mgPrescribed; prescribable.ucds = [ new Drug('vidal://ucd/15802', 'BISOCE 2,5MG CPR'), new Drug('vidal://ucd/15812', 'BISOCE 1,25MG CPR'), ]; prescribedBisoce.prescribable = prescribable; cpPrescribed.conversionRates = [ new ConversionRate(mgPrescribed, cpPrescribed, 1, 3.75), ]; mgPrescribed.conversionRates = [ new ConversionRate(mgPrescribed, cpPrescribed, 1, 3.75), ]; cpPrescribed.isDispensingUnit = true; el.prescriptionLine = createPrescriptionLine({ drug: prescribedBisoce, dose: 1, unit: cpPrescribed, dispensingUnit: cpPrescribed, }); const cp2 = new Unit('vidal://unit/129', 'cp'); const mg2 = new Unit('vidal://unit/57', 'mg'); cp2.isDispensingUnit = true; cp2.conversionRates = [new ConversionRate(mg2, cp2, 1, 2.5)]; mg2.conversionRates = [new ConversionRate(mg2, cp2, 1, 2.5)]; const bisoce2 = new EquivalentDrug('vidal://ucd/15802', 'BISOCE 2,5MG CPR', [cp2, mg2], 2); const cp1 = new Unit('vidal://unit/129', 'cp'); const mg1 = new Unit('vidal://unit/57', 'mg'); cp1.isDispensingUnit = true; cp1.conversionRates = [new ConversionRate(mg1, cp1, 1, 1.25)]; mg1.conversionRates = [new ConversionRate(mg1, cp1, 1, 1.25)]; const bisoce1 = new EquivalentDrug('vidal://ucd/15812', 'BISOCE 1,25MG CPR', [cp1, mg1], 1); el.equivalentUcds = [bisoce2, bisoce1]; el.switchDisplay(); const renderedElement = await fixture(el); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-ucd-15810-combination-0"]'); const combination1 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-ucd-15810-combination-1"]'); const combination2 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-ucd-15810-combination-2"]'); const combination3 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-ucd-15810-combination-3"]'); assert.exists(combination0(), 'Cannot find combination table'); assert.include((_b = (_a = combination0()) === null || _a === void 0 ? void 0 : _a.querySelector('tr[data-test="substitution-vidal-ucd-15810-vidal-ucd-15802"]')) === null || _b === void 0 ? void 0 : _b.textContent, '1.5 cp'); assert.exists(combination1(), 'Cannot find combination table'); assert.include((_d = (_c = combination1()) === null || _c === void 0 ? void 0 : _c.querySelector('tr[data-test="substitution-vidal-ucd-15810-vidal-ucd-15802"]')) === null || _d === void 0 ? void 0 : _d.textContent, '1 cp'); assert.include((_f = (_e = combination1()) === null || _e === void 0 ? void 0 : _e.querySelector('tr[data-test="substitution-vidal-ucd-15810-vidal-ucd-15812"]')) === null || _f === void 0 ? void 0 : _f.textContent, '1 cp'); assert.exists(combination2(), 'Cannot find combination table'); assert.include((_h = (_g = combination2()) === null || _g === void 0 ? void 0 : _g.querySelector('tr[data-test="substitution-vidal-ucd-15810-vidal-ucd-15812"]')) === null || _h === void 0 ? void 0 : _h.textContent, '3 cp'); assert.exists(combination3(), 'Cannot find combination table'); assert.include((_k = (_j = combination3()) === null || _j === void 0 ? void 0 : _j.querySelector('tr[data-test="substitution-vidal-ucd-15810-vidal-ucd-15802"]')) === null || _k === void 0 ? void 0 : _k.textContent, '0.5 cp'); assert.include((_m = (_l = combination3()) === null || _l === void 0 ? void 0 : _l.querySelector('tr[data-test="substitution-vidal-ucd-15810-vidal-ucd-15812"]')) === null || _m === void 0 ? void 0 : _m.textContent, '2 cp'); }); test('display combinations for UCD with no divisibility data', async () => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; const el = document.createElement('vidal-equivalent-form'); const uiPrescribed = new Unit('vidal://unit/105', 'UI'); const mlPrescribed = new Unit('vidal://unit/60', 'ml'); const flPrescribed = new Unit('vidal://unit/138', 'fl'); const prescribedNonacog = new Drug('vidal://vmp/13356', 'NONACOG GAMMA 2 000 UI/5 ml pdre/solv p sol inj'); const prescribable = new Prescribable('36687'); prescribable.refUnit = uiPrescribed; prescribable.ucds = [ new Drug('vidal://ucd/27745', 'RIXUBIS 1000UI INJ FL+FL5ML'), new Drug('vidal://ucd/27744', 'RIXUBIS 500UI INJ FL+FL5ML'), ]; prescribedNonacog.prescribable = prescribable; flPrescribed.conversionRates = [ new ConversionRate(uiPrescribed, mlPrescribed, 1, 400), new ConversionRate(uiPrescribed, flPrescribed, 1, 2000), ]; flPrescribed.isDispensingUnit = true; el.prescriptionLine = createPrescriptionLine({ drug: prescribedNonacog, dose: 1.25, unit: flPrescribed, dispensingUnit: flPrescribed, }); const conversionRate500 = [ new ConversionRate(uiPrescribed, mlPrescribed, 1, 100), new ConversionRate(uiPrescribed, flPrescribed, 1, 500), ]; const ui500 = new Unit('vidal://unit/105', 'UI'); ui500.conversionRates = conversionRate500; const ml500 = new Unit('vidal://unit/60', 'ml'); ml500.conversionRates = conversionRate500; const fl500 = new Unit('vidal://unit/138', 'fl'); fl500.conversionRates = conversionRate500; fl500.isDispensingUnit = true; const rixubis500 = new EquivalentDrug('vidal://ucd/27744', 'RIXUBIS 500UI INJ FL+FL5ML', [ui500, ml500, fl500]); const conversionRate1000 = [ new ConversionRate(uiPrescribed, mlPrescribed, 1, 200), new ConversionRate(uiPrescribed, flPrescribed, 1, 1000), ]; const ui1000 = new Unit('vidal://unit/105', 'UI'); ui1000.conversionRates = conversionRate1000; const ml1000 = new Unit('vidal://unit/60', 'ml'); ml1000.conversionRates = conversionRate1000; const fl1000 = new Unit('vidal://unit/138', 'fl'); fl1000.conversionRates = conversionRate1000; fl1000.isDispensingUnit = true; const rixubis1000 = new EquivalentDrug('vidal://ucd/27745', 'RIXUBIS 1000UI INJ FL+FL5ML', [ui1000, ml1000, fl1000]); el.equivalentUcds = [rixubis500, rixubis1000]; el.switchDisplay(); const renderedElement = await fixture(el); const combination0 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-vmp-13356-combination-0"]'); const combination1 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-vmp-13356-combination-1"]'); const combination2 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-vmp-13356-combination-2"]'); const combination3 = () => renderedElement.renderRoot.querySelector('table[data-test="substitution-vidal-vmp-13356-combination-3"]'); assert.exists(combination0(), 'Cannot find combination table'); assert.include((_b = (_a = combination0()) === null || _a === void 0 ? void 0 : _a.querySelector('tr[data-test="substitution-vidal-vmp-13356-vidal-ucd-27745"]')) === null || _b === void 0 ? void 0 : _b.textContent, '2.5 fl'); assert.exists(combination1(), 'Cannot find combination table'); assert.include((_d = (_c = combination1()) === null || _c === void 0 ? void 0 : _c.querySelector('tr[data-test="substitution-vidal-vmp-13356-vidal-ucd-27744"]')) === null || _d === void 0 ? void 0 : _d.textContent, '1 fl'); assert.include((_f = (_e = combination1()) === null || _e === void 0 ? void 0 : _e.querySelector('tr[data-test="substitution-vidal-vmp-13356-vidal-ucd-27745"]')) === null || _f === void 0 ? void 0 : _f.textContent, '2 fl'); assert.exists(combination2(), 'Cannot find combination table'); assert.include((_h = (_g = combination2()) === null || _g === void 0 ? void 0 : _g.querySelector('tr[data-test="substitution-vidal-vmp-13356-vidal-ucd-27744"]')) === null || _h === void 0 ? void 0 : _h.textContent, '3 fl'); assert.include((_k = (_j = combination2()) === null || _j === void 0 ? void 0 : _j.querySelector('tr[data-test="substitution-vidal-vmp-13356-vidal-ucd-27745"]')) === null || _k === void 0 ? void 0 : _k.textContent, '1 fl'); assert.exists(combination3(), 'Cannot find combination table'); assert.include((_m = (_l = combination3()) === null || _l === void 0 ? void 0 : _l.querySelector('tr[data-test="substitution-vidal-vmp-13356-vidal-ucd-27744"]')) === null || _m === void 0 ? void 0 : _m.textContent, '5 fl'); }); }); const createPrescriptionLine = (pL) => ({ drug: new Drug('vidal://ucd/default', 'ucd by default'), isDoseValid: function () { return !!(this.dose && this.unit); }, ...pL, }); }); //# sourceMappingURL=vidal-equivalent-form_test.js.map