temba 0.17.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 +58 -10
- package/package.json +17 -17
- package/{config → src/config}/index.d.ts +15 -8
- package/src/config/index.d.ts.map +1 -0
- package/{config → src/config}/index.js +23 -28
- 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/src/queries/types.js.map +1 -0
- 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/src/requestHandlers/types.js.map +1 -0
- package/src/requestHandlers/utils.d.ts +2 -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/src/schema/types.d.ts +25 -0
- package/src/schema/types.d.ts.map +1 -0
- package/src/schema/types.js +2 -0
- package/{routes → src/schema}/types.js.map +1 -1
- package/src/schema/validate.d.ts +4 -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 -94
- package/index.js.map +0 -1
- package/queries/in-memory.d.ts +0 -19
- package/queries/in-memory.js +0 -66
- package/queries/in-memory.js.map +0 -1
- package/queries/mongo.d.ts +0 -19
- package/queries/mongo.js +0 -106
- package/queries/mongo.js.map +0 -1
- package/queries/queries.d.ts +0 -20
- package/queries/queries.js +0 -17
- package/queries/queries.js.map +0 -1
- package/routes/delete.d.ts +0 -4
- package/routes/delete.js +0 -39
- package/routes/delete.js.map +0 -1
- package/routes/get.d.ts +0 -4
- package/routes/get.js +0 -71
- package/routes/get.js.map +0 -1
- package/routes/interceptors.d.ts +0 -3
- package/routes/interceptors.js +0 -22
- package/routes/interceptors.js.map +0 -1
- package/routes/patch.d.ts +0 -4
- package/routes/patch.js +0 -47
- package/routes/patch.js.map +0 -1
- package/routes/post.d.ts +0 -4
- package/routes/post.js +0 -47
- package/routes/post.js.map +0 -1
- package/routes/put.d.ts +0 -4
- package/routes/put.js +0 -47
- package/routes/put.js.map +0 -1
- package/routes/routes.d.ts +0 -6
- package/routes/routes.js +0 -61
- package/routes/routes.js.map +0 -1
- package/routes/types.d.ts +0 -17
- package/routes/types.js +0 -3
- package/routes/utils.d.ts +0 -3
- package/routes/utils.js +0 -8
- package/routes/utils.js.map +0 -1
- package/urls/urlMiddleware.d.ts +0 -3
- package/urls/urlMiddleware.js +0 -30
- 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,74 @@
|
|
|
1
|
+
import { describe, test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
import createServer from './createServer';
|
|
5
|
+
describe('Configuring only a customRouter', () => {
|
|
6
|
+
const customRouter = express.Router();
|
|
7
|
+
customRouter.get('/', async (_, res) => {
|
|
8
|
+
return res.send('Overriding the root URL should not be possible...');
|
|
9
|
+
});
|
|
10
|
+
customRouter.get('/hello', async (_, res) => {
|
|
11
|
+
return res.send('Hello, World!');
|
|
12
|
+
});
|
|
13
|
+
const tembaServer = createServer({ customRouter });
|
|
14
|
+
test("Temba's root URL takes presedence over a root URL in a customRouter", async () => {
|
|
15
|
+
// The root URL is controlled by Temba, so the custom router's root URL is ignored.
|
|
16
|
+
const rootResponse = await request(tembaServer).get('/');
|
|
17
|
+
expect(rootResponse.statusCode).toEqual(200);
|
|
18
|
+
expect(rootResponse.text).toEqual('It works! ツ');
|
|
19
|
+
// As we did not configure resources, any resource route is handled by Temba and return an empty array.
|
|
20
|
+
const getAllResponse = await request(tembaServer).get('/stuff');
|
|
21
|
+
expect(getAllResponse.status).toBe(200);
|
|
22
|
+
expect(getAllResponse.body.length).toBe(0);
|
|
23
|
+
// However, the /hello route is configured through a custom Express router,
|
|
24
|
+
// so it overrides the Temba route.
|
|
25
|
+
const response = await request(tembaServer).get('/hello');
|
|
26
|
+
expect(response.statusCode).toEqual(200);
|
|
27
|
+
expect(response.text).toEqual('Hello, World!');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('Configuring customRouter + resources', () => {
|
|
31
|
+
const customRouter = express.Router();
|
|
32
|
+
customRouter.get('/hello', async (_, res) => {
|
|
33
|
+
return res.send('Hello, World!');
|
|
34
|
+
});
|
|
35
|
+
const tembaServer = createServer({
|
|
36
|
+
customRouter,
|
|
37
|
+
resources: ['hello'],
|
|
38
|
+
});
|
|
39
|
+
test('customRouter takes presedence over resources', async () => {
|
|
40
|
+
// The /hello route is configured both through a custom Express router,
|
|
41
|
+
// and as resource, but the customRouter overrides the Temba route.
|
|
42
|
+
const response = await request(tembaServer).get('/hello');
|
|
43
|
+
expect(response.statusCode).toEqual(200);
|
|
44
|
+
expect(response.text).toEqual('Hello, World!');
|
|
45
|
+
});
|
|
46
|
+
describe('Configuring customRouter + apiPrefix', () => {
|
|
47
|
+
const customRouter = express.Router();
|
|
48
|
+
customRouter.get('/hello', async (_, res) => {
|
|
49
|
+
return res.send('Hello, World!');
|
|
50
|
+
});
|
|
51
|
+
customRouter.get('/api/goodbye', async (_, res) => {
|
|
52
|
+
return res.send('Goodbye, World!');
|
|
53
|
+
});
|
|
54
|
+
const tembaServer = createServer({
|
|
55
|
+
apiPrefix: '/api',
|
|
56
|
+
customRouter,
|
|
57
|
+
});
|
|
58
|
+
test('customRouter takes presedence over apiPrefix routes', async () => {
|
|
59
|
+
// As we did not configure resources, any resource route through the apiPrefix is handled by Temba and return an empty array.
|
|
60
|
+
const getAllResponse = await request(tembaServer).get('/api/hello');
|
|
61
|
+
expect(getAllResponse.status).toBe(200);
|
|
62
|
+
expect(getAllResponse.body.length).toBe(0);
|
|
63
|
+
// The /hello route is is from customRouter, and outside the apiPrefix path, so still works with customRouter.
|
|
64
|
+
const response2 = await request(tembaServer).get('/hello');
|
|
65
|
+
expect(response2.statusCode).toEqual(200);
|
|
66
|
+
expect(response2.text).toEqual('Hello, World!');
|
|
67
|
+
// The /api/goodbye route is from customRouter, and also within the apiPrefix path, but still uses the customRouter's implementation.
|
|
68
|
+
const customRouterresponse = await request(tembaServer).get('/api/goodbye');
|
|
69
|
+
expect(customRouterresponse.statusCode).toEqual(200);
|
|
70
|
+
expect(customRouterresponse.text).toEqual('Goodbye, World!');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=custom-router.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-router.test.js","sourceRoot":"","sources":["../../../test/integration/custom-router.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head-method.test.d.ts","sourceRoot":"","sources":["../../../test/integration/head-method.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
|
+
import request from 'supertest';
|
|
3
|
+
import createServer from './createServer';
|
|
4
|
+
/*
|
|
5
|
+
Tests for HEAD requests
|
|
6
|
+
*/
|
|
7
|
+
// This Temba server is created with the default configuration, i.e. no config object is supplied.
|
|
8
|
+
const tembaServer = createServer();
|
|
9
|
+
const resource = '/cars/';
|
|
10
|
+
test('HEAD returns the same response as a GET, except the response body', async () => {
|
|
11
|
+
// A GET on a non existing resource yields a 404.
|
|
12
|
+
const getResponse = await request(tembaServer).get(resource + 'id_does_not_exist');
|
|
13
|
+
expect(getResponse.status).toBe(404);
|
|
14
|
+
// A HEAD on a non existing resource yields a 404.
|
|
15
|
+
const headResponse = await request(tembaServer).head(resource + 'id_does_not_exist');
|
|
16
|
+
expect(headResponse.status).toBe(404);
|
|
17
|
+
// Now create a new item.
|
|
18
|
+
const newItem = { brand: 'Mercedes-Benz' };
|
|
19
|
+
const { body: { id: newItemId }, } = await request(tembaServer).post(resource).send(newItem);
|
|
20
|
+
// Both a GET and HEAD on the new item yield a 200 and have the same content length.
|
|
21
|
+
const getNewResponse = await request(tembaServer).get(resource + newItemId);
|
|
22
|
+
expect(getNewResponse.status).toBe(200);
|
|
23
|
+
expect(getNewResponse.body.brand).toBe(newItem.brand);
|
|
24
|
+
let contentLength = getNewResponse.header['content-length'];
|
|
25
|
+
const headNewResponse = await request(tembaServer).head(resource + newItemId);
|
|
26
|
+
expect(headNewResponse.status).toBe(200);
|
|
27
|
+
expect(headNewResponse.header['content-length']).toBe(contentLength);
|
|
28
|
+
// However, the HEAD response has no body.
|
|
29
|
+
expect(JSON.stringify(headNewResponse.body)).toBe('{}');
|
|
30
|
+
// A GET and HEAD on the resource collection also have the same content length.
|
|
31
|
+
const getCollectionResponse = await request(tembaServer).get(resource);
|
|
32
|
+
expect(getCollectionResponse.status).toBe(200);
|
|
33
|
+
contentLength = getCollectionResponse.header['content-length'];
|
|
34
|
+
const headCollectionResponse = await request(tembaServer).head(resource);
|
|
35
|
+
expect(headCollectionResponse.status).toBe(200);
|
|
36
|
+
expect(headCollectionResponse.header['content-length']).toBe(contentLength);
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=head-method.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head-method.test.js","sourceRoot":"","sources":["../../../test/integration/head-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;AAEzC;;EAEE;AAEF,kGAAkG;AAClG,MAAM,WAAW,GAAG,YAAY,EAAE,CAAA;AAElC,MAAM,QAAQ,GAAG,QAAQ,CAAA;AAEzB,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;IACnF,iDAAiD;IACjD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,mBAAmB,CAAC,CAAA;IAClF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEpC,kDAAkD;IAClD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC,CAAA;IACpF,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAErC,yBAAyB;IACzB,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;IAC1C,MAAM,EACJ,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GACxB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAE3D,oFAAoF;IACpF,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IAC3E,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrD,IAAI,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAE3D,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IAC7E,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAEpE,0CAA0C;IAC1C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEvD,+EAA+E;IAC/E,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACtE,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9C,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC9D,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxE,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAC7E,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-method.test.d.ts","sourceRoot":"","sources":["../../../test/integration/options-method.test.ts"],"names":[],"mappings":""}
|
|
@@ -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":""}
|