文件
shanghaipeiwan/server/tests/companion-profile-honesty.spec.ts
xcbyy 85e00e296f fix(companion): 去除合成虚拟大神的假评分/价格/服务(改为诚实档案)
- getCompanionById 对非真实大神档案不再虚构 rating/orderCount/price/voice/服务包,状态为休息中、审核未申请,并返回 isCompanion=false

- 小程序大神详情页对非大神档案隐藏服务与预约入口,显示'该用户尚未认证为大神';移除页面假默认值

- 新增回归护栏 companion-profile-honesty.spec.ts(82 套件/619 用例全绿)
2026-10-19 09:19:15 +08:00

43 行
1.7 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 detail = fs.readFileSync(path.join(rootDir, 'pwuniapp/pages/expert/detail.vue'), 'utf-8');
const synthBlock = () => {
const start = repoCode.indexOf('async getCompanionById(');
expect(start).toBeGreaterThan(-1);
return repoCode.slice(start, start + 9000);
};
it('合成档案不再虚构评分/单量/价格/语音/状态', () => {
const b = synthBlock();
expect(b).toContain('let synthetic = false;');
expect(b).toContain('synthetic = true;');
expect(b).toContain('rating: 0');
expect(b).toContain('order_count: 0');
expect(b).toContain('hourly_rate: 0');
expect(b).toContain("status: '休息中'");
expect(b).toContain("audit_status: '未申请'");
// 合成档案不返回服务包
expect(b).toContain('services: synthetic ? []');
// 标记是否为真实大神
expect(b).toContain('isCompanion: !synthetic');
});
it('小程序对非大神档案隐藏服务与预约并去除假默认值', () => {
expect(detail).toContain('const isCompanion = computed(');
expect(detail).toContain('v-if="isCompanion"');
expect(detail).toContain('该用户尚未认证为大神,暂不可预约');
expect(detail).not.toContain('rating: 5.0');
expect(detail).not.toContain('orderCount: 86');
expect(detail).not.toContain('price: 68');
});
});