50 行
2.0 KiB
TypeScript
50 行
2.0 KiB
TypeScript
// 已读取AGENTS.md
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
/**
|
|
* 第九批回归闸门:后台经营看板真实数据化
|
|
* 禁止服务端返回硬编码假经营数据,前后端均不得再以假走势兜底。
|
|
*/
|
|
describe('第九批看板真实数据闸门 (禁止硬编码经营指标)', () => {
|
|
const rootDir = path.resolve(__dirname, '../../');
|
|
const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8');
|
|
const chartCode = fs.readFileSync(
|
|
path.join(rootDir, 'admin/arco-design-pro-vite/src/views/dashboard/workplace/components/content-chart.vue'),
|
|
'utf-8'
|
|
);
|
|
|
|
const statsStart = repoCode.indexOf('async getDashboardStats(');
|
|
const statsBlock = repoCode.slice(statsStart, statsStart + 3600);
|
|
|
|
describe('1. 服务端 getDashboardStats 必须来自真实聚合', () => {
|
|
it('不得再返回硬编码假指标', () => {
|
|
expect(statsStart).toBeGreaterThan(-1);
|
|
expect(statsBlock).not.toContain('todayGmv: 58920');
|
|
expect(statsBlock).not.toContain('activeUsers: 1250');
|
|
expect(statsBlock).not.toContain("date: '09-22'");
|
|
expect(statsBlock).not.toContain('{ name: \'同城陪吃\', value: 42 }');
|
|
});
|
|
|
|
it('必须基于订单表实时聚合今日 GMV / 走势 / 品类', () => {
|
|
expect(statsBlock).toContain('DATE(created_at) = CURDATE()');
|
|
expect(statsBlock).toContain('GROUP BY track');
|
|
expect(statsBlock).toContain('DATE_SUB(CURDATE(), INTERVAL 6 DAY)');
|
|
expect(statsBlock).toContain('recentGmvTrend');
|
|
});
|
|
|
|
it('接单中大神数量来自真实计数', () => {
|
|
expect(statsBlock).toContain('FROM companions WHERE status = "接单中"');
|
|
});
|
|
});
|
|
|
|
describe('2. 前端走势图不得以假数据兜底', () => {
|
|
it('移除硬编码走势并暴露失败', () => {
|
|
expect(chartCode).toContain('const loadFailed = ref(false)');
|
|
expect(chartCode).not.toContain('09-22');
|
|
expect(chartCode).not.toContain('58920');
|
|
expect(chartCode).not.toContain('// fallback');
|
|
});
|
|
});
|
|
});
|