Files

27 lines
1.3 KiB
JavaScript
Raw Permalink Normal View History

2026-09-13 21:44:58 +08:00
import assert from 'node:assert/strict'
import { existsSync, readFileSync } from 'node:fs'
import { resolve } from 'node:path'
const root = resolve(import.meta.dirname, '..')
const servicePath = resolve(root, 'admin-web/src/services/dashboard.ts')
const typePath = resolve(root, 'admin-web/src/types/dashboard.ts')
assert.ok(existsSync(servicePath), '缺少工作台数据适配层')
assert.ok(existsSync(typePath), '缺少工作台数据模型')
const service = readFileSync(servicePath, 'utf8')
const types = readFileSync(typePath, 'utf8')
assert.match(service, /export async function loadDashboard/, '必须导出 loadDashboard')
assert.match(service, /const REQUEST_TIMEOUT = \d+/, '工作台必须定义明确的请求超时')
assert.match(service, /timeout:\s*REQUEST_TIMEOUT/, '工作台请求必须使用超时配置')
assert.match(service, /Promise\.allSettled/, '多来源工作台数据必须隔离局部接口失败')
assert.doesNotMatch(service, /\|\|\s*(3|6|8|9|12|18|23|28|86)\b/, '不得用参考图演示数字兜底')
for (const field of ['metrics', 'todos', 'activities', 'serviceOverview', 'effectiveness']) {
assert.ok(types.includes(field), `DashboardModel 缺少 ${field}`)
}
assert.match(types, /available:\s*boolean/, '工作台模块必须显式标识数据是否可用')
console.log('Admin dashboard data contracts passed')