const assert = require('node:assert/strict'); const test = require('node:test'); const FeedPages = require('../public/js/feed-pages.js'); const LineagePages = require('../public/js/lineage-pages.js'); const GrowthPages = require('../public/js/growth-pages.js'); const RelativePages = require('../public/js/relative-pages.js'); const MemoPages = require('../public/js/memo-pages.js'); const MeritPages = require('../public/js/merit-pages.js'); const CeremonyPages = require('../public/js/ceremony-admin-pages.js'); const PromotionPages = require('../public/js/app-promotion-pages.js'); function imageFile(name) { return { fileId: '901', ossId: '902', fileName: name, mediaType: 'image/jpeg', accessUrl: `https://files.example/${name}` }; } test('动态和世系人物使用 mediaFiles/avatarFile', () => { const feed = FeedPages.normalizeFeed({ feedId: '1', feedContent: '祭祖留影', mediaFiles: [imageFile('feed.jpg')] }); const person = LineagePages.normalizeLineagePerson({ personId: '2', name: '彭公', avatarFile: imageFile('person.jpg') }); const tree = LineagePages.renderLineageTreeHtml([{ personId: '2', name: '彭公', avatarFile: imageFile('person.jpg') }]); assert.equal(feed.mediaFiles[0].accessUrl, 'https://files.example/feed.jpg'); assert.equal(person.avatarFile.accessUrl, 'https://files.example/person.jpg'); assert.match(tree, /]+person\.jpg/); assert.doesNotMatch(tree, /902/); }); test('成长、亲友、备忘和功德详情展示 mediaFiles', () => { const cases = [ [GrowthPages, 'normalizeGrowthRecord', 'renderGrowthDetail', { recordId: '1', genealogyId: '2', recordTitle: '入学', status: '0' }], [RelativePages, 'normalizeRelativeRecord', 'renderRelativeDetail', { relativeId: '1', genealogyId: '2', relativeName: '张姨', status: '0' }], [MemoPages, 'normalizeMemo', 'renderMemoDetail', { memoId: '1', genealogyId: '2', memoTitle: '祭祖用品', completed: '0', status: '0' }], [MeritPages, 'normalizeMeritRecord', 'renderMeritDetail', { meritId: '1', genealogyId: '2', donorName: '彭先生', meritType: 'repair', meritTitle: '修缮祠堂', status: '0' }] ]; cases.forEach(([module, normalizeName, renderName, fixture], index) => { const record = module[normalizeName](Object.assign({}, fixture, { mediaFiles: [imageFile(`record-${index}.jpg`)] })); const html = module[renderName](record); assert.match(html, new RegExp(`]+record-${index}\\.jpg`)); assert.doesNotMatch(html, /902/); }); }); test('祭祀活动与应用推广展示 coverFile', () => { const ceremony = CeremonyPages.normalizeCeremony({ ceremonyId: '1', genealogyId: '2', ceremonyType: '祭祖', ceremonyTitle: '清明祭祖', status: '0', coverFile: imageFile('ceremony.jpg') }); const promotion = PromotionPages.normalizePromotion({ promotionId: '3', promotionTitle: '家谱移动端', promotionDesc: '随时查看家谱', status: '0', coverFile: imageFile('promotion.jpg') }); assert.match(CeremonyPages.renderCeremonyDetail(ceremony), /]+ceremony\.jpg/); assert.equal(promotion.coverFile.accessUrl, 'https://files.example/promotion.jpg'); assert.match(PromotionPages.renderPromotionList([{ promotionId: '3', promotionTitle: '家谱移动端', promotionDesc: '随时查看家谱', status: '0', coverFile: imageFile('promotion.jpg') }]), /]+promotion\.jpg/); });