mock-config-server 3.3.1 → 3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.js +0 -5
  2. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.js +4 -8
  3. package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.js +0 -4
  4. package/package.json +2 -2
  5. package/dist/src/core/database/createDatabaseRoutes/createDatabaseRoutes.test.ts +0 -112
  6. package/dist/src/core/database/createDatabaseRoutes/helpers/array/createNewId/createNewId.test.ts +0 -13
  7. package/dist/src/core/database/createDatabaseRoutes/helpers/array/findIndexById/findIndexById.test.ts +0 -17
  8. package/dist/src/core/database/createDatabaseRoutes/helpers/array/isIndex/isIndex.test.ts +0 -30
  9. package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.test.ts +0 -399
  10. package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.test.ts +0 -118
  11. package/dist/src/core/database/createDatabaseRoutes/helpers/operators/operators.d.ts +0 -3
  12. package/dist/src/core/database/createDatabaseRoutes/helpers/operators/operators.js +0 -30
  13. package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.d.ts +0 -3
  14. package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.js +0 -31
  15. package/dist/src/core/database/createDatabaseRoutes/helpers/splitDatabaseByNesting/splitDatabaseByNesting.test.ts +0 -25
  16. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.test.ts +0 -156
  17. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.test.ts +0 -48
  18. package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.test.ts +0 -96
  19. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.test.ts +0 -851
  20. package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.test.ts +0 -116
  21. package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.test.ts +0 -22
  22. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.test.ts +0 -45
  23. package/dist/src/core/middlewares/corsMiddleware/corsMiddleware.test.ts +0 -152
  24. package/dist/src/core/middlewares/corsMiddleware/helpers/getAllowedOrigins/getAllowedOrigins.test.ts +0 -15
  25. package/dist/src/core/middlewares/errorMiddleware/errorMiddleware.test.ts +0 -29
  26. package/dist/src/core/middlewares/noCorsMiddleware/noCorsMiddleware.test.ts +0 -49
  27. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getGraphqlUrlSuggestions/getGraphqlUrlSuggestions.test.ts +0 -27
  28. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.test.ts +0 -12
  29. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/getRestUrlSuggestions.test.ts +0 -54
  30. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getActualRestUrlMeaningfulString/getActualRestUrlMeaningfulString.test.ts +0 -12
  31. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getPatternRestUrlMeaningfulString/getPatternRestUrlMeaningfulString.test.ts +0 -10
  32. package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.test.ts +0 -285
  33. package/dist/src/core/rest/createRestRoutes/createRestRoutes.test.ts +0 -648
  34. package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.test.ts +0 -154
  35. package/dist/src/utils/helpers/config/resolveEntityValues/resolveEntityValues.test.ts +0 -1452
  36. package/dist/src/utils/helpers/entities/convertToEntityDescriptor/convertToEntityDescriptor.test.ts +0 -27
  37. package/dist/src/utils/helpers/entities/isEntityDescriptor/isEntityDescriptor.test.ts +0 -15
  38. package/dist/src/utils/helpers/graphql/getGraphQLInput/getGraphQLInput.test.ts +0 -140
  39. package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.test.ts +0 -32
  40. package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptors.test.ts +0 -53
  41. package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.test.ts +0 -262
  42. package/dist/src/utils/helpers/isPlainObject/isPlainObject.test.ts +0 -20
  43. package/dist/src/utils/helpers/isPrimitive/isPrimitive.test.ts +0 -26
  44. package/dist/src/utils/helpers/isRegExp/isRegExp.test.ts +0 -20
  45. package/dist/src/utils/helpers/url/convertWin32PathToUnix/convertWin32PathToUnix.test.ts +0 -21
  46. package/dist/src/utils/helpers/url/getUrlParts/getUrlParts.test.ts +0 -8
  47. package/dist/src/utils/helpers/url/removeLeadingAndTrailingSlashes/removeLeadingAndTrailingSlashes.test.ts +0 -10
  48. package/dist/src/utils/helpers/url/urlJoin/urlJoin.test.ts +0 -9
