@kitstack/nest-powertools
Version:
A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development
102 lines • 3.71 kB
JavaScript
;
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