import test from 'node:test'; import assert from 'node:assert/strict'; import { applications, categories, filterApplications, validateApplications } from '../src/apps.mjs'; test('门户只展示产品部两个正式应用', () => { assert.deepEqual(Object.fromEntries(applications.map(app => [app.name, app.url])), { '风险预警': 'http://risk-prod.dieya.net.cn/', '成本识别': 'http://cost.dieya.net.cn/' }); assert.equal(applications.length, 2); assert.equal(applications.every(app => app.category === 'product' && app.environment === 'production'), true); assert.equal(applications.some(app => /测试|运营|需求|财务|违禁|制度/.test(app.name)), false); assert.deepEqual(categories.map(category => category.id), ['all', 'product', 'favorites']); assert.equal(validateApplications(applications), true); }); test('分类、关键词和常用筛选同时生效', () => { assert.deepEqual(filterApplications(applications, { category: 'product' }).map(app => app.id), ['risk', 'cost']); assert.deepEqual(filterApplications(applications, { query: '成本' }).map(app => app.id), ['cost']); assert.deepEqual(filterApplications(applications, { query: 'RISK-PROD' }).map(app => app.id), ['risk']); assert.deepEqual(filterApplications(applications, { category: 'favorites', favorites: ['cost'] }).map(app => app.id), ['cost']); 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: 'test' }])); });