feat: harden orchestrator execution runtime

This commit is contained in:
john
2026-07-24 23:53:32 +08:00
parent 396bb78200
commit f6f2cd0933
55 changed files with 5122 additions and 194 deletions
+24
View File
@@ -26,6 +26,30 @@ test('detectPageDataDatasetUsageFromHtml treats browser deleteRow as a soft dele
assert.deepEqual(usage.get('tkmind_exp_survey'), { insert: true, read: true, softDelete: true });
});
test('detectPageDataDatasetUsageFromHtml detects updateRow for literal and constant datasets', () => {
const usage = detectPageDataDatasetUsageFromHtml(`
const PRODUCTS = 'products';
await c.updateRow(PRODUCTS, 1, { status: 'inactive' });
await c.updateRow('orders', 2, { status: 'shipped' });
`);
assert.deepEqual(usage.get('products'), { update: true });
assert.deepEqual(usage.get('orders'), { update: true });
});
test('buildPageDataPolicyDatasetsFromRegistry grants registered update columns', () => {
const datasets = buildPageDataPolicyDatasetsFromRegistry({
html: `await c.listRows('orders'); await c.updateRow('orders', 1, { status: 'shipped' });`,
registryDatasets: [{
name: 'orders',
actions: ['read', 'update'],
columns: { read: ['id', 'status'], update: ['status'] },
}],
});
assert.equal(datasets.orders.read, true);
assert.equal(datasets.orders.update, true);
assert.deepEqual(datasets.orders.columns.update, ['status']);
});
test('buildPageDataPolicyDatasetsFromRegistry grants registered soft delete when HTML uses deleteRow', () => {
const datasets = buildPageDataPolicyDatasetsFromRegistry({
html: `const DATASET = 'mood_notes'; await c.deleteRow(DATASET, 1);`,