@@ -1,648 +0,0 @@
1
- import express from 'express';
2
- import request from 'supertest';
3
-
4
- import { urlJoin } from '@/utils/helpers';
5
- import type { MockServerConfig, RestConfig } from '@/utils/types';
6
-
7
- import { createRestRoutes } from './createRestRoutes';
8
-
9
- const createServer = (
10
- mockServerConfig: Pick<MockServerConfig, 'interceptors' | 'baseUrl'> & {
11
- rest: RestConfig;
12
- }
13
- ) => {
14
- const { baseUrl, rest, interceptors } = mockServerConfig;
15
- const server = express();
16
- const routerBase = express.Router();
17
- const routerWithRoutes = createRestRoutes({
18
- router: routerBase,
19
- restConfig: rest,
20
- serverResponseInterceptor: interceptors?.response
21
- });
22
-
23
- const restBaseUrl = urlJoin(baseUrl ?? '/', rest?.baseUrl ?? '/');
24
-
25
- server.use(express.json());
26
- server.use(restBaseUrl, routerWithRoutes);
27
- return server;
28
- };
29
-
30
- describe('createRestRoutes', () => {
31
- test('Should return 404 for no matched request configs', async () => {
32
- const server = createServer({
33
- rest: {
34
- configs: [
35
- {
36
- path: '/users',
37
- method: 'get',
38
- routes: [
39
- {
40
- entities: {
41
- headers: {
42
- key1: 'value1'
43
- }
44
- },
45
- data: { name: 'John', surname: 'Doe' }
46
- }
47
- ]
48
- }
49
- ]
50
- }
51
- });
52
-
53
- const response = await request(server).get('/users').set({ key2: 'value2' });
54
-
55
- expect(response.statusCode).toBe(404);
56
- });
57
-
58
- test('Should have response Cache-Control header equals to max-age=0, must-revalidate', async () => {
59
- const server = createServer({
60
- rest: {
61
- configs: [
62
- {
63
- path: '/users',
64
- method: 'get',
65
- routes: [{ data: { name: 'John', surname: 'Doe' } }]
66
- }
67
- ]
68
- }
69
- });
70
-
71
- const response = await request(server).get('/users');
72
- expect(response.headers['cache-control']).toBe('max-age=0, must-revalidate');
73
- });
74
- });
75
-
76
- describe('createRestRoutes: content', () => {
77
- test('Should correctly use data function', async () => {
78
- const server = createServer({
79
- rest: {
80
- configs: [
81
- {
82
- path: '/users',
83
- method: 'get',
84
- routes: [
85
- {
86
- entities: {
87
- query: {
88
- key1: 'value1'
89
- }
90
- },
91
- data: ({ url }, { query }) => ({
92
- url,
93
- query
94
- })
95
- }
96
- ]
97
- }
98
- ]
99
- }
100
- });
101
-
102
- const response = await request(server).get('/users').query({ key1: 'value1' });
103
-
104
- expect(response.statusCode).toBe(200);
105
- expect(response.body).toEqual({
106
- url: '/users?key1=value1',
107
- query: {
108
- key1: 'value1'
109
- }
110
- });
111
- });
112
-
113
- test('Should correctly use data function with polling setting', async () => {
114
- const server = createServer({
115
- rest: {
116
- configs: [
117
- {
118
- path: '/users',
119
- method: 'get',
120
- routes: [
121
- {
122
- settings: { polling: true },
123
- entities: {
124
- query: {
125
- key1: 'value1'
126
- }
127
- },
128
- queue: [
129
- {
130
- data: ({ url }, { query }) => ({
131
- url,
132
- query
133
- })
134
- }
135
- ]
136
- }
137
- ]
138
- }
139
- ]
140
- }
141
- });
142
-
143
- const response = await request(server).get('/users').query({ key1: 'value1' });
144
-
145
- expect(response.statusCode).toBe(200);
146
- expect(response.body).toEqual({
147
- url: '/users?key1=value1',
148
- query: {
149
- key1: 'value1'
150
- }
151
- });
152
- });
153
-
154
- test('Should return same polling data with time param', async () => {
155
- jest.useFakeTimers();
156
- const server = createServer({
157
- rest: {
158
- configs: [
159
- {
160
- path: '/users',
161
- method: 'get',
162
- routes: [
163
- {
164
- settings: { polling: true },
165
- queue: [
166
- { time: 2000, data: { name: 'John', surname: 'Doe' } },
167
- { data: { name: 'John', surname: 'Smith' } }
168
- ]
169
- }
170
- ]
171
- }
172
- ]
173
- }
174
- });
175
-
176
- const query = { key1: 'value1' };
177
-
178
- const firstResponse = await request(server).get('/users').query(query);
179
- expect(firstResponse.statusCode).toBe(200);
180
- expect(firstResponse.body).toEqual({ name: 'John', surname: 'Doe' });
181
-
182
- jest.advanceTimersByTime(1000);
183
-
184
- const secondResponse = await request(server).get('/users').query(query);
185
- expect(secondResponse.statusCode).toBe(200);
186
- expect(secondResponse.body).toEqual({ name: 'John', surname: 'Doe' });
187
-
188
- jest.advanceTimersByTime(1000);
189
-
190
- const thirdResponse = await request(server).get('/users').query(query);
191
- expect(thirdResponse.statusCode).toBe(200);
192
- expect(thirdResponse.body).toEqual({ name: 'John', surname: 'Smith' });
193
-
194
- jest.useRealTimers();
195
- });
196
- });
197
-
198
- describe('createRestRoutes: settings', () => {
199
- test('Should correctly process the request with polling', async () => {
200
- const server = createServer({
201
- rest: {
202
- configs: [
203
- {
204
- path: '/users',
205
- method: 'get',
206
- routes: [
207
- {
208
- settings: { polling: true },
209
- queue: [
210
- { data: { name: 'John', surname: 'Doe' } },
211
- { data: { name: 'John', surname: 'Smith' } }
212
- ]
213
- }
214
- ]
215
- }
216
- ]
217
- }
218
- });
219
-
220
- const firstResponse = await request(server).get('/users');
221
- expect(firstResponse.statusCode).toBe(200);
222
- expect(firstResponse.body).toEqual({ name: 'John', surname: 'Doe' });
223
-
224
- const secondResponse = await request(server).get('/users');
225
- expect(secondResponse.statusCode).toBe(200);
226
- expect(secondResponse.body).toEqual({ name: 'John', surname: 'Smith' });
227
-
228
- const thirdResponse = await request(server).get('/users');
229
- expect(thirdResponse.statusCode).toBe(200);
230
- expect(thirdResponse.body).toEqual({ name: 'John', surname: 'Doe' });
231
- });
232
-
233
- test('Should correct handle empty queue', async () => {
234
- const server = createServer({
235
- rest: {
236
- configs: [
237
- {
238
- path: '/users',
239
- method: 'get',
240
- routes: [
241
- {
242
- settings: { polling: true },
243
- queue: []
244
- }
245
- ]
246
- }
247
- ]
248
- }
249
- });
250
-
251
- const response = await request(server).get('/users');
252
- expect(response.statusCode).toBe(404);
253
- });
254
- });
255
-
256
- describe('createRestRoutes: entities', () => {
257
- test('Should match config by entities "includes" behavior', async () => {
258
- const server = createServer({
259
- rest: {
260
- configs: [
261
- {
262
- path: '/users',
263
- method: 'get',
264
- routes: [
265
- {
266
- entities: {
267
- headers: {
268
- key1: 'value1',
269
- key2: 'value2'
270
- },
271
- query: {
272
- key1: 'value1'
273
- }
274
- },
275
- data: { name: 'John', surname: 'Doe' }
276
- }
277
- ]
278
- }
279
- ]
280
- }
281
- });
282
-
283
- const response = await request(server)
284
- .get('/users')
285
- .set({ key1: 'value1', key2: 'value2' })
286
- .query({ key1: 'value1', key2: 'value2' });
287
-
288
- expect(response.statusCode).toBe(200);
289
- expect(response.body).toStrictEqual({ name: 'John', surname: 'Doe' });
290
- });
291
-
292
- test('Should match config by entities "includes" behavior with path regexp', async () => {
293
- const server = createServer({
294
- rest: {
295
- configs: [
296
- {
297
- path: /^\/us(.+?)rs$/,
298
- method: 'get',
299
- routes: [
300
- {
301
- entities: {
302
- headers: {
303
- key1: 'value1',
304
- key2: 'value2'
305
- },
306
- query: {
307
- key1: 'value1'
308
- }
309
- },
310
- data: { name: 'John', surname: 'Doe' }
311
- }
312
- ]
313
- }
314
- ]
315
- }
316
- });
317
-
318
- const response = await request(server)
319
- .get('/users')
320
- .set({ key1: 'value1', key2: 'value2' })
321
- .query({ key1: 'value1', key2: 'value2' });
322
-
323
- expect(response.statusCode).toBe(200);
324
- expect(response.body).toStrictEqual({ name: 'John', surname: 'Doe' });
325
- });
326
-
327
- test('Should give priority to more specific route config', async () => {
328
- const server = createServer({
329
- rest: {
330
- configs: [
331
- {
332
- path: '/users',
333
- method: 'get',
334
- routes: [
335
- {
336
- entities: {
337
- headers: {
338
- key1: 'value1',
339
- key2: 'value2'
340
- },
341
- query: {
342
- key1: 'value1'
343
- }
344
- },
345
- data: { name: 'John', surname: 'Doe' }
346
- },
347
- {
348
- entities: {
349
- headers: {
350
- key1: 'value1',
351
- key2: 'value2'
352
- },
353
- query: {
354
- key1: 'value1',
355
- key2: 'value2'
356
- }
357
- },
358
- data: { name: 'John', surname: 'Smith' }
359
- }
360
- ]
361
- }
362
- ]
363
- }
364
- });
365
-
366
- const response = await request(server)
367
- .get('/users')
368
- .set({ key1: 'value1', key2: 'value2' })
369
- .query({ key1: 'value1', key2: 'value2' });
370
-
371
- expect(response.statusCode).toBe(200);
372
- expect(response.body).toStrictEqual({ name: 'John', surname: 'Smith' });
373
- });
374
-
375
- test('Should strictly compare plain array body if top level descriptor used', async () => {
376
- const server = createServer({
377
- rest: {
378
- configs: [
379
- {
380
- path: '/users',
381
- method: 'post',
382
- routes: [
383
- {
384
- entities: {
385
- body: {
386
- checkMode: 'equals',
387
- value: [
388
- {
389
- key1: 'value1',
390
- key2: { nestedKey1: 'nestedValue1' }
391
- }
392
- ]
393
- }
394
- },
395
- data: { name: 'John', surname: 'Doe' }
396
- }
397
- ]
398
- }
399
- ]
400
- }
401
- });
402
-
403
- const successResponse = await request(server)
404
- .post('/users')
405
- .set('Content-Type', 'application/json')
406
- .send([{ key1: 'value1', key2: { nestedKey1: 'nestedValue1' } }]);
407
- expect(successResponse.statusCode).toBe(200);
408
- expect(successResponse.body).toStrictEqual({ name: 'John', surname: 'Doe' });
409
-
410
- const failedResponse = await request(server)
411
- .post('/users')
412
- .set('Content-Type', 'application/json')
413
- .send([{ key1: 'value1', key2: { nestedKey1: 'nestedValue1', nestedKey2: 'nestedValue2' } }]);
414
- expect(failedResponse.statusCode).toBe(404);
415
- });
416
-
417
- test('Should strictly compare plain object body if top level descriptor used', async () => {
418
- const server = createServer({
419
- rest: {
420
- configs: [
421
- {
422
- path: '/users',
423
- method: 'post',
424
- routes: [
425
- {
426
- entities: {
427
- body: {
428
- checkMode: 'equals',
429
- value: {
430
- key1: 'value1',
431
- key2: { nestedKey1: 'nestedValue1' }
432
- }
433
- }
434
- },
435
- data: { name: 'John', surname: 'Doe' }
436
- }
437
- ]
438
- }
439
- ]
440
- }
441
- });
442
-
443
- const response = await request(server)
444
- .post('/users')
445
- .set('Content-Type', 'application/json')
446
- .send({ key1: 'value1', key2: { nestedKey1: 'nestedValue1' } });
447
-
448
- expect(response.statusCode).toBe(200);
449
- expect(response.body).toStrictEqual({ name: 'John', surname: 'Doe' });
450
- });
451
-
452
- test('Should correctly resolve flat object body with descriptors', async () => {
453
- const server = createServer({
454
- rest: {
455
- configs: [
456
- {
457
- path: '/users',
458
- method: 'post',
459
- routes: [
460
- {
461
- entities: {
462
- body: {
463
- key1: 'value1',
464
- 'key2.nestedKey1': {
465
- checkMode: 'equals',
466
- value: 'nestedValue1'
467
- }
468
- }
469
- },
470
- data: { name: 'John', surname: 'Doe' }
471
- }
472
- ]
473
- }
474
- ]
475
- }
476
- });
477
-
478
- const response = await request(server)
479
- .post('/users')
480
- .set('Content-Type', 'application/json')
481
- .send({ key1: 'value1', key2: { nestedKey1: 'nestedValue1', nestedKey2: 'nestedValue2' } });
482
-
483
- expect(response.statusCode).toBe(200);
484
- expect(response.body).toStrictEqual({ name: 'John', surname: 'Doe' });
485
- });
486
-
487
- test('Should be case-insensitive for header keys', async () => {
488
- const server = createServer({
489
- rest: {
490
- configs: [
491
- {
492
- path: '/users',
493
- method: 'get',
494
- routes: [
495
- {
496
- entities: {
497
- headers: {
498
- lowercase: 'lowercase',
499
- UPPERCASE: 'UPPERCASE'
500
- }
501
- },
502
- data: { name: 'John', surname: 'Doe' }
503
- }
504
- ]
505
- }
506
- ]
507
- }
508
- });
509
-
510
- const response = await request(server)
511
- .get('/users')
512
- .set('Content-Type', 'application/json')
513
- .set({ LowerCase: 'lowercase', upperCase: 'UPPERCASE' });
514
-
515
- expect(response.statusCode).toBe(200);
516
- expect(response.body).toStrictEqual({ name: 'John', surname: 'Doe' });
517
- });
518
- });
519
-
520
- describe('createRestRoutes: interceptors', () => {
521
- test('Should call request interceptor', async () => {
522
- const requestInterceptor = jest.fn();
523
- const server = createServer({
524
- rest: {
525
- configs: [
526
- {
527
- path: '/users',
528
- method: 'post',
529
- routes: [
530
- {
531
- entities: {
532
- body: {
533
- key1: 'value1',
534
- key2: 'value2'
535
- }
536
- },
537
- data: { name: 'John', surname: 'Doe' }
538
- }
539
- ],
540
- interceptors: { request: requestInterceptor }
541
- },
542
- {
543
- path: '/settings',
544
- method: 'post',
545
- routes: [
546
- {
547
- entities: {
548
- body: {
549
- key1: 'value1',
550
- key2: 'value2'
551
- }
552
- },
553
- data: { name: 'John', surname: 'Smith' }
554
- }
555
- ]
556
- }
557
- ]
558
- }
559
- });
560
-
561
- await request(server)
562
- .post('/users')
563
- .set('Content-Type', 'application/json')
564
- .send({ key1: 'value1', key2: 'value2' });
565
- expect(requestInterceptor.mock.calls.length).toBe(1);
566
-
567
- await request(server)
568
- .post('/settings')
569
- .set('Content-Type', 'application/json')
570
- .send({ key1: 'value1', key2: 'value2' });
571
- expect(requestInterceptor.mock.calls.length).toBe(1);
572
- });
573
-
574
- test('Should call response interceptors in order: route -> request -> server', async () => {
575
- const routeInterceptor = jest.fn();
576
- const requestInterceptor = jest.fn();
577
- const serverInterceptor = jest.fn();
578
- const server = createServer({
579
- rest: {
580
- configs: [
581
- {
582
- path: '/users',
583
- method: 'post',
584
- routes: [
585
- {
586
- entities: {
587
- body: {
588
- key1: 'value1',
589
- key2: 'value2'
590
- }
591
- },
592
- data: { name: 'John', surname: 'Doe' },
593
- interceptors: { response: routeInterceptor }
594
- }
595
- ],
596
- interceptors: { response: requestInterceptor }
597
- },
598
- {
599
- path: '/settings',
600
- method: 'post',
601
- routes: [
602
- {
603
- entities: {
604
- body: {
605
- key1: 'value1',
606
- key2: 'value2'
607
- }
608
- },
609
- data: { name: 'John', surname: 'Smith' }
610
- }
611
- ]
612
- }
613
- ]
614
- },
615
- interceptors: { response: serverInterceptor }
616
- });
617
-
618
- await request(server)
619
- .post('/users')
620
- .set('Content-Type', 'application/json')
621
- .send({ key1: 'value1', key2: 'value2' });
622
- expect(routeInterceptor.mock.calls.length).toBe(1);
623
- expect(requestInterceptor.mock.calls.length).toBe(1);
624
- expect(serverInterceptor.mock.calls.length).toBe(1);
625
- expect(routeInterceptor.mock.invocationCallOrder[0]).toBeLessThan(
626
- requestInterceptor.mock.invocationCallOrder[0]
627
- );
628
- expect(requestInterceptor.mock.invocationCallOrder[0]).toBeLessThan(
629
- serverInterceptor.mock.invocationCallOrder[0]
630
- );
631
-
632
- await request(server)
633
- .post('/settings')
634
- .set('Content-Type', 'application/json')
635
- .send({ key1: 'value1', key2: 'value2' });
636
- expect(routeInterceptor.mock.calls.length).toBe(1);
637
- expect(requestInterceptor.mock.calls.length).toBe(1);
638
- expect(serverInterceptor.mock.calls.length).toBe(2);
639
-
640
- await request(server)
641
- .post('/messages')
642
- .set('Content-Type', 'application/json')
643
- .send({ key1: 'value1', key2: 'value2' });
644
- expect(routeInterceptor.mock.calls.length).toBe(1);
645
- expect(requestInterceptor.mock.calls.length).toBe(1);
646
- expect(serverInterceptor.mock.calls.length).toBe(2);
647
- });
648
- });