import test from 'node:test'; import assert from 'node:assert/strict'; import { applications, filterApplications, validateApplications } from '../src/apps.mjs'; test('八个业务地址与用户给定映射一致,正式和测试风险入口不混淆', () => { const expected = { '碟雅运营AI中心': 'https://aiagent.dieya.net.cn/', '碟雅AI中心测试版': 'https://aiagent1.dieya.net.cn/', '需求收集': 'http://demand.dieya.net.cn/', '财务AI助手测试': 'http://finance-test.dieya.net.cn/', '成本识别': 'http://cost.dieya.net.cn/', '违禁词助手': 'http://prohibite.dieya.net.cn/', '风险预警测试': 'http://risk.dieya.net.cn/', '风险预警': 'http://risk-prod.dieya.net.cn/' }; assert.deepEqual(Object.fromEntries(applications.map(app => [app.name, app.url])), expected); assert.equal(validateApplications(applications), true); assert.equal(filterApplications(applications, { environment: 'production' }).length, 5); assert.equal(filterApplications(applications, { environment: 'test' }).length, 3); }); test('分类、中文或域名搜索和环境条件同时生效', () => { assert.deepEqual(filterApplications(applications, { category: 'risk', environment: 'production' }).map(app => app.id), ['risk']); assert.equal(filterApplications(applications, { query: ' 风险预警 ' }).length, 2); assert.deepEqual(filterApplications(applications, { query: 'AIAGENT1.DIEYA' }).map(app => app.id), ['ai-center-test']); assert.equal(filterApplications(applications, { query: '不存在的应用' }).length, 0); }); test('常用列表与环境和关键词组合筛选', () => { const options = { category: 'favorites', favorites: ['cost', 'finance-test'] }; assert.equal(filterApplications(applications, options).length, 2); assert.deepEqual(filterApplications(applications, { ...options, environment: 'test', query: '财务' }).map(app => app.id), ['finance-test']); assert.equal(filterApplications(applications, { category: 'favorites', favorites: [] }).length, 0); }); test('拒绝非网页链接、重复标识和不完整配置', () => { assert.throws(() => validateApplications([{ ...applications[0], url: 'javascript:alert(1)' }])); assert.throws(() => validateApplications([applications[0], applications[0]])); assert.throws(() => validateApplications([{ ...applications[0], environment: 'unknown' }])); });