Files
baiyue-firstleg/scripts/admin-test-env-modules/dashboard-contract.test.mjs
2026-10-08 17:07:57 +08:00

41 lines
2.7 KiB
JavaScript

import assert from 'node:assert/strict'
import test from 'node:test'
import { run, validOperationalMetrics } from './dashboard.mjs'
import { readFileSync } from 'node:fs'
const metrics = () => ({ inTransitContainerCount: '3', inTransitTeu: '4.5', unknownContainerTypeCount: '1', pendingCustomsOrderCount: '2', asOf: '2026-10-06T01:00:00' })
test('实时指标拒绝缺失、负数、非整数计数及未知箱型超出总柜数', () => {
assert.equal(validOperationalMetrics(metrics()), true)
for (const field of ['inTransitContainerCount', 'unknownContainerTypeCount', 'pendingCustomsOrderCount', 'inTransitTeu', 'asOf']) {
for (const value of [null, undefined, '', -1, 'invalid']) assert.equal(validOperationalMetrics({ ...metrics(), [field]: value }), false)
}
assert.equal(validOperationalMetrics({ ...metrics(), pendingCustomsOrderCount: 1.5 }), false)
assert.equal(validOperationalMetrics({ ...metrics(), unknownContainerTypeCount: 4 }), false)
})
const fake = () => {
const calls = []
return { calls, createdResources: {}, assert(_m, _n, _r, passed) { assert.equal(passed, true) },
apiSuccess(_m, _n, response) { return response.body.data },
async request(method, path) { calls.push({ method, path }); return { http: 200, body: { code: '200', data: path.includes('/operational-metrics') ? metrics() : { total: '9', records: [{}] } } } } }
}
test('默认编排实时首页三次只读查询,今日范围和启用客户筛选与页面一致', async () => {
const context = fake(); await run(context)
assert.equal(context.createdResources.dashboard.status, 'VERIFIED')
assert.equal(context.calls.length, 3)
assert.ok(context.calls.every(row => row.method === 'GET'))
const query = new URL(context.calls[1].path, 'https://offline.invalid').searchParams
assert.equal(query.get('createdFrom'), context.createdResources.dashboard.businessDate + 'T00:00:00.000')
assert.equal(query.get('createdTo'), context.createdResources.dashboard.businessDate + 'T23:59:59.999')
assert.equal(query.get('size'), '1')
assert.ok(context.calls[2].path.endsWith('status=ACTIVE'))
const entry = readFileSync(new URL('../admin-test-env-acceptance.mjs', import.meta.url), 'utf8')
assert.match(entry, /const CONFIGURED_MODULES = \[[^\n]*'dashboard'/)
assert.doesNotMatch(entry, /首页为静态演示数据/)
})
test('非成功响应和缺失服务端总数不得被记为看板通过', async () => {
for (const response of [{ http: 200, body: { code: 'S0500', data: metrics() } }, { http: 200, body: { code: '200', data: { records: [] } } }]) {
const context = fake(); context.request = async () => response
await assert.rejects(run(context)); assert.equal(context.createdResources.dashboard.status, 'CHECKING')
}
})