const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const ArticlePages = require('../public/js/article-pages.js'); const AlbumPages = require('../public/js/album-pages.js'); const CeremonyPages = require('../public/js/ceremony-admin-pages.js'); const FeedPages = require('../public/js/feed-pages.js'); const GenerationPages = require('../public/js/generation-pages.js'); const GrowthPages = require('../public/js/growth-pages.js'); const LineagePages = require('../public/js/lineage-pages.js'); const MemoPages = require('../public/js/memo-pages.js'); const MeritPages = require('../public/js/merit-pages.js'); const RelativePages = require('../public/js/relative-pages.js'); const VideoPages = require('../public/js/video-pages.js'); const contentCapabilities = [ ['谱文', ArticlePages.canEditArticles], ['相册', AlbumPages.canEditAlbums], ['仪式', CeremonyPages.canEditCeremonies], ['动态', FeedPages.canEditFeeds], ['字辈', GenerationPages.canEditGenerations], ['成长记录', GrowthPages.canEditRecords], ['备忘录', MemoPages.canEditRecords], ['功德簿', MeritPages.canEditRecords], ['亲属记录', RelativePages.canEditRecords], ['视频', VideoPages.canEditVideos] ]; test('内容模块只信任家谱详情返回的严格编辑能力', () => { contentCapabilities.forEach(function (entry) { const label = entry[0]; const canEdit = entry[1]; assert.equal(typeof canEdit, 'function', label + '缺少编辑能力判断'); assert.equal(canEdit({ canEditContent: true }), true, label + '应允许内容编辑者写入'); assert.equal(canEdit({ canManage: true }), true, label + '应允许家谱管理者写入'); assert.equal(canEdit({ canEditContent: 'true' }), false, label + '不能把字符串权限当作授权'); assert.equal(canEdit({ canManage: 1 }), false, label + '不能把数值权限当作授权'); assert.equal(canEdit({ canEditContent: false, canManage: false }), false, label + '不能向无权限成员开放写入'); }); }); test('世系编辑与成员、入谱审核分别收紧到正式能力字段', () => { assert.deepEqual(LineagePages.normalizeLineageAccess({ canEditContent: true, canManage: false }), { canEditContent: true }); assert.deepEqual(LineagePages.normalizeLineageAccess({ canEditContent: false, canManage: true }), { canEditContent: false }); assert.deepEqual(LineagePages.normalizeLineageAccess({ canEditContent: 'true' }), { canEditContent: false }); const memberScript = fs.readFileSync(path.join(__dirname, '..', 'public', 'js', 'member-admin-pages.js'), 'utf8'); const reviewScript = fs.readFileSync(path.join(__dirname, '..', 'public', 'js', 'join-review-pages.js'), 'utf8'); assert.match(memberScript, /managementAccess = detail\.canManage === true;/); assert.match(memberScript, /function canTransferOwner\(role, canManage\)[\s\S]+?role === 'owner' && canManage === true/); assert.match(reviewScript, /canManage = detail && detail\.canManage === true;/); });