30 lines
1.8 KiB
JavaScript

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' }]));
});