const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const LineagePages = require('../public/js/lineage-pages.js'); test('世系页只从 URL 读取真实家谱编号', () => { assert.equal(LineagePages.getCurrentGenealogyId('?genealogyId=900001001'), '900001001'); assert.equal(LineagePages.getCurrentGenealogyId(''), ''); }); test('世系人物表单只构造 Apifox LineagePersonBody 字段', () => { assert.deepEqual( LineagePages.buildLineagePersonBody({ name: '李明', sex: '0', generation: '3', generationName: '德', personNo: 'P202607090001', aliasName: '明远', birthDate: '1990-01-01', sortOrder: '1', relationName: '妻', biography: '人物简介', personName: '旧字段', generationNo: 4, introduction: '旧字段' }), { name: '李明', sex: '0', generation: 3, generationName: '德', personNo: 'P202607090001', aliasName: '明远', birthDate: '1990-01-01', sortOrder: 1, relationName: '妻', biography: '人物简介' } ); }); test('世系人物要求安全的 ID、姓名和有效世代值', () => { assert.deepEqual( LineagePages.normalizeLineagePerson({ personId: '2060000000000000000', name: '李明', generation: 3, generationName: '德', sex: '0' }), { personId: '2060000000000000000', name: '李明', sex: '0', generationName: '德', generation: 3 } ); assert.equal(LineagePages.normalizeLineagePerson({ personId: Number('2060000000000000000'), name: '李明' }), null); assert.equal(LineagePages.validateLineagePersonBody({ name: '' }), '请填写成员姓名'); assert.equal(LineagePages.validateLineagePersonBody(LineagePages.buildLineagePersonBody({ name: '李明', generation: '1.5' })), '世代序号必须是整数'); assert.equal(LineagePages.validateLineagePersonBody(LineagePages.buildLineagePersonBody({ name: '李明', sortOrder: '1.5' })), '排序值必须是整数'); }); test('世系关系模式只使用 PC 已定义的四种新增关系', () => { assert.equal(LineagePages.relationLabel('parents'), '父母'); assert.equal(LineagePages.relationLabel('spouses'), '配偶'); assert.equal(LineagePages.relationLabel('children'), '子女'); assert.equal(LineagePages.relationLabel('siblings'), '兄弟姐妹'); assert.equal(LineagePages.relationLabel('remove'), ''); }); test('世系页按 Apifox 关键词范围搜索并提供分页入口', () => { const page = fs.readFileSync(path.join(__dirname, '..', 'profile-tree.html'), 'utf8'); assert.match(page, /placeholder="输入姓名、别名或人物编号搜索"/); assert.match(page, /data-lineage-pagination/); assert.match(page, /data-lineage-page-action="previous"/); assert.match(page, /data-lineage-page-action="next"/); }); test('世系管理的 403 不会被当作登录失效', () => { assert.equal(LineagePages.isForbidden({ status: 403 }), true); assert.equal(LineagePages.shouldRedirectToLogin({ getToken() { return 'token'; } }, { status: 403 }), false); });