30 lines
1.8 KiB
JavaScript
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' }]));
|
|
});
|