Add page data delivery and publication guards
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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'] },
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user