37 lines
2.0 KiB
JavaScript
37 lines
2.0 KiB
JavaScript
function id(value) { return value == null ? '' : String(value) }
|
|
|
|
export async function run(context) {
|
|
const module = 'audit'
|
|
const base = '/api/platform/v1/audit/logs'
|
|
|
|
const pageResponse = await context.request('GET', `${base}?page=1&size=20`)
|
|
const page = context.apiSuccess(module, '查询平台操作日志首页', pageResponse)
|
|
const records = Array.isArray(page?.records) ? page.records : []
|
|
const total = Number(page?.total)
|
|
context.assert(module, '日志分页完整且标识字段齐全', pageResponse,
|
|
Number(page?.page) === 1 && Number(page?.size) === 20 && Number.isFinite(total)
|
|
&& records.length === Math.min(20, total)
|
|
&& records.every((row) => id(row.id) && row.eventType && row.occurredAt),
|
|
`page=${page?.page},size=${page?.size},total=${page?.total},records=${records.length}`)
|
|
context.assert(module, '日志列表不返回变更前后快照', pageResponse,
|
|
records.every((row) => !Object.hasOwn(row, 'beforeData') && !Object.hasOwn(row, 'afterData')),
|
|
`records=${records.length}`)
|
|
|
|
if (records[0]) {
|
|
const detailResponse = await context.request('GET', `${base}/${encodeURIComponent(records[0].id)}`)
|
|
const detail = context.apiSuccess(module, '查询当前日志详情', detailResponse)
|
|
context.assert(module, '日志详情与列表身份一致', detailResponse,
|
|
id(detail?.id) === id(records[0].id) && Object.hasOwn(detail || {}, 'httpMethod'),
|
|
`id=${detail?.id},eventType=${detail?.eventType}`)
|
|
} else {
|
|
context.addCoverageGap(module, 'audit', '日志详情',
|
|
'测试环境当前没有审计日志;先执行本轮业务写入后重跑', 'not-implemented', { blocking: false })
|
|
}
|
|
|
|
const missingResponse = await context.request('GET', `${base}/999999999999999`)
|
|
context.assert(module, '不存在的日志详情被拒绝', missingResponse,
|
|
(missingResponse.http === 200 && ['A0403', 'A0404'].includes(String(missingResponse.body?.code)))
|
|
|| missingResponse.http === 404,
|
|
`HTTP=${missingResponse.http},code=${missingResponse.body?.code ?? 'missing'}`)
|
|
}
|