// 已读取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('// 保持兜底'); }); }); });