2026-08-13 20:00:30 +08:00
|
|
|
import test from 'node:test'
|
|
|
|
|
import assert from 'node:assert/strict'
|
|
|
|
|
import fs from 'node:fs'
|
|
|
|
|
import path from 'node:path'
|
|
|
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
|
|
|
|
|
|
const here = path.dirname(fileURLToPath(import.meta.url))
|
|
|
|
|
const moduleSource = fs.readFileSync(path.join(here, 'notifications.mjs'), 'utf8')
|
|
|
|
|
const acceptance = fs.readFileSync(path.join(here, '..', 'admin-test-env-acceptance.mjs'), 'utf8')
|
|
|
|
|
|
|
|
|
|
test('消息中心模块由全量编排注入 context 且不直连环境', () => {
|
|
|
|
|
assert.match(moduleSource, /export async function run\(context\)/)
|
|
|
|
|
assert.doesNotMatch(moduleSource, /https?:\/\//)
|
|
|
|
|
assert.doesNotMatch(moduleSource, /ADMIN_TEST_GATEWAY|process\.env|fetch\(/)
|
|
|
|
|
assert.match(acceptance, /import\(new URL\(`\.\/admin-test-env-modules\/\$\{module\}\.mjs`/)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
test('正式 Admin 全量验收在 system 后注册消息中心', () => {
|
|
|
|
|
assert.match(acceptance, /CONFIGURED_MODULES\s*=\s*\[[^\]]*'system',\s*'notifications'/s)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
test('覆盖模板生命周期、版本冲突、定时任务、幂等、查询和取消', () => {
|
|
|
|
|
for (const token of [
|
|
|
|
|
'创建消息模板草稿', '编辑 DRAFT 消息模板', '旧模板版本编辑被拒绝', '激活消息模板',
|
|
|
|
|
'创建未来定时消息任务', '同幂等键重放定时消息任务', '按任务号和状态查询消息任务',
|
|
|
|
|
'取消未来定时消息任务', '已取消任务禁止重试', '停用本轮消息模板',
|
|
|
|
|
]) assert.match(moduleSource, new RegExp(token))
|
|
|
|
|
assert.match(moduleSource, /recipientType:\s*'PLATFORM_ROLE'/)
|
|
|
|
|
assert.match(moduleSource, /roleCode:\s*'PLATFORM_ADMIN'/)
|
2026-08-14 09:14:52 +08:00
|
|
|
assert.match(moduleSource, /Date\.now\(\) \+ 365 \* 24 \* 60 \* 60 \* 1000/)
|
2026-08-13 20:00:30 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
test('异常路径会取消定时任务并停用模板,不实际投递验收消息', () => {
|
|
|
|
|
assert.match(moduleSource, /taskStatus === 'SCHEDULED'/)
|
|
|
|
|
assert.match(moduleSource, /targetStatus:\s*'DISABLED'/)
|
|
|
|
|
assert.match(moduleSource, /finalTemplateStatus/)
|
|
|
|
|
assert.doesNotMatch(moduleSource, /scheduledAt:\s*null/)
|
|
|
|
|
})
|