const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const root = path.join(__dirname, '..'); function read(file) { return fs.readFileSync(path.join(root, file), 'utf8'); } test('内容发布页为全部家谱功能入口透传真实家谱上下文', () => { const page = read('profile-content.html'); assert.doesNotMatch(page, /data-feature-status="pending"|pending-pages\.js|最近内容加载中/); ['profile-article.html', 'profile-album.html', 'profile-video.html', 'profile-merit.html', 'profile-gift.html', 'profile-feed.html', 'profile-growth.html', 'profile-relative.html', 'profile-memo.html'].forEach((href) => { assert.match(page, new RegExp('href="' + href.replace('.', '\\.') + '"[^>]*data-genealogy-context-link'), `${href} 缺少家谱上下文透传`); }); }); test('内容工作台在未选择家谱时使用统一的空上下文状态', () => { const page = read('profile-content.html'); assert.match(page, /api-state--empty[^>]*data-api-state="empty"/); assert.doesNotMatch(page, /api-empty/); }); test('家谱主页公开谱文、相册、视频、功德和祭祀活动入口并透传上下文', () => { const page = read('profile-family-home.html'); ['profile-article.html', 'profile-album.html', 'profile-video.html', 'profile-merit.html', 'profile-ceremony.html'].forEach((href) => { assert.match(page, new RegExp('href="' + href.replace('.', '\\.') + '"[^>]*data-genealogy-context-link'), `${href} 缺少家谱主页入口`); }); }); test('个人中心先引导进入真实家谱列表,不展示无上下文的业务入口', () => { const page = read('profile.html'); const main = page.slice(0, page.indexOf('')); assert.match(main, /href="profile-families\.html"/); assert.doesNotMatch(main, /href="profile-(?:article|album|video|merit|gift|join-review)\.html"/); }); test('加入申请与管理员审核入口使用真实页面和家谱上下文', () => { const families = read('profile-families.html'); const familyAdmin = read('profile-family-admin.html'); const profile = read('profile.html'); assert.match(families, /href="profile-join-family\.html"/); assert.doesNotMatch(families, /邀请码|分享码|手填.*ID/); assert.match(familyAdmin, /href="profile-join-review\.html"[^>]*data-genealogy-context-link/); assert.match(profile, /href="profile-families\.html"/); }); test('帮助中心和服务中心开放同一反馈记录闭环', () => { const help = read('help.html'); const services = read('profile-services.html'); assert.match(help, /href="submit-ticket\.html"/); assert.match(help, /href="my-tickets\.html"/); assert.match(services, /href="profile-feedback\.html"[^>]*data-feature-link="available"/); assert.doesNotMatch(help + services, /手填.*feedbackId|独立.*ticket.*接口/i); }); test('个人中心、我的家谱和当前家谱主页使用明确且可返回的三级路径', () => { const account = read('profile.html'); const families = read('profile-families.html'); const familyHome = read('profile-family-home.html'); const familyHomeRuntime = read('public/js/family-home-pages.js'); const coreHeaders = [account, families, familyHome].map((page) => page.slice(0, page.indexOf(''))).join(''); assert.match(account, /个人中心<\/a>/); assert.match(account, /我的家谱<\/a>/); assert.match(families, /