feat(consistency): 增加V2.5一致性校验
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import { ConsistencyService } from './consistency.service';
|
||||
|
||||
describe('ConsistencyService', () => {
|
||||
const makePrisma = () => {
|
||||
const counts = {
|
||||
product: 1,
|
||||
project: 2,
|
||||
version: 3,
|
||||
requirement: 4,
|
||||
versionPlan: 5,
|
||||
devTask: 6,
|
||||
testCase: 7,
|
||||
bug: 8,
|
||||
user: 9,
|
||||
taskCategory: 10,
|
||||
taskWorklog: 11,
|
||||
overtimeRecord: 12,
|
||||
workActivity: 13,
|
||||
auditEvent: 14,
|
||||
};
|
||||
const prisma: any = {
|
||||
$queryRawUnsafe: jest.fn((sql: string) => {
|
||||
if (sql.includes('dev_tasks') && sql.includes("version_id = ''")) return Promise.resolve([{ count: 1n }]);
|
||||
if (sql.includes('requirements') && sql.includes('missing_version')) return Promise.resolve([{ count: 2n }]);
|
||||
if (sql.includes('audit_events') && sql.includes("entity_type = 'bug'")) return Promise.resolve([{ count: 0n }]);
|
||||
return Promise.resolve([{ count: 0n }]);
|
||||
}),
|
||||
};
|
||||
for (const [model, count] of Object.entries(counts)) {
|
||||
prisma[model] = { count: jest.fn().mockResolvedValue(count) };
|
||||
}
|
||||
return prisma;
|
||||
};
|
||||
|
||||
it('returns counts plus error/warn consistency groups', async () => {
|
||||
const prisma = makePrisma();
|
||||
const service = new ConsistencyService(prisma);
|
||||
|
||||
const result = await service.run();
|
||||
|
||||
expect(result.status).toBe('fail');
|
||||
expect(result.counts.devTasks).toBe(6);
|
||||
expect(result.summary.errors).toBeGreaterThan(0);
|
||||
expect(result.summary.warnings).toBeGreaterThan(0);
|
||||
expect(result.checks.partitionKeys).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
id: 'dev_tasks.version_id.present',
|
||||
severity: 'error',
|
||||
count: 1,
|
||||
}),
|
||||
]),
|
||||
);
|
||||
expect(result.checks.orphanReferences).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
id: 'requirements.version_id.exists',
|
||||
severity: 'error',
|
||||
count: 2,
|
||||
}),
|
||||
]),
|
||||
);
|
||||
expect(result.checks.auditCoverage).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
id: 'audit.coverage.bug',
|
||||
severity: 'warn',
|
||||
count: 0,
|
||||
}),
|
||||
]),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user