temba 0.18.0 → 0.19.0
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.
- package/README.md +14 -2
- package/package.json +6 -8
- package/{config → src/config}/index.d.ts +7 -5
- package/src/config/index.d.ts.map +1 -0
- package/{config → src/config}/index.js +11 -39
- package/src/config/index.js.map +1 -0
- package/src/delay/delayMiddleware.d.ts +3 -0
- package/src/delay/delayMiddleware.d.ts.map +1 -0
- package/src/delay/delayMiddleware.js +13 -0
- package/src/delay/delayMiddleware.js.map +1 -0
- package/src/index.d.ts +6 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +83 -0
- package/src/index.js.map +1 -0
- package/src/queries/in-memory.d.ts +3 -0
- package/src/queries/in-memory.d.ts.map +1 -0
- package/src/queries/in-memory.js +61 -0
- package/src/queries/in-memory.js.map +1 -0
- package/src/queries/mongo.d.ts +3 -0
- package/src/queries/mongo.d.ts.map +1 -0
- package/src/queries/mongo.js +75 -0
- package/src/queries/mongo.js.map +1 -0
- package/src/queries/queries.d.ts +2 -0
- package/src/queries/queries.d.ts.map +1 -0
- package/src/queries/queries.js +10 -0
- package/src/queries/queries.js.map +1 -0
- package/src/queries/types.d.ts +15 -0
- package/src/queries/types.d.ts.map +1 -0
- package/src/queries/types.js +2 -0
- package/{routes → src/queries}/types.js.map +1 -1
- package/src/requestBodyInterceptor/interceptRequestBody.d.ts +3 -0
- package/src/requestBodyInterceptor/interceptRequestBody.d.ts.map +1 -0
- package/src/requestBodyInterceptor/interceptRequestBody.js +14 -0
- package/src/requestBodyInterceptor/interceptRequestBody.js.map +1 -0
- package/src/requestBodyInterceptor/types.d.ts +12 -0
- package/src/requestBodyInterceptor/types.d.ts.map +1 -0
- package/src/requestBodyInterceptor/types.js +2 -0
- package/src/requestBodyInterceptor/types.js.map +1 -0
- package/src/requestHandlers/delete.d.ts +12 -0
- package/src/requestHandlers/delete.d.ts.map +1 -0
- package/src/requestHandlers/delete.js +22 -0
- package/src/requestHandlers/delete.js.map +1 -0
- package/src/requestHandlers/get.d.ts +22 -0
- package/src/requestHandlers/get.d.ts.map +1 -0
- package/src/requestHandlers/get.js +47 -0
- package/src/requestHandlers/get.js.map +1 -0
- package/src/requestHandlers/index.d.ts +54 -0
- package/src/requestHandlers/index.d.ts.map +1 -0
- package/src/requestHandlers/index.js +21 -0
- package/src/requestHandlers/index.js.map +1 -0
- package/src/requestHandlers/patch.d.ts +9 -0
- package/src/requestHandlers/patch.d.ts.map +1 -0
- package/src/requestHandlers/patch.js +35 -0
- package/src/requestHandlers/patch.js.map +1 -0
- package/src/requestHandlers/post.d.ts +18 -0
- package/src/requestHandlers/post.d.ts.map +1 -0
- package/src/requestHandlers/post.js +37 -0
- package/src/requestHandlers/post.js.map +1 -0
- package/src/requestHandlers/put.d.ts +9 -0
- package/src/requestHandlers/put.d.ts.map +1 -0
- package/src/requestHandlers/put.js +35 -0
- package/src/requestHandlers/put.js.map +1 -0
- package/src/requestHandlers/types.d.ts +38 -0
- package/src/requestHandlers/types.d.ts.map +1 -0
- package/src/requestHandlers/types.js +2 -0
- package/{schema → src/requestHandlers}/types.js.map +1 -1
- package/{routes → src/requestHandlers}/utils.d.ts +1 -0
- package/src/requestHandlers/utils.d.ts.map +1 -0
- package/src/requestHandlers/utils.js +6 -0
- package/src/requestHandlers/utils.js.map +1 -0
- package/src/resourceRouter.d.ts +5 -0
- package/src/resourceRouter.d.ts.map +1 -0
- package/src/resourceRouter.js +95 -0
- package/src/resourceRouter.js.map +1 -0
- package/src/responseBodyInterceptor/interceptResponseBody.d.ts +3 -0
- package/src/responseBodyInterceptor/interceptResponseBody.d.ts.map +1 -0
- package/src/responseBodyInterceptor/interceptResponseBody.js +7 -0
- package/src/responseBodyInterceptor/interceptResponseBody.js.map +1 -0
- package/src/responseBodyInterceptor/types.d.ts +11 -0
- package/src/responseBodyInterceptor/types.d.ts.map +1 -0
- package/src/responseBodyInterceptor/types.js +2 -0
- package/src/responseBodyInterceptor/types.js.map +1 -0
- package/src/schema/compile.d.ts +3 -0
- package/src/schema/compile.d.ts.map +1 -0
- package/src/schema/compile.js +26 -0
- package/src/schema/compile.js.map +1 -0
- package/{schema → src/schema}/types.d.ts +4 -14
- package/src/schema/types.d.ts.map +1 -0
- package/src/schema/types.js +2 -0
- package/{queries → src/schema}/types.js.map +1 -1
- package/{schema → src/schema}/validate.d.ts +1 -0
- package/src/schema/validate.d.ts.map +1 -0
- package/src/schema/validate.js +14 -0
- package/src/schema/validate.js.map +1 -0
- package/src/urls/urlParser.d.ts +5 -0
- package/src/urls/urlParser.d.ts.map +1 -0
- package/src/urls/urlParser.js +9 -0
- package/src/urls/urlParser.js.map +1 -0
- package/test/integration/api-prefix.test.d.ts +2 -0
- package/test/integration/api-prefix.test.d.ts.map +1 -0
- package/test/integration/api-prefix.test.js +69 -0
- package/test/integration/api-prefix.test.js.map +1 -0
- package/test/integration/createServer.d.ts +4 -0
- package/test/integration/createServer.d.ts.map +1 -0
- package/test/integration/createServer.js +4 -0
- package/test/integration/createServer.js.map +1 -0
- package/test/integration/crud.test.d.ts +2 -0
- package/test/integration/crud.test.d.ts.map +1 -0
- package/test/integration/crud.test.js +173 -0
- package/test/integration/crud.test.js.map +1 -0
- package/test/integration/custom-router.test.d.ts +2 -0
- package/test/integration/custom-router.test.d.ts.map +1 -0
- package/test/integration/custom-router.test.js +74 -0
- package/test/integration/custom-router.test.js.map +1 -0
- package/test/integration/head-method.test.d.ts +2 -0
- package/test/integration/head-method.test.d.ts.map +1 -0
- package/test/integration/head-method.test.js +38 -0
- package/test/integration/head-method.test.js.map +1 -0
- package/test/integration/options-method.test.d.ts +2 -0
- package/test/integration/options-method.test.d.ts.map +1 -0
- package/test/integration/options-method.test.js +30 -0
- package/test/integration/options-method.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js +76 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js +60 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js +89 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js +47 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js.map +1 -0
- package/test/integration/responseBodyInterceptor.test.d.ts +2 -0
- package/test/integration/responseBodyInterceptor.test.d.ts.map +1 -0
- package/test/integration/responseBodyInterceptor.test.js +107 -0
- package/test/integration/responseBodyInterceptor.test.js.map +1 -0
- package/test/integration/returnNullFields.test.d.ts +2 -0
- package/test/integration/returnNullFields.test.d.ts.map +1 -0
- package/test/integration/returnNullFields.test.js +51 -0
- package/test/integration/returnNullFields.test.js.map +1 -0
- package/test/integration/root-url.test.d.ts +2 -0
- package/test/integration/root-url.test.d.ts.map +1 -0
- package/test/integration/root-url.test.js +29 -0
- package/test/integration/root-url.test.js.map +1 -0
- package/test/integration/schema-validation.test.d.ts +2 -0
- package/test/integration/schema-validation.test.d.ts.map +1 -0
- package/test/integration/schema-validation.test.js +169 -0
- package/test/integration/schema-validation.test.js.map +1 -0
- package/test/unit/config/config.test.d.ts +2 -0
- package/test/unit/config/config.test.d.ts.map +1 -0
- package/test/unit/config/config.test.js +121 -0
- package/test/unit/config/config.test.js.map +1 -0
- package/test/unit/urls/urlParser.test.d.ts +2 -0
- package/test/unit/urls/urlParser.test.d.ts.map +1 -0
- package/test/unit/urls/urlParser.test.js +43 -0
- package/test/unit/urls/urlParser.test.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.d.ts +3 -0
- package/vitest.config.d.ts.map +1 -0
- package/vitest.config.js +10 -0
- package/vitest.config.js.map +1 -0
- package/config/index.js.map +0 -1
- package/delay/delayMiddleware.d.ts +0 -2
- package/delay/delayMiddleware.js +0 -16
- package/delay/delayMiddleware.js.map +0 -1
- package/index.d.ts +0 -5
- package/index.js +0 -98
- package/index.js.map +0 -1
- package/queries/in-memory.d.ts +0 -20
- package/queries/in-memory.js +0 -88
- package/queries/in-memory.js.map +0 -1
- package/queries/mongo.d.ts +0 -19
- package/queries/mongo.js +0 -218
- package/queries/mongo.js.map +0 -1
- package/queries/queries.d.ts +0 -11
- package/queries/queries.js +0 -17
- package/queries/queries.js.map +0 -1
- package/queries/types.d.ts +0 -14
- package/queries/types.js +0 -3
- package/routes/delete.d.ts +0 -7
- package/routes/delete.js +0 -77
- package/routes/delete.js.map +0 -1
- package/routes/get.d.ts +0 -7
- package/routes/get.js +0 -115
- package/routes/get.js.map +0 -1
- package/routes/interceptRequestBody.d.ts +0 -3
- package/routes/interceptRequestBody.js +0 -19
- package/routes/interceptRequestBody.js.map +0 -1
- package/routes/patch.d.ts +0 -8
- package/routes/patch.js +0 -102
- package/routes/patch.js.map +0 -1
- package/routes/post.d.ts +0 -8
- package/routes/post.js +0 -87
- package/routes/post.js.map +0 -1
- package/routes/put.d.ts +0 -8
- package/routes/put.js +0 -102
- package/routes/put.js.map +0 -1
- package/routes/routes.d.ts +0 -8
- package/routes/routes.js +0 -90
- package/routes/routes.js.map +0 -1
- package/routes/types.d.ts +0 -23
- package/routes/types.js +0 -3
- package/routes/utils.js +0 -13
- package/routes/utils.js.map +0 -1
- package/schema/compile.d.ts +0 -2
- package/schema/compile.js +0 -41
- package/schema/compile.js.map +0 -1
- package/schema/transformConfig.d.ts +0 -2
- package/schema/transformConfig.js +0 -17
- package/schema/transformConfig.js.map +0 -1
- package/schema/types.js +0 -3
- package/schema/validate.js +0 -19
- package/schema/validate.js.map +0 -1
- package/urls/urlMiddleware.d.ts +0 -5
- package/urls/urlMiddleware.js +0 -41
- package/urls/urlMiddleware.js.map +0 -1
- package/urls/urlParser.d.ts +0 -5
- package/urls/urlParser.js +0 -13
- package/urls/urlParser.js.map +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from './createServer';
|
|
4
|
+
import express from 'express';
|
|
5
|
+
/*
|
|
6
|
+
Tests for OPTIONS requests
|
|
7
|
+
*/
|
|
8
|
+
const tembaServer = createServer();
|
|
9
|
+
const customRouter = express.Router();
|
|
10
|
+
customRouter.get('/hello', async (_, res) => {
|
|
11
|
+
return res.send('Hello, World!');
|
|
12
|
+
});
|
|
13
|
+
// The bottom line of Express' behavior for OPTIONS requests
|
|
14
|
+
// is that it always returns the same methods, unless you implement
|
|
15
|
+
// your own OPTIONS handler.
|
|
16
|
+
//
|
|
17
|
+
// So for Temba this means the OPTIONS request is not "supported",
|
|
18
|
+
// looking at allowed methods. For CORS purposes, Express' default
|
|
19
|
+
// seems sufficient though.
|
|
20
|
+
test('OPTIONS', async () => {
|
|
21
|
+
const optionsRootResponse = await request(tembaServer).options('/');
|
|
22
|
+
expect(optionsRootResponse.status).toBe(204);
|
|
23
|
+
expect(optionsRootResponse.header['access-control-allow-methods']).toBe('GET,HEAD,PUT,PATCH,POST,DELETE');
|
|
24
|
+
// Even though we only have a GET route for /hello, the OPTIONS response
|
|
25
|
+
// returns all methods that exists, because that's Express' default behavior.
|
|
26
|
+
const optionsHelloResponse = await request(tembaServer).options('/hello');
|
|
27
|
+
expect(optionsHelloResponse.status).toBe(204);
|
|
28
|
+
expect(optionsHelloResponse.header['access-control-allow-methods']).toBe('GET,HEAD,PUT,PATCH,POST,DELETE');
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=options-method.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-method.test.js","sourceRoot":"","sources":["../../../test/integration/options-method.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B;;EAEE;AAEF,MAAM,WAAW,GAAG,YAAY,EAAE,CAAA;AAElC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;AACrC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;IAC1C,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AAClC,CAAC,CAAC,CAAA;AAEF,4DAA4D;AAC5D,mEAAmE;AACnE,4BAA4B;AAC5B,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,2BAA2B;AAE3B,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IACzB,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACnE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5C,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CACrE,gCAAgC,CACjC,CAAA;IAED,wEAAwE;IACxE,6EAA6E;IAC7E,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACzE,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7C,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CACtE,gCAAgC,CACjC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-change-requestBody.test.d.ts","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.ts"],"names":[],"mappings":""}
|
package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { describe, test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from '../createServer';
|
|
4
|
+
describe('requestBodyInterceptors that return a (new or changed) request body object', () => {
|
|
5
|
+
const requestBodyInterceptor = {
|
|
6
|
+
post: ({ resource }) => {
|
|
7
|
+
if (resource === 'movies')
|
|
8
|
+
return { title: 'The Matrix' };
|
|
9
|
+
},
|
|
10
|
+
put: ({ body }) => {
|
|
11
|
+
return { ...body, replaced: true };
|
|
12
|
+
},
|
|
13
|
+
patch: ({ body }) => {
|
|
14
|
+
return { ...body, updated: true };
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
const tembaServer = createServer({ requestBodyInterceptor });
|
|
18
|
+
test('POST with a requestBodyInterceptor that returns a request body', async () => {
|
|
19
|
+
const resourceUrl = '/movies';
|
|
20
|
+
// Send a POST request.
|
|
21
|
+
const response = await request(tembaServer)
|
|
22
|
+
.post(resourceUrl)
|
|
23
|
+
.send({ title: 'Star Wars' })
|
|
24
|
+
.set('Content-Type', 'application/json');
|
|
25
|
+
expect(response.statusCode).toEqual(201);
|
|
26
|
+
expect(response.body.title).toEqual('The Matrix');
|
|
27
|
+
const id = response.header.location?.split('/').pop();
|
|
28
|
+
const getResponse = await request(tembaServer).get(`${resourceUrl}/${id}`);
|
|
29
|
+
expect(getResponse.statusCode).toEqual(200);
|
|
30
|
+
expect(getResponse.body.id).toEqual(id);
|
|
31
|
+
expect(getResponse.body.title).toEqual('The Matrix');
|
|
32
|
+
});
|
|
33
|
+
test('PUT with a requestBodyInterceptor that returns a request body', async () => {
|
|
34
|
+
const resourceUrl = '/pokemons';
|
|
35
|
+
// First create a resource, so we have an id to PUT to.
|
|
36
|
+
const postResponse = await request(tembaServer)
|
|
37
|
+
.post(resourceUrl)
|
|
38
|
+
.send({ name: 'Pikachu' })
|
|
39
|
+
.set('Content-Type', 'application/json');
|
|
40
|
+
expect(postResponse.statusCode).toEqual(201);
|
|
41
|
+
expect(postResponse.body.name).toEqual('Pikachu');
|
|
42
|
+
expect(postResponse.body.replaced).toBeUndefined();
|
|
43
|
+
const id = postResponse.header.location?.split('/').pop();
|
|
44
|
+
// Send a PUT request to the id.
|
|
45
|
+
const response = await request(tembaServer)
|
|
46
|
+
.put(`${resourceUrl}/${id}`)
|
|
47
|
+
.send({ name: 'Mew' })
|
|
48
|
+
.set('Content-Type', 'application/json');
|
|
49
|
+
expect(response.statusCode).toEqual(200);
|
|
50
|
+
expect(response.body.id).toEqual(id);
|
|
51
|
+
expect(response.body.name).toEqual('Mew');
|
|
52
|
+
expect(response.body.replaced).toEqual(true);
|
|
53
|
+
});
|
|
54
|
+
test('PATCH with a requestBodyInterceptor that returns a request body', async () => {
|
|
55
|
+
const resourceUrl = '/pokemons';
|
|
56
|
+
// First create a resource, so we have an id to PUT to.
|
|
57
|
+
const postResponse = await request(tembaServer)
|
|
58
|
+
.post(resourceUrl)
|
|
59
|
+
.send({ name: 'Pikachu' })
|
|
60
|
+
.set('Content-Type', 'application/json');
|
|
61
|
+
expect(postResponse.statusCode).toEqual(201);
|
|
62
|
+
expect(postResponse.body.name).toEqual('Pikachu');
|
|
63
|
+
expect(postResponse.body.updated).toBeUndefined();
|
|
64
|
+
const id = postResponse.header.location?.split('/').pop();
|
|
65
|
+
// Send a PATCH request to the id.
|
|
66
|
+
const response = await request(tembaServer)
|
|
67
|
+
.patch(`${resourceUrl}/${id}`)
|
|
68
|
+
.send({ name: 'Mew' })
|
|
69
|
+
.set('Content-Type', 'application/json');
|
|
70
|
+
expect(response.statusCode).toEqual(200);
|
|
71
|
+
expect(response.body.id).toEqual(id);
|
|
72
|
+
expect(response.body.name).toEqual('Mew');
|
|
73
|
+
expect(response.body.updated).toEqual(true);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=requestBodyInterceptor-change-requestBody.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-change-requestBody.test.js","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.ts"],"names":[],"mappings":"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"}
|
package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-error-string.test.d.ts","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from '../createServer';
|
|
4
|
+
describe('requestBodyInterceptors that return a string to indicate a 400 Bad Request should be returned', () => {
|
|
5
|
+
const requestBodyInterceptor = {
|
|
6
|
+
post: ({ resource }) => {
|
|
7
|
+
if (resource === 'movies')
|
|
8
|
+
return '400 Bad Request error from POST';
|
|
9
|
+
},
|
|
10
|
+
put: () => {
|
|
11
|
+
return '400 Bad Request error from PUT';
|
|
12
|
+
},
|
|
13
|
+
patch: () => {
|
|
14
|
+
return '400 Bad Request error from PATCH';
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
const tembaServer = createServer({ requestBodyInterceptor });
|
|
18
|
+
test('POST with a requestBodyInterceptor that returns an error string should result in 400 Bad Request', async () => {
|
|
19
|
+
const expectedResource = 'movies';
|
|
20
|
+
const resourceUrl = '/' + expectedResource;
|
|
21
|
+
// Send a POST request.
|
|
22
|
+
// The request body is empty because that's not important for this test.
|
|
23
|
+
const response = await request(tembaServer).post(resourceUrl);
|
|
24
|
+
expect(response.statusCode).toEqual(400);
|
|
25
|
+
expect(response.body.message).toEqual('400 Bad Request error from POST');
|
|
26
|
+
});
|
|
27
|
+
test('PUT with a requestBodyInterceptor that returns an error string should result in 400 Bad Request', async () => {
|
|
28
|
+
const expectedResource = 'pokemons';
|
|
29
|
+
const resourceUrl = '/' + expectedResource;
|
|
30
|
+
// First create a resource, so we have an id to PUT to.
|
|
31
|
+
const postResponse = await request(tembaServer)
|
|
32
|
+
.post(resourceUrl)
|
|
33
|
+
.send({ name: 'Pikachu' })
|
|
34
|
+
.set('Content-Type', 'application/json');
|
|
35
|
+
expect(postResponse.statusCode).toEqual(201);
|
|
36
|
+
const id = postResponse.header.location?.split('/').pop();
|
|
37
|
+
// Send a PUT request to the id.
|
|
38
|
+
// The request body is empty because that's not important for this test.
|
|
39
|
+
const response = await request(tembaServer).put(`${resourceUrl}/${id}`);
|
|
40
|
+
expect(response.statusCode).toEqual(400);
|
|
41
|
+
expect(response.body.message).toEqual('400 Bad Request error from PUT');
|
|
42
|
+
});
|
|
43
|
+
test('PATCH with a requestBodyInterceptor that returns an error string should result in 400 Bad Request', async () => {
|
|
44
|
+
const expectedResource = 'pokemons';
|
|
45
|
+
const resourceUrl = '/' + expectedResource;
|
|
46
|
+
// First create a resource, so we have an id to PUT to.
|
|
47
|
+
const postResponse = await request(tembaServer)
|
|
48
|
+
.post(resourceUrl)
|
|
49
|
+
.send({ name: 'Pikachu' })
|
|
50
|
+
.set('Content-Type', 'application/json');
|
|
51
|
+
expect(postResponse.statusCode).toEqual(201);
|
|
52
|
+
const id = postResponse.header.location?.split('/').pop();
|
|
53
|
+
// Send a PATCH request to the id.
|
|
54
|
+
// The request body is empty because that's not important for this test.
|
|
55
|
+
const response = await request(tembaServer).patch(`${resourceUrl}/${id}`);
|
|
56
|
+
expect(response.statusCode).toEqual(400);
|
|
57
|
+
expect(response.body.message).toEqual('400 Bad Request error from PATCH');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=requestBodyInterceptor-error-string.test.js.map
|
package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-error-string.test.js","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-invalid-return-types.test.d.ts","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.ts"],"names":[],"mappings":""}
|
package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { describe, test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from '../createServer';
|
|
4
|
+
describe('requestBodyInterceptors does not return an object', () => {
|
|
5
|
+
const getResponse = (resource) => {
|
|
6
|
+
if (resource === 'return-number')
|
|
7
|
+
return 1;
|
|
8
|
+
if (resource === 'return-array')
|
|
9
|
+
return [1, 2, 3];
|
|
10
|
+
if (resource === 'return-boolean')
|
|
11
|
+
return true;
|
|
12
|
+
return {};
|
|
13
|
+
};
|
|
14
|
+
const requestBodyInterceptor = {
|
|
15
|
+
post: ({ resource }) => {
|
|
16
|
+
return getResponse(resource);
|
|
17
|
+
},
|
|
18
|
+
put: ({ resource }) => {
|
|
19
|
+
return getResponse(resource);
|
|
20
|
+
},
|
|
21
|
+
patch: ({ resource }) => {
|
|
22
|
+
return getResponse(resource);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const tembaServer = createServer({ requestBodyInterceptor });
|
|
26
|
+
test('requestBodyInterceptor returns the original request body when something else than an object or string is returned', async () => {
|
|
27
|
+
// Send POST requests.
|
|
28
|
+
let response = await request(tembaServer)
|
|
29
|
+
.post('/return-number')
|
|
30
|
+
.send({ name: 'Jane' })
|
|
31
|
+
.set('Content-Type', 'application/json');
|
|
32
|
+
expect(response.statusCode).toEqual(201);
|
|
33
|
+
expect(response.body.name).toEqual('Jane');
|
|
34
|
+
const numberId = response.header.location?.split('/').pop();
|
|
35
|
+
response = await request(tembaServer)
|
|
36
|
+
.post('/return-array')
|
|
37
|
+
.send({ name: 'Jane' })
|
|
38
|
+
.set('Content-Type', 'application/json');
|
|
39
|
+
expect(response.statusCode).toEqual(201);
|
|
40
|
+
expect(response.body.name).toEqual('Jane');
|
|
41
|
+
const arrayId = response.header.location?.split('/').pop();
|
|
42
|
+
response = await request(tembaServer)
|
|
43
|
+
.post('/return-boolean')
|
|
44
|
+
.send({ name: 'Jane' })
|
|
45
|
+
.set('Content-Type', 'application/json');
|
|
46
|
+
expect(response.statusCode).toEqual(201);
|
|
47
|
+
expect(response.body.name).toEqual('Jane');
|
|
48
|
+
const booleanId = response.header.location?.split('/').pop();
|
|
49
|
+
// Send PUT requests.
|
|
50
|
+
response = await request(tembaServer)
|
|
51
|
+
.put('/return-number/' + numberId)
|
|
52
|
+
.send({ name: 'Jane' })
|
|
53
|
+
.set('Content-Type', 'application/json');
|
|
54
|
+
expect(response.statusCode).toEqual(200);
|
|
55
|
+
expect(response.body.name).toEqual('Jane');
|
|
56
|
+
response = await request(tembaServer)
|
|
57
|
+
.put('/return-array/' + arrayId)
|
|
58
|
+
.send({ name: 'Jane' })
|
|
59
|
+
.set('Content-Type', 'application/json');
|
|
60
|
+
expect(response.statusCode).toEqual(200);
|
|
61
|
+
expect(response.body.name).toEqual('Jane');
|
|
62
|
+
response = await request(tembaServer)
|
|
63
|
+
.put('/return-boolean/' + booleanId)
|
|
64
|
+
.send({ name: 'Jane' })
|
|
65
|
+
.set('Content-Type', 'application/json');
|
|
66
|
+
expect(response.statusCode).toEqual(200);
|
|
67
|
+
expect(response.body.name).toEqual('Jane');
|
|
68
|
+
// Send PATCH requests.
|
|
69
|
+
response = await request(tembaServer)
|
|
70
|
+
.patch('/return-number/' + numberId)
|
|
71
|
+
.send({ name: 'Jane' })
|
|
72
|
+
.set('Content-Type', 'application/json');
|
|
73
|
+
expect(response.statusCode).toEqual(200);
|
|
74
|
+
expect(response.body.name).toEqual('Jane');
|
|
75
|
+
response = await request(tembaServer)
|
|
76
|
+
.patch('/return-array/' + arrayId)
|
|
77
|
+
.send({ name: 'Jane' })
|
|
78
|
+
.set('Content-Type', 'application/json');
|
|
79
|
+
expect(response.statusCode).toEqual(200);
|
|
80
|
+
expect(response.body.name).toEqual('Jane');
|
|
81
|
+
response = await request(tembaServer)
|
|
82
|
+
.patch('/return-boolean/' + booleanId)
|
|
83
|
+
.send({ name: 'Jane' })
|
|
84
|
+
.set('Content-Type', 'application/json');
|
|
85
|
+
expect(response.statusCode).toEqual(200);
|
|
86
|
+
expect(response.body.name).toEqual('Jane');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=requestBodyInterceptor-invalid-return-types.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-invalid-return-types.test.js","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-void.test.d.ts","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describe, test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from '../createServer';
|
|
4
|
+
describe('requestBodyInterceptors that return nothing (void) to indicate nothing should be done', () => {
|
|
5
|
+
const requestBodyInterceptor = {
|
|
6
|
+
post: () => { },
|
|
7
|
+
put: () => { },
|
|
8
|
+
patch: () => { },
|
|
9
|
+
};
|
|
10
|
+
const tembaServer = createServer({ requestBodyInterceptor });
|
|
11
|
+
test('POST with a requestBodyInterceptor that returns void', async () => {
|
|
12
|
+
const resourceUrl = '/movies';
|
|
13
|
+
// Send a POST request.
|
|
14
|
+
// The request body is empty because that's not important for this test.
|
|
15
|
+
const response = await request(tembaServer).post(resourceUrl);
|
|
16
|
+
expect(response.statusCode).toEqual(201);
|
|
17
|
+
});
|
|
18
|
+
test('PUT with a requestBodyInterceptor that returns void', async () => {
|
|
19
|
+
const resourceUrl = '/pokemons';
|
|
20
|
+
// First create a resource, so we have an id to PUT to.
|
|
21
|
+
const postResponse = await request(tembaServer)
|
|
22
|
+
.post(resourceUrl)
|
|
23
|
+
.send({ name: 'Pikachu' })
|
|
24
|
+
.set('Content-Type', 'application/json');
|
|
25
|
+
expect(postResponse.statusCode).toEqual(201);
|
|
26
|
+
const id = postResponse.header.location?.split('/').pop();
|
|
27
|
+
// Send a PUT request to the id.
|
|
28
|
+
// The request body is empty because that's not important for this test.
|
|
29
|
+
const response = await request(tembaServer).put(`${resourceUrl}/${id}`);
|
|
30
|
+
expect(response.statusCode).toEqual(200);
|
|
31
|
+
});
|
|
32
|
+
test('PATCH with a requestBodyInterceptor that returns void', async () => {
|
|
33
|
+
const resourceUrl = '/pokemons';
|
|
34
|
+
// First create a resource, so we have an id to PUT to.
|
|
35
|
+
const postResponse = await request(tembaServer)
|
|
36
|
+
.post(resourceUrl)
|
|
37
|
+
.send({ name: 'Pikachu' })
|
|
38
|
+
.set('Content-Type', 'application/json');
|
|
39
|
+
expect(postResponse.statusCode).toEqual(201);
|
|
40
|
+
const id = postResponse.header.location?.split('/').pop();
|
|
41
|
+
// Send a PATCH request to the id.
|
|
42
|
+
// The request body is empty because that's not important for this test.
|
|
43
|
+
const response = await request(tembaServer).patch(`${resourceUrl}/${id}`);
|
|
44
|
+
expect(response.statusCode).toEqual(200);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=requestBodyInterceptor-void.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBodyInterceptor-void.test.js","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAE1C,QAAQ,CAAC,uFAAuF,EAAE,GAAG,EAAE;IACrG,MAAM,sBAAsB,GAAG;QAC7B,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;QACb,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KAChB,CAAA;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,EAAE,sBAAsB,EAAuB,CAAC,CAAA;IAEjF,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,WAAW,GAAG,SAAS,CAAA;QAE7B,uBAAuB;QACvB,wEAAwE;QACxE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAE7D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,WAAW,GAAG,WAAW,CAAA;QAE/B,uDAAuD;QACvD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;aAC5C,IAAI,CAAC,WAAW,CAAC;aACjB,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACzB,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QAC1C,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QAEzD,gCAAgC;QAChC,wEAAwE;QACxE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,EAAE,EAAE,CAAC,CAAA;QAEvE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,WAAW,GAAG,WAAW,CAAA;QAE/B,uDAAuD;QACvD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;aAC5C,IAAI,CAAC,WAAW,CAAC;aACjB,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACzB,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QAC1C,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QAEzD,kCAAkC;QAClC,wEAAwE;QACxE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,EAAE,EAAE,CAAC,CAAA;QAEzE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseBodyInterceptor.test.d.ts","sourceRoot":"","sources":["../../../test/integration/responseBodyInterceptor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { describe, beforeEach, test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from './createServer';
|
|
4
|
+
describe('responseBodyInterceptor unusual (but allowed) implementations', () => {
|
|
5
|
+
const noReturnValues = [undefined, null];
|
|
6
|
+
test.each(noReturnValues)('When responseBodyInterceptor returns nothing, return original response body', async (returnValue) => {
|
|
7
|
+
const tembaServer = createServer({
|
|
8
|
+
responseBodyInterceptor: () => {
|
|
9
|
+
//do not return anything when returnValue is undefined
|
|
10
|
+
if (typeof returnValue !== 'undefined')
|
|
11
|
+
return returnValue;
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
// Delete all items.
|
|
15
|
+
await request(tembaServer).delete('/stuff');
|
|
16
|
+
// As the responseBodyInterceptor returns nothing, the response body should be the same
|
|
17
|
+
// as it would be without the responseBodyInterceptor.
|
|
18
|
+
const response = await request(tembaServer).get('/stuff');
|
|
19
|
+
expect(response.statusCode).toEqual(200);
|
|
20
|
+
expect(response.text).toEqual('[]');
|
|
21
|
+
// Create an item
|
|
22
|
+
const { body: { id: newId }, } = await request(tembaServer).post('/stuff').send({ name: 'newItem' });
|
|
23
|
+
// As the responseBodyInterceptor returns nothing, the response body should be the same
|
|
24
|
+
// as it would be without the responseBodyInterceptor.
|
|
25
|
+
const response2 = await request(tembaServer).get('/stuff');
|
|
26
|
+
expect(response2.body.length).toBe(1);
|
|
27
|
+
expect(response2.body[0].name).toBe('newItem');
|
|
28
|
+
// Now get the item by its id, which should also just return the same item.
|
|
29
|
+
const response3 = await request(tembaServer).get('/stuff/' + newId);
|
|
30
|
+
expect(response3.body.name).toEqual('newItem');
|
|
31
|
+
});
|
|
32
|
+
test('When responseBodyInterceptor throws an exception, return a 500 status with error details', async () => {
|
|
33
|
+
const tembaServer = createServer({
|
|
34
|
+
responseBodyInterceptor: () => {
|
|
35
|
+
throw new Error('Something went wrong');
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
const response = await request(tembaServer).get('/stuff');
|
|
39
|
+
expect(response.statusCode).toEqual(500);
|
|
40
|
+
expect(response.body.message).toEqual(`Something went wrong`);
|
|
41
|
+
});
|
|
42
|
+
test('When responseBodyInterceptor does not return an object or array, still return the intercepted value', async () => {
|
|
43
|
+
const tembaServer = createServer({
|
|
44
|
+
responseBodyInterceptor: (info) => {
|
|
45
|
+
if ('id' in info) {
|
|
46
|
+
return 'A string, instead of an object';
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return 'A string, instead of an array';
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const { body: { id }, } = await request(tembaServer).post('/stuff').send({ name: 'newItem' });
|
|
54
|
+
const response = await request(tembaServer).get('/stuff');
|
|
55
|
+
expect(response.statusCode).toEqual(200);
|
|
56
|
+
expect(response.body).toEqual('A string, instead of an array');
|
|
57
|
+
const response2 = await request(tembaServer).get('/stuff/' + id);
|
|
58
|
+
expect(response2.statusCode).toEqual(200);
|
|
59
|
+
expect(response2.body).toEqual('A string, instead of an object');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('responseBodyInterceptor returns an updated response', () => {
|
|
63
|
+
const tembaServer = createServer({
|
|
64
|
+
responseBodyInterceptor: (info) => {
|
|
65
|
+
if (info.resource === 'stuff') {
|
|
66
|
+
if ('id' in info) {
|
|
67
|
+
return { ...info.body, extra: 'stuff' };
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return info.body.map((item, index) => ({
|
|
71
|
+
...item,
|
|
72
|
+
extra: 'stuff ' + index,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
beforeEach(async () => {
|
|
79
|
+
// Delete all items
|
|
80
|
+
await request(tembaServer).delete('/stuff');
|
|
81
|
+
});
|
|
82
|
+
test('GET a collection just returns the same collection', async () => {
|
|
83
|
+
// Create 2 items
|
|
84
|
+
await request(tembaServer).post('/stuff').send({ name: 'newItem1' });
|
|
85
|
+
await request(tembaServer).post('/stuff').send({ name: 'newItem2' });
|
|
86
|
+
// Now get the collection, which should have extra stuff
|
|
87
|
+
const getAllResponse = await request(tembaServer).get('/stuff');
|
|
88
|
+
expect(getAllResponse.status).toBe(200);
|
|
89
|
+
expect(getAllResponse.body.length).toBe(2);
|
|
90
|
+
expect(getAllResponse.body[0].name).toBe('newItem1');
|
|
91
|
+
expect(getAllResponse.body[0].extra).toBe('stuff 0');
|
|
92
|
+
expect(getAllResponse.body[1].name).toBe('newItem2');
|
|
93
|
+
expect(getAllResponse.body[1].extra).toBe('stuff 1');
|
|
94
|
+
});
|
|
95
|
+
test('GET an item just returns the same item', async () => {
|
|
96
|
+
// Create an item
|
|
97
|
+
const newItem = { name: 'newItem' };
|
|
98
|
+
const { body: { id }, } = await request(tembaServer).post('/stuff').send(newItem);
|
|
99
|
+
// Now get the item, which should just return the same item.
|
|
100
|
+
const response = await request(tembaServer).get('/stuff/' + id);
|
|
101
|
+
expect(response.statusCode).toEqual(200);
|
|
102
|
+
expect(response.body.name).toEqual('newItem');
|
|
103
|
+
expect(response.body.id).toEqual(id);
|
|
104
|
+
expect(response.body.extra).toEqual('stuff');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=responseBodyInterceptor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseBodyInterceptor.test.js","sourceRoot":"","sources":["../../../test/integration/responseBodyInterceptor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC3D,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CACvB,6EAA6E,EAC7E,KAAK,EAAE,WAAW,EAAE,EAAE;QACpB,MAAM,WAAW,GAAG,YAAY,CAAC;YAC/B,uBAAuB,EAAE,GAAG,EAAE;gBAC5B,sDAAsD;gBACtD,IAAI,OAAO,WAAW,KAAK,WAAW;oBAAE,OAAO,WAAW,CAAA;YAC5D,CAAC;SACmB,CAAC,CAAA;QAEvB,oBAAoB;QACpB,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAE3C,uFAAuF;QACvF,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEnC,iBAAiB;QACjB,MAAM,EACJ,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GACpB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAEvE,uFAAuF;QACvF,sDAAsD;QACtD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE9C,2EAA2E;QAC3E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAA;QACnE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAChD,CAAC,CACF,CAAA;IAED,IAAI,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,WAAW,GAAG,YAAY,CAAC;YAC/B,uBAAuB,EAAE,GAAG,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YACzC,CAAC;SACmB,CAAC,CAAA;QAEvB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACrH,MAAM,WAAW,GAAG,YAAY,CAAC;YAC/B,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,OAAO,gCAAgC,CAAA;gBACzC,CAAC;qBAAM,CAAC;oBACN,OAAO,+BAA+B,CAAA;gBACxC,CAAC;YACH,CAAC;SACmB,CAAC,CAAA;QAEvB,MAAM,EACJ,IAAI,EAAE,EAAE,EAAE,EAAE,GACb,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAEvE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAA;QAE9D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;QAChE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;IACnE,MAAM,WAAW,GAAG,YAAY,CAAC;QAC/B,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBACzC,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;wBACrC,GAAG,IAAI;wBACP,KAAK,EAAE,QAAQ,GAAG,KAAK;qBACxB,CAAC,CAAC,CAAA;gBACL,CAAC;YACH,CAAC;QACH,CAAC;KACmB,CAAC,CAAA;IAEvB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,mBAAmB;QACnB,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,iBAAiB;QACjB,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QACpE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QAEpE,wDAAwD;QACxD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC/D,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,iBAAiB;QACjB,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACnC,MAAM,EACJ,IAAI,EAAE,EAAE,EAAE,EAAE,GACb,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE3D,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;QAE/D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"returnNullFields.test.d.ts","sourceRoot":"","sources":["../../../test/integration/returnNullFields.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from './createServer';
|
|
4
|
+
/*
|
|
5
|
+
Tests when configuring returnNullFields.
|
|
6
|
+
*/
|
|
7
|
+
test.each([true, false])('returnNullFields setting is %s', async (returnNullFields) => {
|
|
8
|
+
const tembaServer = createServer({ returnNullFields });
|
|
9
|
+
// Create a car
|
|
10
|
+
const createResponse = await request(tembaServer)
|
|
11
|
+
.post('/cars')
|
|
12
|
+
.send({ brand: 'Mercedes-Benz', color: null });
|
|
13
|
+
expect(createResponse.body.brand).toBe('Mercedes-Benz');
|
|
14
|
+
if (returnNullFields)
|
|
15
|
+
expect(createResponse.body.color).toBeNull();
|
|
16
|
+
else
|
|
17
|
+
expect(createResponse.body.color).toBeUndefined();
|
|
18
|
+
// Fetch all cars
|
|
19
|
+
const getAllResponse = await request(tembaServer).get('/cars');
|
|
20
|
+
expect(getAllResponse.body[0].brand).toBe('Mercedes-Benz');
|
|
21
|
+
if (returnNullFields)
|
|
22
|
+
expect(getAllResponse.body[0].color).toBeNull();
|
|
23
|
+
else
|
|
24
|
+
expect(getAllResponse.body[0].color).toBeUndefined();
|
|
25
|
+
// Fetch one car
|
|
26
|
+
const getOneResponse = await request(tembaServer).get('/cars/' + createResponse.body.id);
|
|
27
|
+
expect(getOneResponse.body.brand).toBe('Mercedes-Benz');
|
|
28
|
+
if (returnNullFields)
|
|
29
|
+
expect(getOneResponse.body.color).toBeNull();
|
|
30
|
+
else
|
|
31
|
+
expect(getOneResponse.body.color).toBeUndefined();
|
|
32
|
+
// Replace one car
|
|
33
|
+
const replaceResponse = await request(tembaServer)
|
|
34
|
+
.put('/cars/' + createResponse.body.id)
|
|
35
|
+
.send({ brand: 'Mercedes-Benz', color: null });
|
|
36
|
+
expect(replaceResponse.body.brand).toBe('Mercedes-Benz');
|
|
37
|
+
if (returnNullFields)
|
|
38
|
+
expect(replaceResponse.body.color).toBeNull();
|
|
39
|
+
else
|
|
40
|
+
expect(replaceResponse.body.color).toBeUndefined();
|
|
41
|
+
// Update one car
|
|
42
|
+
const updateResponse = await request(tembaServer)
|
|
43
|
+
.patch('/cars/' + createResponse.body.id)
|
|
44
|
+
.send({ brand: 'Mercedes-Benz', color: null });
|
|
45
|
+
expect(updateResponse.body.brand).toBe('Mercedes-Benz');
|
|
46
|
+
if (returnNullFields)
|
|
47
|
+
expect(updateResponse.body.color).toBeNull();
|
|
48
|
+
else
|
|
49
|
+
expect(updateResponse.body.color).toBeUndefined();
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=returnNullFields.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"returnNullFields.test.js","sourceRoot":"","sources":["../../../test/integration/returnNullFields.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-url.test.d.ts","sourceRoot":"","sources":["../../../test/integration/root-url.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from './createServer';
|
|
4
|
+
/*
|
|
5
|
+
Tests on the root URL: "/"
|
|
6
|
+
*/
|
|
7
|
+
// This Temba server is created with the default configuration, i.e. no config object is supplied.
|
|
8
|
+
const tembaServer = createServer();
|
|
9
|
+
test('GET on root URL returns welcome text', async () => {
|
|
10
|
+
const response = await request(tembaServer).get('/');
|
|
11
|
+
expect(response.statusCode).toEqual(200);
|
|
12
|
+
expect(response.text).toEqual('It works! ツ');
|
|
13
|
+
});
|
|
14
|
+
test('POST on root URL returns Method Not Allowed error', async () => {
|
|
15
|
+
const response = await request(tembaServer).post('/');
|
|
16
|
+
expect(response.statusCode).toEqual(405);
|
|
17
|
+
expect(response.body.message).toEqual('Method Not Allowed');
|
|
18
|
+
});
|
|
19
|
+
test('PUT on root URL returns Method Not Allowed error', async () => {
|
|
20
|
+
const response = await request(tembaServer).put('/');
|
|
21
|
+
expect(response.statusCode).toEqual(405);
|
|
22
|
+
expect(response.body.message).toEqual('Method Not Allowed');
|
|
23
|
+
});
|
|
24
|
+
test('DELETE on root URL returns Method Not Allowed error', async () => {
|
|
25
|
+
const response = await request(tembaServer).delete('/');
|
|
26
|
+
expect(response.statusCode).toEqual(405);
|
|
27
|
+
expect(response.body.message).toEqual('Method Not Allowed');
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=root-url.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-url.test.js","sourceRoot":"","sources":["../../../test/integration/root-url.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC;;EAEE;AAEF,kGAAkG;AAClG,MAAM,WAAW,GAAG,YAAY,EAAE,CAAA;AAElC,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;IACtD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEpD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;IACnE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAErD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;IAClE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEpD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;IACrE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAEvD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validation.test.d.ts","sourceRoot":"","sources":["../../../test/integration/schema-validation.test.ts"],"names":[],"mappings":""}
|