96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
buildPageDataPolicyScopeHash,
|
|
getPageDataPolicyIndexByWorkspacePath,
|
|
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('getPageDataPolicyIndexByWorkspacePath resolves the local delivery binding', async () => {
|
|
const queries = [];
|
|
const pool = {
|
|
async query(sql, params) {
|
|
queries.push({ sql, params });
|
|
return [[{
|
|
page_id: 'page-1',
|
|
owner_user_id: 'user-1',
|
|
access_mode: 'password',
|
|
dataset_count: 3,
|
|
scope_hash: 'scope-1',
|
|
updated_at: 123,
|
|
current_publish_id: 'publish-1',
|
|
}]];
|
|
},
|
|
};
|
|
const result = await getPageDataPolicyIndexByWorkspacePath(
|
|
pool,
|
|
'user-1',
|
|
'public/storefront-admin.html',
|
|
);
|
|
assert.deepEqual(result, {
|
|
pageId: 'page-1',
|
|
ownerUserId: 'user-1',
|
|
accessMode: 'password',
|
|
datasetCount: 3,
|
|
scopeHash: 'scope-1',
|
|
updatedAt: 123,
|
|
publicationId: 'publish-1',
|
|
});
|
|
assert.match(queries[0].sql, /JOIN h5_page_records/);
|
|
assert.deepEqual(queries[0].params, ['user-1', 'public/storefront-admin.html']);
|
|
});
|
|
|
|
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);
|
|
});
|