70 行
3.0 KiB
TypeScript
70 行
3.0 KiB
TypeScript
// 已读取AGENTS.md
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
/**
|
|
* 第八批回归闸门:后台"静默兜底"数据盲区
|
|
* 接口失败时不得再以伪造/默认/归零数据伪装成功,必须显式暴露失败状态。
|
|
*/
|
|
describe('第八批后台可观测性闸门 (静默兜底数据盲区)', () => {
|
|
const rootDir = path.resolve(__dirname, '../../');
|
|
const adminSrc = path.join(rootDir, 'admin/arco-design-pro-vite/src/views');
|
|
const read = (rel: string) => fs.readFileSync(path.join(adminSrc, rel), 'utf-8');
|
|
|
|
const financeConfig = read('finance/config/index.vue');
|
|
const dataPanel = read('dashboard/workplace/components/data-panel.vue');
|
|
const actionHub = read('dashboard/workplace/components/action-hub.vue');
|
|
const quickTodo = read('dashboard/workplace/components/quick-todo-list.vue');
|
|
const quickVerifier = read('dashboard/workplace/components/quick-verifier.vue');
|
|
|
|
describe('1. 财务/微信支付配置:读取失败不得用默认值覆盖线上', () => {
|
|
it('维护 configLoaded / wxPayLoaded 加载状态', () => {
|
|
expect(financeConfig).toContain('const configLoaded = ref(false)');
|
|
expect(financeConfig).toContain('const wxPayLoaded = ref(false)');
|
|
});
|
|
|
|
it('读取失败必须锁定保存按钮', () => {
|
|
expect(financeConfig).toContain(':disabled="!configLoaded"');
|
|
expect(financeConfig).toContain(':disabled="!wxPayLoaded"');
|
|
});
|
|
|
|
it('读取失败必须提示并阻止保存覆盖', () => {
|
|
expect(financeConfig).toContain('避免以默认值覆盖线上配置');
|
|
expect(financeConfig).toContain('避免清空线上商户参数');
|
|
expect(financeConfig).not.toContain('// 保持兜底');
|
|
expect(financeConfig).not.toContain('// 保持默认');
|
|
});
|
|
});
|
|
|
|
describe('2. 经营指标:不得展示伪造数字', () => {
|
|
it('移除硬编码伪造经营数据并暴露失败状态', () => {
|
|
expect(dataPanel).toContain('const loadFailed = ref(false)');
|
|
expect(dataPanel).not.toContain('58920');
|
|
expect(dataPanel).not.toContain('1250');
|
|
expect(dataPanel).toContain('核心经营指标加载失败');
|
|
});
|
|
});
|
|
|
|
describe('3. 待办中心:不得静默归零', () => {
|
|
it('实时待办暴露失败状态', () => {
|
|
expect(actionHub).toContain('const loadFailed = ref(false)');
|
|
expect(actionHub).not.toContain('pendingAuditsCount: 2');
|
|
expect(actionHub).toContain('待办数据加载失败');
|
|
});
|
|
|
|
it('重点待办列表暴露失败状态', () => {
|
|
expect(quickTodo).toContain('const loadFailed = ref(false)');
|
|
expect(quickTodo).toContain('重点待办加载失败');
|
|
expect(quickTodo).not.toContain('// 保持兜底');
|
|
});
|
|
});
|
|
|
|
describe('4. 现场核销:活动列表失败必须提示', () => {
|
|
it('核销活动列表暴露失败状态', () => {
|
|
expect(quickVerifier).toContain('const activitiesFailed = ref(false)');
|
|
expect(quickVerifier).toContain('组局活动列表加载失败');
|
|
expect(quickVerifier).not.toContain('// 保持兜底');
|
|
});
|
|
});
|
|
});
|