feat(backend): Audit-Log-Abfrage (Modul 19)

AuditModule um GET /audit-log?entityType=&entityId= erweitert
(nur Administrator). Zusaetzlich Jest-E2E-Parallelitaet begrenzt
(maxWorkers: 4), um wiederkehrende Verbindungsengpaesse gegen
Postgres unter vielen parallelen Testsuiten zu vermeiden.
This commit is contained in:
Nick Szaunig committed 2026-08-22 06:00:52 +02:00
1 parent 4945e92985
commit 8a6769dbfd
7 files changed
+189 -2

No files matched your search

@@ -0,0 +1,55 @@
import { AuditLogService } from './audit-log.service';
import { PrismaService } from '../prisma/prisma.service';
describe('AuditLogService', () => {
let service: AuditLogService;
let prisma: {
auditLog: { create: jest.Mock; findMany: jest.Mock };
};
beforeEach(() => {
prisma = {
auditLog: {
create: jest.fn(),
findMany: jest.fn().mockResolvedValue([]),
},
};
service = new AuditLogService(prisma as unknown as PrismaService);
});
it('record writes the entity type, action, and actor', async () => {
await service.record({
entityType: 'Colony',
entityId: 'colony-1',
action: 'CREATE',
userId: 'user-1',
});
const [[createArg]] = prisma.auditLog.create.mock.calls as [
[
{
data: {
entityType: string;
entityId: string;
action: string;
userId?: string;
};
},
],
];
expect(createArg.data.entityType).toBe('Colony');
expect(createArg.data.entityId).toBe('colony-1');
expect(createArg.data.action).toBe('CREATE');
expect(createArg.data.userId).toBe('user-1');
});
it('findAll filters by entity type and id', async () => {
await service.findAll({ entityType: 'Colony', entityId: 'colony-1' });
const [[queryArg]] = prisma.auditLog.findMany.mock.calls as [
[{ where: { entityType?: string; entityId?: string } }],
];
expect(queryArg.where.entityType).toBe('Colony');
expect(queryArg.where.entityId).toBe('colony-1');
});
});