import test from 'node:test'; import assert from 'node:assert/strict'; import { assertPolicyMatchesHtmlDatasets, buildPageDataPolicyDatasetsFromRegistry, detectPageDataDatasetUsageFromHtml, } from './page-data-html-detect.mjs'; test('detectPageDataDatasetUsageFromHtml finds insert and read datasets', () => { const html = ` await c.insertRow('tkmind_exp_survey', { satisfaction: '满意' }); await c.listRows('tkmind_exp_survey', { limit: 10 }); `; const usage = detectPageDataDatasetUsageFromHtml(html); assert.equal(usage.size, 1); assert.deepEqual(usage.get('tkmind_exp_survey'), { insert: true, read: true }); }); test('detectPageDataDatasetUsageFromHtml resolves dataset constants', () => { const html = ` const DATASET = 'reading_survey'; await client.listRows(DATASET, { limit: 500 }); `; const usage = detectPageDataDatasetUsageFromHtml(html); assert.deepEqual(usage.get('reading_survey'), { read: true }); }); test('assertPolicyMatchesHtmlDatasets rejects mismatched dataset names', () => { const html = `await c.insertRow('tkmind_exp_survey', {});`; assert.throws( () => assertPolicyMatchesHtmlDatasets(html, { experience_survey_responses: { insert: true }, }), /不一致/, ); }); test('buildPageDataPolicyDatasetsFromRegistry infers insert-only policy', () => { const html = `await c.insertRow('survey_responses', { q1: 'a' });`; const datasets = buildPageDataPolicyDatasetsFromRegistry({ html, registryDatasets: [ { name: 'survey_responses', columns: { insert: ['q1'], read: ['id', 'q1', 'created_at'], }, }, ], }); assert.deepEqual(datasets.survey_responses, { insert: true, read: false, update: false, softDelete: false, hardDelete: false, columns: { insert: ['q1'] }, }); });