pediatric-ai-scribe-v3/test/well-visit-data.test.js
2026-05-08 08:59:23 +02:00

84 lines
3.8 KiB
JavaScript

const { test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
function loadScheduleJson() {
const raw = fs.readFileSync(path.join(__dirname, '..', 'public', 'data', 'well-visit', 'schedule.json'), 'utf8');
return JSON.parse(raw);
}
test('schedule.json exposes complete well-visit schedule data', () => {
const json = loadScheduleJson();
assert.equal(json.version, '2025.1');
assert.ok(Array.isArray(json.visitAges));
assert.ok(json.wellVisitCodes && json.wellVisitCodes['2mo']);
assert.ok(json.vaccines && json.vaccines.DTaP);
assert.ok(json.periodicity && json.periodicity['12mo']);
assert.ok(json.catchUpSchedule && json.catchUpSchedule.DTaP);
assert.ok(json.anticipatoryGuidance && json.anticipatoryGuidance.newborn_to_1mo);
assert.ok(json.aapFootnotes && json.aapFootnotes['1']);
assert.ok(json.dyslipidemiaSchedule && json.dyslipidemiaSchedule.universal);
assert.ok(json.newbornScreening && json.newbornScreening.mandatoryComponents);
assert.ok(json.growthReference && json.growthReference['2mo']);
assert.ok(json.reflexesReference && json.reflexesReference.newborn);
assert.ok(json.bmiClassification && Array.isArray(json.bmiClassification.categories));
});
test('schedule.json preserves expected well-visit anchors', () => {
const data = loadScheduleJson();
assert.equal(data.visitAges.length, 32);
assert.deepEqual(data.visitAges[0], { id: 'prenatal', label: 'Prenatal', era: 'prenatal' });
assert.deepEqual(data.visitAges[data.visitAges.length - 1], { id: '21y', label: '21 Years', era: 'adolescence' });
assert.equal(data.wellVisitCodes['2mo'].cpt, '99391');
assert.equal(data.periodicity['12mo'].procedures.lead, 'dot_or_risk');
assert.equal(data.periodicity['11y'].developmental.depressionSuicideRisk, 'dot');
assert.equal(data.catchUpSchedule.DTaP.series[4].minimumAge, '4 years');
assert.equal(data.growthReference['2mo'].feeding.length, 4);
assert.equal(data.reflexesReference.newborn.reflexes[2].name, 'Moro (startle)');
assert.equal(data.bmiClassification.categories[3].label, 'Obesity (Class I)');
});
test('well-visit schedule loader fetches JSON and can apply legacy globals', async () => {
const data = loadScheduleJson();
const previousFetch = globalThis.fetch;
globalThis.fetch = async function(url, options) {
assert.equal(url, '/data/well-visit/schedule.json');
assert.deepEqual(options, { credentials: 'same-origin' });
return {
ok: true,
async json() {
return data;
}
};
};
try {
const module = await import('../public/js/wellVisit/scheduleData.js');
const loaded = await module.loadWellVisitScheduleData();
assert.strictEqual(loaded, data);
const target = {};
module.applyWellVisitScheduleGlobals(loaded, target);
assert.strictEqual(target.VISIT_AGES, data.visitAges);
assert.strictEqual(target.PERIODICITY, data.periodicity);
assert.strictEqual(target.CATCH_UP_SCHEDULE, data.catchUpSchedule);
assert.strictEqual(target.BMI_CLASSIFICATION, data.bmiClassification);
} finally {
globalThis.fetch = previousFetch;
}
});
test('index loads wellVisit as a module without the legacy schedule data script', () => {
const indexHtml = fs.readFileSync(path.join(__dirname, '..', 'public', 'index.html'), 'utf8');
assert.match(indexHtml, /<script type="module" src="\/js\/wellVisit\.js"><\/script>/);
assert.doesNotMatch(indexHtml, /src="\/js\/pediatricScheduleData\.js"/);
});
test('server well-visit route reads schedule JSON instead of legacy browser data file', () => {
const source = fs.readFileSync(path.join(__dirname, '..', 'src', 'routes', 'wellVisit.js'), 'utf8');
assert.match(source, /public\/data\/well-visit\/schedule\.json/);
assert.doesNotMatch(source, /pediatricScheduleData/);
});