-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
async-storage.middleware.spec.ts
74 lines (63 loc) · 1.86 KB
/
async-storage.middleware.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { AsyncStorageMiddleware } from './async-storage.middleware';
import { Test, TestingModule } from '@nestjs/testing';
import { ASYNC_STORAGE } from '../../constants';
import { AsyncLocalStorage } from 'async_hooks';
jest.mock('node:crypto', () => ({
randomUUID: jest.fn().mockReturnValue('mock-trace-id'),
}));
describe('AsyncStorageMiddleware', () => {
let middleware: AsyncStorageMiddleware;
let storage: AsyncLocalStorage<Map<string, string>>;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
AsyncStorageMiddleware,
{
provide: ASYNC_STORAGE,
useValue: {
run: (store: unknown, callback: () => void) => {
callback();
},
},
},
],
}).compile();
middleware = module.get<AsyncStorageMiddleware>(AsyncStorageMiddleware);
storage = module.get<AsyncLocalStorage<Map<string, string>>>(ASYNC_STORAGE);
});
it('should be defined', () => {
expect(middleware).toBeDefined();
});
it('should accept request id header', () => {
const runSpy = jest.spyOn(storage, 'run');
const nextMock = jest.fn();
middleware.use(
{
headers: { 'x-request-id': 'mocked' },
},
null,
nextMock,
);
expect(nextMock).toHaveBeenCalledTimes(1);
expect(runSpy).toHaveBeenCalledWith(
new Map().set('traceId', 'mocked'),
expect.anything(),
);
});
it('should generate request id if no header found', () => {
const runSpy = jest.spyOn(storage, 'run');
const nextMock = jest.fn();
middleware.use(
{
headers: {},
},
null,
nextMock,
);
expect(nextMock).toHaveBeenCalledTimes(1);
expect(runSpy).toHaveBeenCalledWith(
new Map().set('traceId', 'mock-trace-id'),
expect.anything(),
);
});
});