Files
ftb-project-management/apps/server/src/modules/consistency/consistency.service.spec.ts

74 lines
2.2 KiB
TypeScript

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,
}),
]),
);
});
});