Files
web_hgdjc_h5/tests/navigation-page.test.mjs
T
谢宇宁andClaude Opus 5.5 f65d10e998 Initial commit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:07:59 +07:00

33 lines
2.7 KiB
JavaScript

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {readFile} from 'node:fs/promises';
import ts from 'typescript';
async function moduleUrl(file,replace=code=>code){
const source=await readFile(new URL(file,import.meta.url),'utf8');
return 'data:text/javascript;base64,'+Buffer.from(replace(ts.transpileModule(source,{compilerOptions:{target:ts.ScriptTarget.ES2022,module:ts.ModuleKind.ESNext}}).outputText)).toString('base64');
}
const protocol=await moduleUrl('../src/lib/api/protocol.ts');
const {navigationPageData}=await import(await moduleUrl('../src/lib/navigation-page.ts',code=>code.replace("'./api/protocol'",JSON.stringify(protocol))));
test('navigation renders configured lines in order without duplicating positional fallbacks or invalid URLs',()=>{
const config={navPageList:[{line:2,url:'https://two.test/path'},{line:1,url:'javascript:alert(1)'},{line:1,url:'https://one.test'},{line:1,url:'https://duplicate.test'},{line:3,url:''},{line:0,url:'https://invalid.test'}]};
assert.deepEqual(navigationPageData(config).routes,[{line:1,href:'https://one.test/',label:'线路一'},{line:2,href:'https://two.test/path',label:'线路二'}]);
});
test('legacy navigation fields and address sections supply valid configured destinations only',()=>{
const data=navigationPageData({config:{dhNewUrlAddr1:'https://nav-one.test',dhNewUrlAddr2:'javascript:bad',newUrlAddr1:'https://backup.test',foreverUrlAddr:''},newAddressInfo:{foreverUrlAddr:'https://permanent.test/entry',dhNewUrlAddr2:'https://nav-two.test'}});
assert.deepEqual(data.routes.map(route=>route.href),['https://nav-one.test/','https://nav-two.test/']);
assert.equal(data.permanent,'https://permanent.test/entry');
const empty=navigationPageData({navPageList:null});
assert.deepEqual(empty.routes,[]);for(const key of ['permanent','telegram','tgGroup','twitter'])assert.equal(empty[key],'');
});
test('navigation identity and contacts use configuration, support TG handles, and omit demo accounts',()=>{
const data=navigationPageData({seoNavInfo:JSON.stringify({dhSiteName:'配置导航站',dhDescription:'配置说明'}),config:{telegram:'javascript:bad',telegramAdd:'@business_91',tgGroup:'',twitterAddr:'data:text/html,bad'},newAddressInfo:{tgGroup:'@group_91',twitterAddr:'https://x.com/configured'}});
assert.equal(data.siteName,'配置导航站');assert.equal(data.description,'配置说明');
assert.equal(data.telegram,'https://t.me/business_91');assert.equal(data.tgGroup,'https://t.me/group_91');assert.equal(data.twitter,'https://x.com/configured');
assert.equal(navigationPageData({config:{dhSiteName:'配置名称'}}).siteName,'配置名称');
assert.equal(navigationPageData({seoInfo:{webSiteName:'站点名称'}}).siteName,'站点名称');
});