import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; import test from 'node:test'; import { fileURLToPath } from 'node:url'; import { evaluatePageDataHtmlContent } from './mindspace-page-data-finish-guard.mjs'; import { HEALTH_P0_CREATE_TABLE_SQL, HEALTH_P0_DATASET_NAME, assertHealthP0HtmlContract, buildHealthP0BindSpecs, buildHealthP0DatasetRegistration, } from './health-p0-experiment.mjs'; import { assertSymptomRecord } from './health-symptoms.mjs'; import { isMemindHealthEnabled } from './health-feature.mjs'; const root = path.dirname(fileURLToPath(import.meta.url)); test('feature flag is off by default', () => { assert.equal(isMemindHealthEnabled({}), false); assert.equal(isMemindHealthEnabled({ MEMIND_HEALTH_ENABLED: 'true' }), true); }); test('P0 dataset registration matches insert columns and split pages', () => { const dataset = buildHealthP0DatasetRegistration(); assert.equal(dataset.name, HEALTH_P0_DATASET_NAME); assert.ok(HEALTH_P0_CREATE_TABLE_SQL.includes('deleted_at TIMESTAMPTZ')); assert.ok(dataset.columns.insert.includes('am_systolic')); const binds = buildHealthP0BindSpecs({ password: '88888888' }); assert.equal(binds.participant.accessMode, 'public'); assert.equal(binds.researcher.accessMode, 'password'); assert.equal(binds.participant.datasets[HEALTH_P0_DATASET_NAME].read, false); assert.equal(binds.researcher.datasets[HEALTH_P0_DATASET_NAME].insert, false); }); test('P0 HTML pages satisfy Page Data contracts', () => { const participant = fs.readFileSync(path.join(root, 'templates/health-p0-log.html'), 'utf8'); const researcher = fs.readFileSync(path.join(root, 'templates/health-p0-admin.html'), 'utf8'); assert.deepEqual(assertHealthP0HtmlContract(participant, { role: 'participant' }).issues, []); assert.deepEqual(assertHealthP0HtmlContract(researcher, { role: 'researcher' }).issues, []); assert.deepEqual( evaluatePageDataHtmlContent(participant, { relativePath: 'public/health-p0-log.html' }).issues, [], ); assert.deepEqual( evaluatePageDataHtmlContent(researcher, { relativePath: 'public/health-p0-admin.html' }).issues, [], ); }); test('symptoms require an explicit none or a severity', () => { assert.equal(assertSymptomRecord({ code: '无' }).ok, true); assert.equal(assertSymptomRecord({ code: 'dizziness', severity: 2 }).ok, true); assert.equal(assertSymptomRecord({ code: 'dizziness' }).ok, false); });