Passed
Push — main ( 238ec8...50243d )
by Lorenzo
03:03
created

TestRouter   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 7
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 6
dl 0
loc 7
c 0
b 0
f 0
rs 10

1 Function

Rating   Name   Duplication   Size   Complexity  
A test 0 4 2
1
import { flushPromises } from '@test/utils/testUtils';
2
import * as http from 'http';
3
import { NextFunction, Request, Response } from 'express';
4
import request from 'supertest';
5
import ExpressBeans from '@/core/ExpressBeans';
6
import { Cached, Logger, Route, RouterBean } from '@/main';
7
import { Executor } from '@/core/executor';
8
import { randomUUID } from 'crypto';
9
10
jest.mock('pino-http', () => ({
11
  pinoHttp: ({
12
    logger: loggerInstance,
13
    customSuccessMessage,
14
    customErrorMessage,
15
  }: {
16
    logger: Logger,
17
    customSuccessMessage: (req: Request, res: Response) => string,
18
    customErrorMessage: (req: Request, res: Response) => string
19
  }) => (req: Request, res: Response, next: NextFunction) => {
20
    if (res.err) {
21
      loggerInstance.error(customErrorMessage(req, res));
22
    } else {
23
      loggerInstance.info(customSuccessMessage(req, res));
24
    }
25
    next();
26
  },
27
  startTime: jest.requireActual('pino-http').startTime,
28
}));
29
jest.mock('@/core', () => ({
30
  registeredBeans: new Map(),
31
  registeredMethods: new Map(),
32
  logger: {
33
    info: jest.fn(),
34
    debug: jest.fn(),
35
    error: jest.fn(),
36
  },
37
}));
38
39
describe('Cache integration tests', () => {
40
  let server: http.Server;
41
  let application: ExpressBeans;
42
  beforeEach(() => {
43
    jest.resetModules();
44
    jest.clearAllMocks();
45
    Executor.stopLifecycle();
46
  });
47
48
  afterEach(() => {
49
    server.close();
50
  });
51
52
  test('cache works in routers', async () => {
53
    // GIVEN
54
    @RouterBean('/test')
55
    class TestRouter {
56
      @Cached()
57
      @Route('GET', '/42')
58
      test(_req: Request, res: Response) {
59
        res.send(randomUUID());
60
      }
61
    }
62
    application = new ExpressBeans({ listen: false, routerBeans: [TestRouter] });
63
    await flushPromises();
64
    server = application.listen(3001);
65
    await flushPromises();
66
67
    // WHEN
68
    const { text: text1 } = await request(server).get('/test/42');
69
    const { text: text2 } = await request(server).get('/test/42');
70
71
    await flushPromises();
72
73
    // THEN
74
    expect(text1).toBe(text2);
75
76
  });
77
});
78