Files
memind/health-p0-experiment.test.mjs
T
john f96fdcb3b9 feat(health): add P0 health channel kernel and encrypted health zone.
Lock health recording behind confirm-only state machines, reject public publishes for the health category, and ship the 14-day experiment Page Data templates with tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 18:04:26 +08:00

56 lines
2.4 KiB
JavaScript

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);
});