Files
memind/page-data-policy-index.test.mjs
john 6b0c633a75 feat(page-data): complete Phase 4-5, ops UI, and publish integration
Add visitor roles, row-level scope, owner ops APIs, MySQL policy index,
Turnstile captcha, browser client SDK, publish-panel dataset binding,
acceptance tests, and usage documentation.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-08 14:52:49 +08:00

61 lines
2.0 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
buildPageDataPolicyScopeHash,
upsertPageDataPolicyIndex,
} from './page-data-policy-index.mjs';
import {
mapPublicationAccessModeToPageData,
syncPageDataPolicyAccessMode,
} from './page-data-publish-sync.mjs';
import { writePageAccessPolicy } from './page-data-policy-store.mjs';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
test('buildPageDataPolicyScopeHash is stable for same policy shape', () => {
const policy = {
accessMode: 'public',
datasets: { signups: { insert: true }, leads: { insert: true } },
};
assert.equal(
buildPageDataPolicyScopeHash(policy),
buildPageDataPolicyScopeHash({
accessMode: 'public',
datasets: { leads: { insert: true }, signups: { insert: true } },
}),
);
});
test('upsertPageDataPolicyIndex writes mysql row', async () => {
const queries = [];
const pool = {
async query(sql, params) {
queries.push({ sql, params });
return [{ affectedRows: 1 }];
},
};
const result = await upsertPageDataPolicyIndex(pool, {
pageId: 'page-1',
ownerUserId: 'user-1',
accessMode: 'password',
datasets: { signups: { insert: true } },
});
assert.equal(result.datasetCount, 1);
assert.match(queries[0].sql, /h5_page_data_policy_index/);
assert.equal(queries[0].params[0], 'page-1');
});
test('syncPageDataPolicyAccessMode updates policy access mode after publish', () => {
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'page-data-publish-sync-'));
writePageAccessPolicy(workspaceRoot, {
pageId: 'page-1',
ownerUserId: 'user-1',
accessMode: 'public',
datasets: { signups: { insert: true, columns: { insert: ['name'] } } },
});
const synced = syncPageDataPolicyAccessMode(workspaceRoot, 'page-1', 'password', 'user-1');
assert.equal(synced?.accessMode, 'password');
assert.equal(mapPublicationAccessModeToPageData('private_link'), null);
});