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