-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy pathframework.test.ts
138 lines (111 loc) · 3.89 KB
/
framework.test.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import express, { Application, NextFunction, Request, Response, Router } from 'express';
import { Container } from 'inversify';
import { InversifyExpressServer } from '../src/server';
import { controller } from '../src/decorators';
import { cleanUpMetadata } from '../src/utils';
import { RoutingConfig } from '../src/interfaces';
import { HttpResponseMessage } from '../src/httpResponseMessage';
interface ServerWithTypes {
_app: Application;
_router: Router;
_routingConfig: RoutingConfig;
handleHttpResponseMessage: (
message: HttpResponseMessage,
res: Response
) => void;
}
describe('Unit Test: InversifyExpressServer', () => {
beforeEach(done => {
cleanUpMetadata();
done();
});
it('should call the configFn before the errorConfigFn', done => {
const middleware = (
req: Request,
res: Response,
next: NextFunction,
) => {
//
};
const configFn = jest.fn((app: Application) => {
app.use(middleware);
});
const errorConfigFn = jest.fn((app: Application) => {
app.use(middleware);
});
const container = new Container();
@controller('/')
class TestController { }
const server = new InversifyExpressServer(container);
server.setConfig(configFn)
.setErrorConfig(errorConfigFn);
expect(configFn).not.toBeCalled();
expect(errorConfigFn).not.toBeCalled();
server.build();
expect(configFn).toHaveBeenCalledTimes(1);
expect(errorConfigFn).toHaveBeenCalledTimes(1);
done();
});
it('Should allow to pass a custom Router instance as config', () => {
const container = new Container();
const customRouter = Router({
caseSensitive: false,
mergeParams: false,
strict: false,
});
const serverWithDefaultRouter = new InversifyExpressServer(container);
const serverWithCustomRouter = new InversifyExpressServer(
container,
customRouter
);
expect((serverWithDefaultRouter as unknown as ServerWithTypes)
._router === customRouter).toBe(false);
expect((serverWithCustomRouter as unknown as ServerWithTypes)
._router === customRouter).toBe(true);
});
it('Should allow to provide custom routing configuration', () => {
const container = new Container();
const routingConfig = {
rootPath: '/such/root/path',
};
const serverWithDefaultConfig = new InversifyExpressServer(container);
const serverWithCustomConfig = new InversifyExpressServer(
container,
null,
routingConfig
);
expect((serverWithCustomConfig as unknown as ServerWithTypes)
._routingConfig).toBe(routingConfig);
expect((serverWithDefaultConfig as unknown as ServerWithTypes)
._routingConfig).not.toEqual(
(serverWithCustomConfig as unknown as ServerWithTypes)._routingConfig,
);
});
it('Should allow to provide a custom express application', () => {
const container = new Container();
const app = express();
const serverWithDefaultApp = new InversifyExpressServer(container);
const serverWithCustomApp = new InversifyExpressServer(
container,
null,
null,
app
);
expect((serverWithCustomApp as unknown as ServerWithTypes)._app).toBe(app);
expect((serverWithDefaultApp as unknown as ServerWithTypes)._app).not
.toEqual((serverWithCustomApp as unknown as ServerWithTypes)._app);
});
it('Should handle a HttpResponseMessage that has no content', () => {
const container = new Container();
const server = new InversifyExpressServer(container);
const httpResponseMessageWithoutContent = new HttpResponseMessage(404);
const mockResponse: Partial<Response> = {
sendStatus: jest.fn(),
};
(server as unknown as ServerWithTypes).handleHttpResponseMessage(
httpResponseMessageWithoutContent,
mockResponse as unknown as Response,
);
expect(mockResponse.sendStatus).toHaveBeenCalledWith(404);
});
});