Files
memind/page-data-html-detect.test.mjs

53 lines
1.5 KiB
JavaScript

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('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'] },
});
});