UNPKG

@kitstack/nest-powertools

Version:

A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development

102 lines 3.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const rxjs_1 = require("rxjs"); const audit_hook_1 = require("../audit.hook"); describe('Audit Hook', () => { describe('InMemoryAuditStorage', () => { let storage; const entry = { userId: '1', action: 'CREATE', resource: 'Test', timestamp: new Date(), metadata: {}, }; beforeEach(() => { storage = new audit_hook_1.InMemoryAuditStorage(); storage.clearLogs(); }); it('should save and retrieve audit logs', async () => { await storage.save(entry); const logs = storage.getAllLogs(); expect(logs.length).toBe(1); expect(logs[0].userId).toBe('1'); }); it('should find logs by filter', async () => { await storage.save(entry); const found = await storage.find({ userId: '1' }); expect(found.length).toBe(1); }); it('should find log by id', async () => { await storage.save({ ...entry, userId: '2', resource: 'Other' }); const logs = storage.getAllLogs(); const found = await storage.findById(logs[0].id); expect(found).toBeDefined(); }); it('should clear logs', () => { storage.clearLogs(); expect(storage.getAllLogs().length).toBe(0); }); }); describe('MongoAuditStorage', () => { let storage; const entry = { userId: '1', action: 'CREATE', resource: 'Test', timestamp: new Date(), metadata: {}, }; beforeEach(() => { storage = new audit_hook_1.MongoAuditStorage(); }); it('should call save without error (mocked)', async () => { await expect(storage.save(entry)).resolves.not.toThrow(); }); }); describe('AuditInterceptor', () => { let interceptor; let storage; let context; let callHandler; beforeEach(() => { storage = new audit_hook_1.InMemoryAuditStorage(); interceptor = new audit_hook_1.AuditInterceptor(storage); context = { getHandler: () => () => { }, switchToHttp: () => ({ getRequest: () => ({ user: { id: '1', email: 'test@test.com' }, ip: '127.0.0.1', headers: { 'user-agent': 'jest' }, url: '/test', method: 'GET', body: { foo: 'bar' }, params: { id: '1' }, }), getResponse: () => ({ statusCode: 200 }), }), }; callHandler = { handle: () => (0, rxjs_1.of)('response') }; }); it('should intercept and save audit log', (done) => { Reflect.defineMetadata('audit-config', { action: 'READ' }, context.getHandler()); interceptor .intercept(context, callHandler) .subscribe(() => { expect(storage.getAllLogs().length).toBe(1); done(); }); }); it('should skip if no audit config', (done) => { interceptor .intercept(context, callHandler) .subscribe((res) => { expect(res).toBe('response'); expect(storage.getAllLogs().length).toBe(0); done(); }); }); }); }); //# sourceMappingURL=audit.hook.spec.js.map