-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.test.js
More file actions
140 lines (139 loc) · 5.97 KB
/
index.test.js
File metadata and controls
140 lines (139 loc) · 5.97 KB
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
139
140
/* eslint-disable no-undef */
const { registerVersion, routeTo } = require('./index');
// Suite for testing regiterVersion function
describe('Testing API Versioning Middleware - Register Version', () => {
let mockRequest = {};
let mockResponse = {};
const mockNext = jest.fn((res) => res);
beforeEach(() => {
mockRequest = {
headers: [],
};
mockResponse = {
headers: [],
setHeader: jest.fn((header, value) => {
mockResponse.headers[header] = value;
}),
};
});
// Tests
test('Register version Fails, No header sent', () => {
mockRequest.headers.accept = '';
const rv = registerVersion(undefined);
rv(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalledWith(Error('Accept header is required.'));
});
test('Register version Fails, Empty header', () => {
mockRequest.headers.accept = ' ';
const rv = registerVersion(undefined);
rv(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalledWith(Error('You must specify the version number.'));
});
test('Register version Fails, Not valid version number', () => {
mockRequest.headers.accept = 'application/x.my-microservice-name+json;param=';
const rv = registerVersion(undefined);
rv(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalledWith(Error('You must provide a valid version number.'));
});
test('Register Version Success', () => {
mockRequest.headers.accept = 'application/x.my-microservice-name+json;version=1.0.0';
const rv = registerVersion(undefined);
rv(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalled();
expect(mockRequest.version).toBe('1.0.0');
});
test('Register Version Success, optional field name', () => {
mockRequest.headers.accept = 'application/x.my-microservice-name+json;v=1.0.0';
const rv = registerVersion(undefined);
rv(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalled();
expect(mockRequest.version).toBe('1.0.0');
});
});
// Suite for testing routeTo function
describe('Testing API Versioning Middleware - RouteTo', () => {
let mockRequest = {};
let mockResponse = {};
const mockNext = jest.fn((res) => res);
beforeEach(() => {
mockRequest = {
headers: [],
};
mockResponse = {
headers: [],
setHeader: jest.fn((header, value) => {
mockResponse.headers[header] = value;
}),
};
});
// Tests
test('Should routeTo fails with and error for missing version', () => {
mockRequest.version = '';
const route = routeTo({}, undefined);
route(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalledWith(Error('You must specify the version number.'));
expect(mockResponse).toEqual(expect.objectContaining({ statusCode: 403 }));
});
test('Should routeTo fails with and error for missing handler map', () => {
mockRequest.version = '1.0.0';
const route = routeTo('', undefined);
route(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalledWith(Error('You must provide a valid route handler object map.'));
expect(mockResponse).toEqual(expect.objectContaining({ statusCode: 403 }));
});
test('Should routeTo completes and call the handler2', () => {
mockRequest.version = '2.0.0';
const handler1 = jest.fn(() => console.log('handler1'));
const handler2 = jest.fn(() => console.log('handler2'));
const defaultHandler = undefined;
const mockHandlers = {
'1.0.0': handler1,
'2.0.0': handler2,
};
const route = routeTo(mockHandlers, defaultHandler);
route(mockRequest, mockResponse, mockNext);
expect(handler2).toHaveBeenCalledWith(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalled();
});
test('Should routeTo completes and call the handler1', () => {
mockRequest.version = '1.0.0';
const handler1 = jest.fn(() => console.log('handler1'));
const handler2 = jest.fn(() => console.log('handler2'));
const defaultHandler = undefined;
const mockHandlers = {
'1.0.0': handler1,
'2.0.0': handler2,
};
const route = routeTo(mockHandlers, defaultHandler);
route(mockRequest, mockResponse, mockNext);
expect(handler1).toHaveBeenCalledWith(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalled();
});
test('Should routeTo fails with an error for missing default handler', () => {
mockRequest.version = '3.0.0';
const handler1 = jest.fn(() => console.log('handler1'));
const handler2 = jest.fn(() => console.log('handler2'));
const defaultHandler = undefined;
const mockHandlers = {
'1.0.0': handler1,
'2.0.0': handler2,
};
const route = routeTo(mockHandlers, defaultHandler);
route(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalledWith(Error('You must provide a valid handler for the version requested.'));
});
test('Should routeTo completes and call the default handler', () => {
mockRequest.version = '3.0.0';
const handler1 = jest.fn(() => console.log('handler1'));
const handler2 = jest.fn(() => console.log('handler2'));
const defaultHandler = jest.fn(() => console.log('default handler'));
const mockHandlers = {
'1.0.0': handler1,
'2.0.0': handler2,
};
const route = routeTo(mockHandlers, defaultHandler);
route(mockRequest, mockResponse, mockNext);
expect(defaultHandler).toHaveBeenCalledWith(mockRequest, mockResponse, mockNext);
expect(mockNext).toHaveBeenCalled();
});
});