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); });