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-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, /