temba 0.19.0 → 0.22.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/package.json +17 -17
- package/test/integration/api-prefix.test.d.ts +0 -2
- package/test/integration/api-prefix.test.d.ts.map +0 -1
- package/test/integration/api-prefix.test.js +0 -69
- package/test/integration/api-prefix.test.js.map +0 -1
- package/test/integration/createServer.d.ts +0 -4
- package/test/integration/createServer.d.ts.map +0 -1
- package/test/integration/createServer.js +0 -4
- package/test/integration/createServer.js.map +0 -1
- package/test/integration/crud.test.d.ts +0 -2
- package/test/integration/crud.test.d.ts.map +0 -1
- package/test/integration/crud.test.js +0 -173
- package/test/integration/crud.test.js.map +0 -1
- package/test/integration/custom-router.test.d.ts +0 -2
- package/test/integration/custom-router.test.d.ts.map +0 -1
- package/test/integration/custom-router.test.js +0 -74
- package/test/integration/custom-router.test.js.map +0 -1
- package/test/integration/head-method.test.d.ts +0 -2
- package/test/integration/head-method.test.d.ts.map +0 -1
- package/test/integration/head-method.test.js +0 -38
- package/test/integration/head-method.test.js.map +0 -1
- package/test/integration/options-method.test.d.ts +0 -2
- package/test/integration/options-method.test.d.ts.map +0 -1
- package/test/integration/options-method.test.js +0 -30
- package/test/integration/options-method.test.js.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts +0 -2
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js +0 -76
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts +0 -2
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js +0 -60
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts +0 -2
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js +0 -89
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts +0 -2
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts.map +0 -1
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js +0 -47
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js.map +0 -1
- package/test/integration/responseBodyInterceptor.test.d.ts +0 -2
- package/test/integration/responseBodyInterceptor.test.d.ts.map +0 -1
- package/test/integration/responseBodyInterceptor.test.js +0 -107
- package/test/integration/responseBodyInterceptor.test.js.map +0 -1
- package/test/integration/returnNullFields.test.d.ts +0 -2
- package/test/integration/returnNullFields.test.d.ts.map +0 -1
- package/test/integration/returnNullFields.test.js +0 -51
- package/test/integration/returnNullFields.test.js.map +0 -1
- package/test/integration/root-url.test.d.ts +0 -2
- package/test/integration/root-url.test.d.ts.map +0 -1
- package/test/integration/root-url.test.js +0 -29
- package/test/integration/root-url.test.js.map +0 -1
- package/test/integration/schema-validation.test.d.ts +0 -2
- package/test/integration/schema-validation.test.d.ts.map +0 -1
- package/test/integration/schema-validation.test.js +0 -169
- package/test/integration/schema-validation.test.js.map +0 -1
- package/test/unit/config/config.test.d.ts +0 -2
- package/test/unit/config/config.test.d.ts.map +0 -1
- package/test/unit/config/config.test.js +0 -121
- package/test/unit/config/config.test.js.map +0 -1
- package/test/unit/urls/urlParser.test.d.ts +0 -2
- package/test/unit/urls/urlParser.test.d.ts.map +0 -1
- package/test/unit/urls/urlParser.test.js +0 -43
- package/test/unit/urls/urlParser.test.js.map +0 -1
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.d.ts +0 -3
- package/vitest.config.d.ts.map +0 -1
- package/vitest.config.js +0 -10
- package/vitest.config.js.map +0 -1
- /package/{src/config → config}/index.d.ts +0 -0
- /package/{src/config → config}/index.d.ts.map +0 -0
- /package/{src/config → config}/index.js +0 -0
- /package/{src/config → config}/index.js.map +0 -0
- /package/{src/delay → delay}/delayMiddleware.d.ts +0 -0
- /package/{src/delay → delay}/delayMiddleware.d.ts.map +0 -0
- /package/{src/delay → delay}/delayMiddleware.js +0 -0
- /package/{src/delay → delay}/delayMiddleware.js.map +0 -0
- /package/{src/index.d.ts → index.d.ts} +0 -0
- /package/{src/index.d.ts.map → index.d.ts.map} +0 -0
- /package/{src/index.js → index.js} +0 -0
- /package/{src/index.js.map → index.js.map} +0 -0
- /package/{src/queries → queries}/in-memory.d.ts +0 -0
- /package/{src/queries → queries}/in-memory.d.ts.map +0 -0
- /package/{src/queries → queries}/in-memory.js +0 -0
- /package/{src/queries → queries}/in-memory.js.map +0 -0
- /package/{src/queries → queries}/mongo.d.ts +0 -0
- /package/{src/queries → queries}/mongo.d.ts.map +0 -0
- /package/{src/queries → queries}/mongo.js +0 -0
- /package/{src/queries → queries}/mongo.js.map +0 -0
- /package/{src/queries → queries}/queries.d.ts +0 -0
- /package/{src/queries → queries}/queries.d.ts.map +0 -0
- /package/{src/queries → queries}/queries.js +0 -0
- /package/{src/queries → queries}/queries.js.map +0 -0
- /package/{src/queries → queries}/types.d.ts +0 -0
- /package/{src/queries → queries}/types.d.ts.map +0 -0
- /package/{src/queries → queries}/types.js +0 -0
- /package/{src/queries → queries}/types.js.map +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/interceptRequestBody.d.ts +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/interceptRequestBody.d.ts.map +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/interceptRequestBody.js +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/interceptRequestBody.js.map +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/types.d.ts +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/types.d.ts.map +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/types.js +0 -0
- /package/{src/requestBodyInterceptor → requestBodyInterceptor}/types.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/delete.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/delete.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/delete.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/delete.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/get.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/get.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/get.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/get.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/index.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/index.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/index.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/index.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/patch.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/patch.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/patch.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/patch.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/post.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/post.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/post.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/post.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/put.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/put.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/put.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/put.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/types.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/types.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/types.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/types.js.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/utils.d.ts +0 -0
- /package/{src/requestHandlers → requestHandlers}/utils.d.ts.map +0 -0
- /package/{src/requestHandlers → requestHandlers}/utils.js +0 -0
- /package/{src/requestHandlers → requestHandlers}/utils.js.map +0 -0
- /package/{src/resourceRouter.d.ts → resourceRouter.d.ts} +0 -0
- /package/{src/resourceRouter.d.ts.map → resourceRouter.d.ts.map} +0 -0
- /package/{src/resourceRouter.js → resourceRouter.js} +0 -0
- /package/{src/resourceRouter.js.map → resourceRouter.js.map} +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/interceptResponseBody.d.ts +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/interceptResponseBody.d.ts.map +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/interceptResponseBody.js +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/interceptResponseBody.js.map +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/types.d.ts +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/types.d.ts.map +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/types.js +0 -0
- /package/{src/responseBodyInterceptor → responseBodyInterceptor}/types.js.map +0 -0
- /package/{src/schema → schema}/compile.d.ts +0 -0
- /package/{src/schema → schema}/compile.d.ts.map +0 -0
- /package/{src/schema → schema}/compile.js +0 -0
- /package/{src/schema → schema}/compile.js.map +0 -0
- /package/{src/schema → schema}/types.d.ts +0 -0
- /package/{src/schema → schema}/types.d.ts.map +0 -0
- /package/{src/schema → schema}/types.js +0 -0
- /package/{src/schema → schema}/types.js.map +0 -0
- /package/{src/schema → schema}/validate.d.ts +0 -0
- /package/{src/schema → schema}/validate.d.ts.map +0 -0
- /package/{src/schema → schema}/validate.js +0 -0
- /package/{src/schema → schema}/validate.js.map +0 -0
- /package/{src/urls → urls}/urlParser.d.ts +0 -0
- /package/{src/urls → urls}/urlParser.d.ts.map +0 -0
- /package/{src/urls → urls}/urlParser.js +0 -0
- /package/{src/urls → urls}/urlParser.js.map +0 -0
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "temba",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Get a simple MongoDB REST API with zero coding in less than 30 seconds (seriously).",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "rm -rf dist && tsc && cp package.json README.md ./dist",
|
|
8
|
+
"build": "rm -rf dist && tsc && cp package.json README.md ./dist/src",
|
|
9
9
|
"test": "vitest",
|
|
10
10
|
"test:watch": "vitest --watch",
|
|
11
11
|
"lint": "eslint --ignore-path .gitignore --ext .js,.ts .",
|
|
@@ -19,26 +19,26 @@
|
|
|
19
19
|
"author": "Bouwe (https://bouwe.io)",
|
|
20
20
|
"license": "ISC",
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@types/cors": "^2.8.
|
|
23
|
-
"@types/express": "^4.17.
|
|
24
|
-
"@types/morgan": "^1.9.
|
|
25
|
-
"@types/supertest": "^
|
|
26
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
27
|
-
"@typescript-eslint/parser": "^
|
|
28
|
-
"eslint": "^8.
|
|
29
|
-
"eslint-config-prettier": "^9.
|
|
30
|
-
"prettier": "^3.
|
|
31
|
-
"supertest": "^6.3.
|
|
32
|
-
"ts-node": "^10.9.
|
|
33
|
-
"typescript": "^5.
|
|
34
|
-
"vitest": "^1.
|
|
22
|
+
"@types/cors": "^2.8.17",
|
|
23
|
+
"@types/express": "^4.17.21",
|
|
24
|
+
"@types/morgan": "^1.9.9",
|
|
25
|
+
"@types/supertest": "^6.0.2",
|
|
26
|
+
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
|
27
|
+
"@typescript-eslint/parser": "^7.2.0",
|
|
28
|
+
"eslint": "^8.57.0",
|
|
29
|
+
"eslint-config-prettier": "^9.1.0",
|
|
30
|
+
"prettier": "^3.2.5",
|
|
31
|
+
"supertest": "^6.3.4",
|
|
32
|
+
"ts-node": "^10.9.2",
|
|
33
|
+
"typescript": "^5.4.2",
|
|
34
|
+
"vitest": "^1.4.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@rakered/mongo": "^1.6.0",
|
|
38
38
|
"ajv": "^8.12.0",
|
|
39
39
|
"connect-pause": "^0.1.0",
|
|
40
40
|
"cors": "^2.8.5",
|
|
41
|
-
"express": "^4.18.
|
|
41
|
+
"express": "^4.18.3",
|
|
42
42
|
"morgan": "^1.10.0"
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-prefix.test.d.ts","sourceRoot":"","sources":["../../../test/integration/api-prefix.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { test, expect } from 'vitest';
|
|
2
|
-
import request from 'supertest';
|
|
3
|
-
import createServer from './createServer';
|
|
4
|
-
/*
|
|
5
|
-
Tests when configuring the apiPrefix.
|
|
6
|
-
*/
|
|
7
|
-
// This Temba server is created with an apiPrefix configured
|
|
8
|
-
const apiPrefix = 'api';
|
|
9
|
-
const tembaServer = createServer({ apiPrefix });
|
|
10
|
-
test('GET on root URL returns 404 Not Found error', async () => {
|
|
11
|
-
const response = await request(tembaServer).get('/');
|
|
12
|
-
expect(response.statusCode).toEqual(404);
|
|
13
|
-
expect(response.body.message).toEqual('Not Found');
|
|
14
|
-
});
|
|
15
|
-
test('GET on apiPrefix URL returns welcome text', async () => {
|
|
16
|
-
const response = await request(tembaServer).get('/' + apiPrefix);
|
|
17
|
-
expect(response.statusCode).toEqual(200);
|
|
18
|
-
expect(response.text).toEqual('It works! ツ');
|
|
19
|
-
});
|
|
20
|
-
test('GET on apiPrefix and resource URL returns empty array', async () => {
|
|
21
|
-
const movies = '/' + apiPrefix + '/movies/';
|
|
22
|
-
expect((await request(tembaServer).get(movies)).statusCode).toEqual(200);
|
|
23
|
-
const post = await request(tembaServer).post(movies);
|
|
24
|
-
expect(post.statusCode).toEqual(201);
|
|
25
|
-
const movie = movies + post.body.id;
|
|
26
|
-
expect((await request(tembaServer).get(movie)).statusCode).toEqual(200);
|
|
27
|
-
expect((await request(tembaServer).get(movies)).statusCode).toEqual(200);
|
|
28
|
-
expect((await request(tembaServer).put(movie)).statusCode).toEqual(200);
|
|
29
|
-
expect((await request(tembaServer).patch(movie)).statusCode).toEqual(200);
|
|
30
|
-
expect((await request(tembaServer).delete(movie)).statusCode).toEqual(204);
|
|
31
|
-
});
|
|
32
|
-
test('GET on resource URL without apiPrefix returns 404 Not Found', async () => {
|
|
33
|
-
const response = await request(tembaServer).get('/movies');
|
|
34
|
-
expect(response.statusCode).toEqual(404);
|
|
35
|
-
});
|
|
36
|
-
test('POST on resource URL without apiPrefix returns 404 Not Found', async () => {
|
|
37
|
-
const response = await request(tembaServer).post('/movies');
|
|
38
|
-
expect(response.statusCode).toEqual(404);
|
|
39
|
-
});
|
|
40
|
-
test('PUT on resource URL without apiPrefix returns 404 Not Found', async () => {
|
|
41
|
-
const response = await request(tembaServer).put('/movies');
|
|
42
|
-
expect(response.statusCode).toEqual(404);
|
|
43
|
-
});
|
|
44
|
-
test('DELETE on resource URL without apiPrefix returns 404 Not Found', async () => {
|
|
45
|
-
const response = await request(tembaServer).delete('/movies');
|
|
46
|
-
expect(response.statusCode).toEqual(404);
|
|
47
|
-
});
|
|
48
|
-
test('PATCH on resource URL without apiPrefix returns 404 Not Found', async () => {
|
|
49
|
-
const response = await request(tembaServer).patch('/movies');
|
|
50
|
-
expect(response.statusCode).toEqual(404);
|
|
51
|
-
});
|
|
52
|
-
test('HEAD on resource URL without apiPrefix returns 404 Not Found', async () => {
|
|
53
|
-
const response = await request(tembaServer).head('/movies');
|
|
54
|
-
expect(response.statusCode).toEqual(404);
|
|
55
|
-
});
|
|
56
|
-
test('apiPrefix is equal to resource name', async () => {
|
|
57
|
-
const apiPrefix = 'movies';
|
|
58
|
-
const server = createServer({ apiPrefix });
|
|
59
|
-
const moviesUrl = `/${apiPrefix}/movies/`;
|
|
60
|
-
// Create a movie
|
|
61
|
-
const postResponse = await request(server).post(moviesUrl).send({ title: 'Inception' });
|
|
62
|
-
expect(postResponse.statusCode).toEqual(201);
|
|
63
|
-
const id = postResponse.header.location?.split('/').pop();
|
|
64
|
-
// Check if we can get the movie
|
|
65
|
-
const getResponse = await request(server).get(moviesUrl + id);
|
|
66
|
-
expect(getResponse.statusCode).toEqual(200);
|
|
67
|
-
expect(getResponse.body.title).toEqual('Inception');
|
|
68
|
-
});
|
|
69
|
-
//# sourceMappingURL=api-prefix.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-prefix.test.js","sourceRoot":"","sources":["../../../test/integration/api-prefix.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC;;EAEE;AAEF,4DAA4D;AAC5D,MAAM,SAAS,GAAG,KAAK,CAAA;AACvB,MAAM,WAAW,GAAG,YAAY,CAAC,EAAE,SAAS,EAAuB,CAAC,CAAA;AAEpE,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC7D,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,WAAW,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAA;IAEhE,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,uDAAuD,EAAE,KAAK,IAAI,EAAE;IACvE,MAAM,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,UAAU,CAAA;IAE3C,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAExE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;IAEnC,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAExE,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEzE,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC5E,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC9E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;IAChF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC7D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC9E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAA;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,SAAS,EAAuB,CAAC,CAAA;IAC/D,MAAM,SAAS,GAAG,IAAI,SAAS,UAAU,CAAA;IAEzC,iBAAiB;IACjB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IACvF,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAE5C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;IAEzD,gCAAgC;IAChC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IAC7D,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AACrD,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createServer.d.ts","sourceRoot":"","sources":["../../../test/integration/createServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,QAAA,MAAM,YAAY,YAAa,UAAU,4DAC+B,CAAA;AAExE,eAAe,YAAY,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createServer.js","sourceRoot":"","sources":["../../../test/integration/createServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAE,EAAE,CAC3C,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,IAAK,EAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAA;AAExE,eAAe,YAAY,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crud.test.d.ts","sourceRoot":"","sources":["../../../test/integration/crud.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { describe, beforeEach, test, expect } from 'vitest';
|
|
2
|
-
import request from 'supertest';
|
|
3
|
-
import createServer from './createServer';
|
|
4
|
-
/*
|
|
5
|
-
Tests for a CRUD roundtrip along all supported HTTP methods.
|
|
6
|
-
*/
|
|
7
|
-
describe('CRUD', () => {
|
|
8
|
-
// This Temba server is created with the default configuration, i.e. no config object is supplied.
|
|
9
|
-
const tembaServer = createServer();
|
|
10
|
-
const resource = '/articles/';
|
|
11
|
-
beforeEach(async () => {
|
|
12
|
-
// Delete all items.
|
|
13
|
-
await request(tembaServer).delete(resource);
|
|
14
|
-
});
|
|
15
|
-
test('Read, create, replace, update and delete resources', async () => {
|
|
16
|
-
// Initially, there are no items so a get all returns an empty array.
|
|
17
|
-
const getAllResponse = await request(tembaServer).get(resource);
|
|
18
|
-
expect(getAllResponse.status).toBe(200);
|
|
19
|
-
expect(getAllResponse.body.length).toBe(0);
|
|
20
|
-
// Initially, there are no items so a getting an id returns a 404.
|
|
21
|
-
const getOneResponse = await request(tembaServer).get(resource + 'id_does_not_exist');
|
|
22
|
-
expect(getOneResponse.status).toBe(404);
|
|
23
|
-
// Initially, there are no items so a replacing something by id returns a 404.
|
|
24
|
-
const nonExistingItem = {
|
|
25
|
-
id: 'id_does_not_exist',
|
|
26
|
-
name: 'this should fail',
|
|
27
|
-
};
|
|
28
|
-
const replaceNonExistingResponse = await request(tembaServer)
|
|
29
|
-
.put(resource + 'id_does_not_exist')
|
|
30
|
-
.send(nonExistingItem);
|
|
31
|
-
expect(replaceNonExistingResponse.status).toBe(404);
|
|
32
|
-
// Initially, there are no items so a updating something by id returns a 404.
|
|
33
|
-
const updateNonExistingResponse = await request(tembaServer)
|
|
34
|
-
.patch(resource + 'id_does_not_exist')
|
|
35
|
-
.send(nonExistingItem);
|
|
36
|
-
expect(updateNonExistingResponse.status).toBe(404);
|
|
37
|
-
// Initially, there are no items, but deleting an id always returns a 204 anyway.
|
|
38
|
-
const deleteNonExistingResponse = await request(tembaServer).delete(resource + 'id_does_not_exist');
|
|
39
|
-
expect(deleteNonExistingResponse.status).toBe(204);
|
|
40
|
-
// Check again there are still no items.
|
|
41
|
-
const getAllResponse2 = await request(tembaServer).get(resource);
|
|
42
|
-
expect(getAllResponse2.status).toBe(200);
|
|
43
|
-
expect(getAllResponse2.body.length).toBe(0);
|
|
44
|
-
// Create a new item.
|
|
45
|
-
const newItem = { name: 'newItem', done: false };
|
|
46
|
-
const createNewResponse = await request(tembaServer).post(resource).send(newItem);
|
|
47
|
-
const createdNewItem = createNewResponse.body;
|
|
48
|
-
expect(createNewResponse.status).toBe(201);
|
|
49
|
-
expect(createdNewItem.name).toBe('newItem');
|
|
50
|
-
expect(createdNewItem.done).toBe(false);
|
|
51
|
-
expect(createNewResponse.header.location?.endsWith(resource + createdNewItem.id)).toBe(true);
|
|
52
|
-
// Now there is one item. Get all items.
|
|
53
|
-
const getAllOneItemResponse = await request(tembaServer).get(resource);
|
|
54
|
-
expect(getAllOneItemResponse.status).toBe(200);
|
|
55
|
-
expect(getAllOneItemResponse.body.length).toBe(1);
|
|
56
|
-
expect(getAllOneItemResponse.body[0].name).toBe('newItem');
|
|
57
|
-
expect(getAllOneItemResponse.body[0].id).toBe(createdNewItem.id);
|
|
58
|
-
// Get one item by ID.
|
|
59
|
-
const getJustOneItemResponse = await request(tembaServer).get(resource + createdNewItem.id);
|
|
60
|
-
expect(getJustOneItemResponse.status).toBe(200);
|
|
61
|
-
expect(getJustOneItemResponse.body.name).toBe('newItem');
|
|
62
|
-
expect(getJustOneItemResponse.body.id).toBe(createdNewItem.id);
|
|
63
|
-
// Replace (PUT) one item by ID.
|
|
64
|
-
// Here we add the field "hello" and "foo", and remove the field "done"
|
|
65
|
-
const replacedItem = { name: 'replacedItem', hello: 'world', foo: 'bar' };
|
|
66
|
-
const replaceResponse = await request(tembaServer)
|
|
67
|
-
.put(resource + createdNewItem.id)
|
|
68
|
-
.send(replacedItem);
|
|
69
|
-
expect(replaceResponse.status).toBe(200);
|
|
70
|
-
expect(replaceResponse.body.name).toBe('replacedItem');
|
|
71
|
-
expect(replaceResponse.body.hello).toEqual('world');
|
|
72
|
-
expect(replaceResponse.body.foo).toEqual('bar');
|
|
73
|
-
expect(replaceResponse.body.done).toBeUndefined();
|
|
74
|
-
expect(replaceResponse.body.id).toEqual(createdNewItem.id);
|
|
75
|
-
// Get one item by ID.
|
|
76
|
-
const getJustOneReplacedItemResponse = await request(tembaServer).get(resource + createdNewItem.id);
|
|
77
|
-
expect(getJustOneReplacedItemResponse.status).toBe(200);
|
|
78
|
-
expect(getJustOneReplacedItemResponse.body.name).toBe('replacedItem');
|
|
79
|
-
expect(getJustOneReplacedItemResponse.body.hello).toEqual('world');
|
|
80
|
-
expect(getJustOneReplacedItemResponse.body.foo).toEqual('bar');
|
|
81
|
-
expect(getJustOneReplacedItemResponse.body.id).toBe(createdNewItem.id);
|
|
82
|
-
// Update (PATCH) one item by ID.
|
|
83
|
-
// Here we update the "name", add the "something" field, clear the "foo" field, and leave all other properties unchanged.
|
|
84
|
-
const updatedItem = { name: 'updatedItem', something: 'in the way', foo: null };
|
|
85
|
-
const updateResponse = await request(tembaServer)
|
|
86
|
-
.patch(resource + createdNewItem.id)
|
|
87
|
-
.send(updatedItem);
|
|
88
|
-
expect(updateResponse.status).toBe(200);
|
|
89
|
-
expect(updateResponse.body.name).toBe('updatedItem');
|
|
90
|
-
expect(updateResponse.body.hello).toEqual('world');
|
|
91
|
-
expect(updateResponse.body.something).toEqual('in the way');
|
|
92
|
-
expect(updateResponse.body.foo).toBeNull();
|
|
93
|
-
expect(updateResponse.body.id).toEqual(createdNewItem.id);
|
|
94
|
-
// Get one item by ID.
|
|
95
|
-
const getJustOneUpdatedItemResponse = await request(tembaServer).get(resource + createdNewItem.id);
|
|
96
|
-
expect(getJustOneUpdatedItemResponse.status).toBe(200);
|
|
97
|
-
expect(getJustOneUpdatedItemResponse.body.name).toBe('updatedItem');
|
|
98
|
-
expect(getJustOneUpdatedItemResponse.body.hello).toEqual('world');
|
|
99
|
-
expect(getJustOneUpdatedItemResponse.body.something).toEqual('in the way');
|
|
100
|
-
expect(getJustOneUpdatedItemResponse.body.foo).toBeNull();
|
|
101
|
-
expect(getJustOneUpdatedItemResponse.body.id).toBe(createdNewItem.id);
|
|
102
|
-
// Delete one item by ID.
|
|
103
|
-
const deleteResponse = await request(tembaServer).delete(resource + createdNewItem.id);
|
|
104
|
-
expect(deleteResponse.status).toBe(204);
|
|
105
|
-
// Get one item by ID.
|
|
106
|
-
const getJustDeletedItemResponse = await request(tembaServer).get(resource + createdNewItem.id);
|
|
107
|
-
expect(getJustDeletedItemResponse.status).toBe(404);
|
|
108
|
-
// Check there are no items anymore.
|
|
109
|
-
const getAllResponse3 = await request(tembaServer).get(resource);
|
|
110
|
-
expect(getAllResponse3.status).toBe(200);
|
|
111
|
-
expect(getAllResponse2.body.length).toBe(0);
|
|
112
|
-
});
|
|
113
|
-
test('When POSTing and PUTting with ID in request body, ignore ID in body', async () => {
|
|
114
|
-
const hardCodedIdToIgnore = 'myID';
|
|
115
|
-
// Initially, there are no items so a get all returns an empty array.
|
|
116
|
-
const getAllResponse = await request(tembaServer).get(resource);
|
|
117
|
-
expect(getAllResponse.status).toBe(200);
|
|
118
|
-
expect(getAllResponse.body.length).toBe(0);
|
|
119
|
-
// Create a new item, but ignore the ID in the request body.
|
|
120
|
-
const newItem = { id: hardCodedIdToIgnore, name: 'newItem' };
|
|
121
|
-
const createNewResponse = await request(tembaServer).post(resource).send(newItem);
|
|
122
|
-
const newCreatedItem = createNewResponse.body;
|
|
123
|
-
expect(createNewResponse.status).toBe(201);
|
|
124
|
-
expect(newCreatedItem.name).toBe('newItem');
|
|
125
|
-
expect(newCreatedItem.id.length).toBeGreaterThan(0);
|
|
126
|
-
expect(newCreatedItem.id).not.toEqual(hardCodedIdToIgnore);
|
|
127
|
-
// Replace one item by ID in the URI and ignore the ID in the request body.
|
|
128
|
-
const replacedItem = { id: hardCodedIdToIgnore, name: 'replacedItem' };
|
|
129
|
-
const replaceResponse = await request(tembaServer)
|
|
130
|
-
.put(resource + newCreatedItem.id)
|
|
131
|
-
.send(replacedItem);
|
|
132
|
-
expect(replaceResponse.status).toBe(200);
|
|
133
|
-
expect(replaceResponse.body.name).toBe('replacedItem');
|
|
134
|
-
expect(replaceResponse.body.id).toEqual(newCreatedItem.id);
|
|
135
|
-
// Update one item by ID in the URI and ignore the ID in the request body.
|
|
136
|
-
const updatedItem = { id: hardCodedIdToIgnore, name: 'updatedItem' };
|
|
137
|
-
const updateResponse = await request(tembaServer)
|
|
138
|
-
.put(resource + newCreatedItem.id)
|
|
139
|
-
.send(updatedItem);
|
|
140
|
-
expect(updateResponse.status).toBe(200);
|
|
141
|
-
expect(updateResponse.body.name).toBe('updatedItem');
|
|
142
|
-
expect(updateResponse.body.id).toEqual(newCreatedItem.id);
|
|
143
|
-
// Now there is one item. Get all items.
|
|
144
|
-
const getAllOneItemResponse = await request(tembaServer).get(resource);
|
|
145
|
-
expect(getAllOneItemResponse.status).toBe(200);
|
|
146
|
-
expect(getAllOneItemResponse.body.length).toBe(1);
|
|
147
|
-
expect(getAllOneItemResponse.body[0].name).toBe('updatedItem');
|
|
148
|
-
expect(getAllOneItemResponse.body[0].id).toBe(newCreatedItem.id);
|
|
149
|
-
});
|
|
150
|
-
test('DELETE on resource URL (without ID) deletes all resources', async () => {
|
|
151
|
-
// Create 2 new items.
|
|
152
|
-
const createNewResponse1 = await request(tembaServer).post(resource).send({ name: 'item 1' });
|
|
153
|
-
expect(createNewResponse1.status).toBe(201);
|
|
154
|
-
const item1Id = createNewResponse1.body.id;
|
|
155
|
-
const createNewResponse2 = await request(tembaServer).post(resource).send({ name: 'item 2' });
|
|
156
|
-
expect(createNewResponse2.status).toBe(201);
|
|
157
|
-
const item2Id = createNewResponse2.body.id;
|
|
158
|
-
// Get all items, there should be 2.
|
|
159
|
-
const getAllResponse = await request(tembaServer).get(resource);
|
|
160
|
-
expect(getAllResponse.status).toBe(200);
|
|
161
|
-
expect(getAllResponse.body.length).toBe(2);
|
|
162
|
-
expect(getAllResponse.body[0].id).toBe(item1Id);
|
|
163
|
-
expect(getAllResponse.body[1].id).toBe(item2Id);
|
|
164
|
-
// Delete all items with a DELETE call on the resource URL instead of an ID.
|
|
165
|
-
const deleteResponse = await request(tembaServer).delete(resource);
|
|
166
|
-
expect(deleteResponse.status).toBe(204);
|
|
167
|
-
// Get all items, there should be 0.
|
|
168
|
-
const getAllResponse2 = await request(tembaServer).get(resource);
|
|
169
|
-
expect(getAllResponse2.status).toBe(200);
|
|
170
|
-
expect(getAllResponse2.body.length).toBe(0);
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
//# sourceMappingURL=crud.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crud.test.js","sourceRoot":"","sources":["../../../test/integration/crud.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"custom-router.test.d.ts","sourceRoot":"","sources":["../../../test/integration/custom-router.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,74 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"custom-router.test.js","sourceRoot":"","sources":["../../../test/integration/custom-router.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"head-method.test.d.ts","sourceRoot":"","sources":["../../../test/integration/head-method.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,38 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"options-method.test.d.ts","sourceRoot":"","sources":["../../../test/integration/options-method.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,30 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requestBodyInterceptor-change-requestBody.test.d.ts","sourceRoot":"","sources":["../../../../test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.ts"],"names":[],"mappings":""}
|