@natlibfi/fixugen-http-server 1.1.22 → 2.0.0-alpha.1
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/.github/workflows/melinda-node-tests.yml +8 -6
- package/README.md +1 -1
- package/dist/index.js +65 -87
- package/dist/index.js.map +7 -1
- package/dist/index.test.js +51 -0
- package/dist/index.test.js.map +7 -0
- package/eslint.config.js +53 -0
- package/package.json +15 -81
- package/src/index.js +58 -52
- package/src/index.test.js +62 -0
- package/dist/index.spec.js +0 -38
- package/dist/index.spec.js.map +0 -1
- package/src/index.spec.js +0 -34
|
@@ -11,12 +11,12 @@ jobs:
|
|
|
11
11
|
|
|
12
12
|
strategy:
|
|
13
13
|
matrix:
|
|
14
|
-
node-version: [
|
|
14
|
+
node-version: [22.x, 24.x]
|
|
15
15
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
16
16
|
|
|
17
17
|
steps:
|
|
18
18
|
- name: Checkout the code
|
|
19
|
-
uses: actions/checkout@
|
|
19
|
+
uses: actions/checkout@v5
|
|
20
20
|
- name: Use Node.js ${{ matrix.node-version }}
|
|
21
21
|
uses: actions/setup-node@v4
|
|
22
22
|
with:
|
|
@@ -32,20 +32,22 @@ jobs:
|
|
|
32
32
|
license-scan:
|
|
33
33
|
name: License compliance check
|
|
34
34
|
runs-on: ubuntu-latest
|
|
35
|
+
container: docker://node:22
|
|
35
36
|
|
|
36
37
|
steps:
|
|
37
|
-
- uses: actions/checkout@
|
|
38
|
-
- uses: mikaelvesavuori/license-compliance-action@v1
|
|
38
|
+
- uses: actions/checkout@v5
|
|
39
|
+
- uses: mikaelvesavuori/license-compliance-action@v1
|
|
39
40
|
with:
|
|
40
41
|
exclude_pattern: /^@natlibfi/
|
|
41
42
|
|
|
42
43
|
njsscan:
|
|
43
44
|
name: Njsscan check
|
|
44
45
|
runs-on: ubuntu-latest
|
|
46
|
+
container: docker://node:22
|
|
45
47
|
|
|
46
48
|
steps:
|
|
47
49
|
- name: Checkout the code
|
|
48
|
-
uses: actions/checkout@
|
|
50
|
+
uses: actions/checkout@v5
|
|
49
51
|
- name: nodejsscan scan
|
|
50
52
|
id: njsscan
|
|
51
53
|
uses: ajinabraham/njsscan-action@master
|
|
@@ -58,7 +60,7 @@ jobs:
|
|
|
58
60
|
if: contains(github.ref, 'refs/tags/')
|
|
59
61
|
|
|
60
62
|
steps:
|
|
61
|
-
- uses: actions/checkout@
|
|
63
|
+
- uses: actions/checkout@v5
|
|
62
64
|
# Setup .npmrc file to publish to npm
|
|
63
65
|
- uses: actions/setup-node@v4
|
|
64
66
|
with:
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
[](https://npmjs.org/package/@natlibfi/fixugen-http-server) []()
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
Generates unit tests with fixugen
|
|
5
|
+
Generates unit tests with fixugen. Starts a HTTP server which is tested with generic HTTP request and response expectations.
|
|
6
6
|
|
|
7
7
|
Uses [fixugen's](https://www.npmjs.com/package/@natlibfi/fixugen) **useMetadataFile** so your fixture directories must contain **metadata.json** file.
|
|
8
8
|
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
var _default = ({
|
|
14
|
-
path,
|
|
15
|
-
recurse,
|
|
16
|
-
formatResponse = formatResponseDefault,
|
|
17
|
-
callback: createApp,
|
|
18
|
-
mocha = {}
|
|
19
|
-
}) => {
|
|
20
|
-
let requester; // eslint-disable-line functional/no-let
|
|
21
|
-
|
|
22
|
-
_chai.default.use(_chaiHttp.default);
|
|
23
|
-
(0, _fixugen.default)({
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { READERS } from "@natlibfi/fixura";
|
|
3
|
+
import generateTests from "@natlibfi/fixugen";
|
|
4
|
+
import createDebugLogger from "debug";
|
|
5
|
+
import { promisify } from "util";
|
|
6
|
+
export default ({ path, recurse, formatResponse = formatResponseDefault, callback: createApp, hooks = {} }) => {
|
|
7
|
+
const setTimeoutPromise = promisify(setTimeout);
|
|
8
|
+
const debug = createDebugLogger("@natlibfi/fixugen-http-server");
|
|
9
|
+
const debugDev = createDebugLogger("@natlibfi/fixugen-http-server:dev");
|
|
10
|
+
generateTests({
|
|
24
11
|
path,
|
|
25
12
|
recurse,
|
|
26
13
|
callback: httpCallback,
|
|
@@ -28,84 +15,75 @@ var _default = ({
|
|
|
28
15
|
fixura: {
|
|
29
16
|
failWhenNotFound: false
|
|
30
17
|
},
|
|
31
|
-
|
|
32
|
-
...
|
|
33
|
-
afterEach: mochaAfterEach
|
|
18
|
+
hooks: {
|
|
19
|
+
...hooks
|
|
34
20
|
}
|
|
35
21
|
});
|
|
36
|
-
async function
|
|
37
|
-
if (mocha.afterEach) {
|
|
38
|
-
await mocha.afterEach();
|
|
39
|
-
return closeRequester();
|
|
40
|
-
}
|
|
41
|
-
closeRequester();
|
|
42
|
-
function closeRequester() {
|
|
43
|
-
/* istanbul ignore else: Not easily tested */
|
|
44
|
-
if (requester) {
|
|
45
|
-
return requester.close();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
async function httpCallback({
|
|
50
|
-
getFixtures,
|
|
51
|
-
requests,
|
|
52
|
-
...options
|
|
53
|
-
}) {
|
|
22
|
+
async function httpCallback({ getFixtures, requests, ...options }) {
|
|
54
23
|
const requestFixtures = getFixtures({
|
|
55
24
|
components: [/^request[0-9]+\..*$/u],
|
|
56
|
-
reader:
|
|
25
|
+
reader: READERS.TEXT
|
|
57
26
|
});
|
|
58
27
|
const responseFixtures = getFixtures({
|
|
59
28
|
components: [/^response[0-9]+\..*$/u],
|
|
60
|
-
reader:
|
|
61
|
-
});
|
|
62
|
-
const app = await createApp({
|
|
63
|
-
...options,
|
|
64
|
-
requests
|
|
29
|
+
reader: READERS.TEXT
|
|
65
30
|
});
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
requestParams = {},
|
|
76
|
-
requestHeaders = {},
|
|
77
|
-
responseHeaders = {}
|
|
78
|
-
} = testRequest;
|
|
79
|
-
const requestPayload = requestFixtures[index];
|
|
80
|
-
const requestPath = path || '/';
|
|
81
|
-
const requestMethod = method.toLowerCase();
|
|
82
|
-
const request = requester[requestMethod](requestPath).buffer(true);
|
|
83
|
-
request.query(requestParams);
|
|
84
|
-
Object.entries(requestHeaders).forEach(([k, v]) => request.set(k, v));
|
|
85
|
-
const response = await request.send(requestPayload);
|
|
86
|
-
await handleResponse(response, status, responseHeaders);
|
|
87
|
-
return iterate(requests.slice(1), index + 1);
|
|
31
|
+
const server = await createApp({ getFixtures, ...options, requests });
|
|
32
|
+
await iterate(requests, server);
|
|
33
|
+
return;
|
|
34
|
+
async function iterate(testRequests, server2, index = 0) {
|
|
35
|
+
const [testRequest, ...rest] = testRequests;
|
|
36
|
+
if (testRequest === void 0) {
|
|
37
|
+
await server2.close();
|
|
38
|
+
debug("Server closed");
|
|
39
|
+
return;
|
|
88
40
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
41
|
+
debug("Iteration", index);
|
|
42
|
+
debugDev(testRequest);
|
|
43
|
+
const {
|
|
44
|
+
method,
|
|
45
|
+
path: path2,
|
|
46
|
+
status,
|
|
47
|
+
requestParams = {},
|
|
48
|
+
requestHeaders = {},
|
|
49
|
+
responseHeaders = {}
|
|
50
|
+
} = testRequest;
|
|
51
|
+
const requestPayload = requestFixtures[index];
|
|
52
|
+
const requestPath = path2 || "/";
|
|
53
|
+
const requestMethod = method.toLowerCase();
|
|
54
|
+
const parsedParams = new URLSearchParams(requestParams).toString();
|
|
55
|
+
const url = `http://localhost:1337${requestPath}${parsedParams === "" ? "" : "?" + parsedParams}`;
|
|
56
|
+
debugDev(url);
|
|
57
|
+
const response = await fetch(url, { method: requestMethod, headers: requestHeaders, body: requestPayload });
|
|
58
|
+
await handleResponse(response, status, responseHeaders);
|
|
59
|
+
return iterate(rest, server2, index + 1);
|
|
60
|
+
async function handleResponse(response2, status2, responseHeaders2) {
|
|
61
|
+
debug("Handling response");
|
|
62
|
+
const { headers, payload } = await formatResponse(response2);
|
|
94
63
|
const expectedResponsePayload = responseFixtures[index];
|
|
95
|
-
(
|
|
96
|
-
|
|
64
|
+
debugDev("status");
|
|
65
|
+
debugDev(status2);
|
|
66
|
+
debugDev(response2.status);
|
|
67
|
+
assert.equal(response2.status, status2);
|
|
68
|
+
debugDev("responseHeaders");
|
|
69
|
+
debugDev(responseHeaders2);
|
|
70
|
+
Object.entries(responseHeaders2).forEach(([key, value]) => {
|
|
71
|
+
assert.equal(headers.get(key), value);
|
|
72
|
+
});
|
|
97
73
|
if (expectedResponsePayload) {
|
|
98
|
-
|
|
74
|
+
debugDev("expectedResponsePayload");
|
|
75
|
+
debugDev(expectedResponsePayload);
|
|
76
|
+
debugDev(payload);
|
|
77
|
+
assert.equal(payload, expectedResponsePayload);
|
|
99
78
|
}
|
|
79
|
+
debug("Response handling done");
|
|
100
80
|
}
|
|
101
81
|
}
|
|
102
82
|
}
|
|
103
83
|
};
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
payload
|
|
109
|
-
};
|
|
84
|
+
async function formatResponseDefault(response) {
|
|
85
|
+
const payload = await response.text();
|
|
86
|
+
const headers = response.headers;
|
|
87
|
+
return { headers, payload };
|
|
110
88
|
}
|
|
111
|
-
//# sourceMappingURL=index.js.map
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.js"],
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\nimport {promisify} from 'util';\n\nexport default ({path, recurse, formatResponse = formatResponseDefault, callback: createApp, hooks = {}}) => {\n const setTimeoutPromise = promisify(setTimeout); // eslint-disable-line\n const debug = createDebugLogger('@natlibfi/fixugen-http-server');\n const debugDev = createDebugLogger('@natlibfi/fixugen-http-server:dev');\n\n generateTests({\n path, recurse,\n callback: httpCallback,\n useMetadataFile: true,\n fixura: {\n failWhenNotFound: false\n },\n hooks: {\n ...hooks\n }\n });\n\n async function httpCallback({getFixtures, requests, ...options}) {\n const requestFixtures = getFixtures({\n components: [/^request[0-9]+\\..*$/u],\n reader: READERS.TEXT\n });\n\n const responseFixtures = getFixtures({\n components: [/^response[0-9]+\\..*$/u],\n reader: READERS.TEXT\n });\n\n const server = await createApp({getFixtures, ...options, requests});\n await iterate(requests, server);\n //await setTimeoutPromise(5000);\n\n return;\n\n // eslint-disable-next-line\n async function iterate(testRequests, server, index = 0) {\n const [testRequest, ...rest] = testRequests;\n\n if (testRequest === undefined) {\n await server.close();\n debug('Server closed');\n return;\n }\n debug('Iteration', index);\n debugDev(testRequest);\n\n const {\n method, path, status,\n requestParams = {}, requestHeaders = {}, responseHeaders = {}\n } = testRequest;\n\n const requestPayload = requestFixtures[index];\n const requestPath = path || '/';\n const requestMethod = method.toLowerCase();\n const parsedParams = new URLSearchParams(requestParams).toString();\n const url = `http://localhost:1337${requestPath}${parsedParams === '' ? '' : '?' + parsedParams}`;\n debugDev(url);\n const response = await fetch(url, {method: requestMethod, headers: requestHeaders, body: requestPayload});\n\n await handleResponse(response, status, responseHeaders);\n return iterate(rest, server, index + 1);\n\n\n async function handleResponse(response, status, responseHeaders) {\n debug('Handling response');\n const {headers, payload} = await formatResponse(response);\n const expectedResponsePayload = responseFixtures[index];\n debugDev('status');\n debugDev(status);\n debugDev(response.status);\n assert.equal(response.status, status);\n\n debugDev('responseHeaders');\n debugDev(responseHeaders);\n //debugDev(headers);\n\n Object.entries(responseHeaders).forEach(([key, value]) => {\n assert.equal(headers.get(key), value);\n });\n\n if (expectedResponsePayload) {\n debugDev('expectedResponsePayload');\n debugDev(expectedResponsePayload);\n debugDev(payload);\n assert.equal(payload, expectedResponsePayload);\n }\n\n debug('Response handling done');\n }\n }\n }\n};\n\nasync function formatResponseDefault(response) {\n const payload = await response.text();\n const headers = response.headers;\n return {headers, payload};\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["server", "path", "response", "status", "responseHeaders"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import createDebugLogger from "debug";
|
|
2
|
+
import express from "express";
|
|
3
|
+
import { promisify } from "util";
|
|
4
|
+
import generateTests from "./index.js";
|
|
5
|
+
const setTimeoutPromise = promisify(setTimeout);
|
|
6
|
+
const debug = createDebugLogger("@natlibfi/fixugen-http-server:test");
|
|
7
|
+
const debugDev = createDebugLogger("@natlibfi/fixugen-http-server:test:dev");
|
|
8
|
+
generateTests({
|
|
9
|
+
recurse: false,
|
|
10
|
+
path: [import.meta.dirname, "..", "test-fixtures"],
|
|
11
|
+
callback: ({ getFixture, requests }) => {
|
|
12
|
+
debug("Preparing server");
|
|
13
|
+
const app = express();
|
|
14
|
+
return createEndpoints(requests);
|
|
15
|
+
async function createEndpoints(requests2, index = 0) {
|
|
16
|
+
const [request, ...rest] = requests2;
|
|
17
|
+
if (request === void 0) {
|
|
18
|
+
const server = app.listen(1337, void 0, (error) => {
|
|
19
|
+
if (error) {
|
|
20
|
+
debugDev(error);
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
debug("Server is listening!");
|
|
24
|
+
});
|
|
25
|
+
await setTimeoutPromise(5);
|
|
26
|
+
return server;
|
|
27
|
+
}
|
|
28
|
+
debug("creating express endpoint: ", index);
|
|
29
|
+
debugDev("request: ", request);
|
|
30
|
+
const { method, status, path = "/", responseHeaders = {} } = request;
|
|
31
|
+
const responsePayload = getFixture(`response${index}.txt`);
|
|
32
|
+
debugDev("responsePayload: ", responsePayload);
|
|
33
|
+
if (responsePayload) {
|
|
34
|
+
debugDev("Making endpoint with responsePayload");
|
|
35
|
+
app[method](path, (req, res) => {
|
|
36
|
+
const payload = responsePayload;
|
|
37
|
+
Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));
|
|
38
|
+
return res.status(status).send(payload);
|
|
39
|
+
});
|
|
40
|
+
return createEndpoints(rest, index + 1);
|
|
41
|
+
}
|
|
42
|
+
debugDev("Making endpoint with out responsePayload");
|
|
43
|
+
app[method](path, (req, res) => {
|
|
44
|
+
Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));
|
|
45
|
+
res.sendStatus(status);
|
|
46
|
+
});
|
|
47
|
+
return createEndpoints(rest, index + 1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.test.js"],
|
|
4
|
+
"sourcesContent": ["import createDebugLogger from 'debug';\nimport express from 'express';\nimport {promisify} from 'util';\nimport generateTests from './index.js';\n\nconst setTimeoutPromise = promisify(setTimeout); // eslint-disable-line\nconst debug = createDebugLogger('@natlibfi/fixugen-http-server:test');\nconst debugDev = createDebugLogger('@natlibfi/fixugen-http-server:test:dev');\n\ngenerateTests({\n recurse: false,\n path: [import.meta.dirname, '..', 'test-fixtures'],\n callback: ({getFixture, requests}) => {\n debug('Preparing server');\n const app = express();\n\n return createEndpoints(requests);\n\n async function createEndpoints(requests, index = 0) {\n const [request, ...rest] = requests;\n\n if (request === undefined) {\n const server = app.listen(1337, undefined, (error) => {\n if (error) {\n debugDev(error);\n throw error;\n }\n debug('Server is listening!');\n });\n\n await setTimeoutPromise(5);\n return server;\n }\n debug('creating express endpoint: ', index);\n debugDev('request: ', request);\n const {method, status, path = '/', responseHeaders = {}} = request;\n\n const responsePayload = getFixture(`response${index}.txt`);\n debugDev('responsePayload: ', responsePayload);\n\n if (responsePayload) {\n debugDev('Making endpoint with responsePayload');\n\n app[method](path, (req, res) => {\n const payload = responsePayload;\n Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));\n return res.status(status).send(payload);\n });\n\n return createEndpoints(rest, index + 1);\n }\n\n debugDev('Making endpoint with out responsePayload');\n app[method](path, (req, res) => {\n Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));\n res.sendStatus(status);\n });\n\n return createEndpoints(rest, index + 1);\n }\n }\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,uBAAuB;AAC9B,OAAO,aAAa;AACpB,SAAQ,iBAAgB;AACxB,OAAO,mBAAmB;AAE1B,MAAM,oBAAoB,UAAU,UAAU;AAC9C,MAAM,QAAQ,kBAAkB,oCAAoC;AACpE,MAAM,WAAW,kBAAkB,wCAAwC;AAE3E,cAAc;AAAA,EACZ,SAAS;AAAA,EACT,MAAM,CAAC,YAAY,SAAS,MAAM,eAAe;AAAA,EACjD,UAAU,CAAC,EAAC,YAAY,SAAQ,MAAM;AACpC,UAAM,kBAAkB;AACxB,UAAM,MAAM,QAAQ;AAEpB,WAAO,gBAAgB,QAAQ;AAE/B,mBAAe,gBAAgBA,WAAU,QAAQ,GAAG;AAClD,YAAM,CAAC,SAAS,GAAG,IAAI,IAAIA;AAE3B,UAAI,YAAY,QAAW;AACzB,cAAM,SAAS,IAAI,OAAO,MAAM,QAAW,CAAC,UAAU;AACpD,cAAI,OAAO;AACT,qBAAS,KAAK;AACd,kBAAM;AAAA,UACR;AACA,gBAAM,sBAAsB;AAAA,QAC9B,CAAC;AAED,cAAM,kBAAkB,CAAC;AACzB,eAAO;AAAA,MACT;AACA,YAAM,+BAA+B,KAAK;AAC1C,eAAS,aAAa,OAAO;AAC7B,YAAM,EAAC,QAAQ,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAAC,IAAI;AAE3D,YAAM,kBAAkB,WAAW,WAAW,KAAK,MAAM;AACzD,eAAS,qBAAqB,eAAe;AAE7C,UAAI,iBAAiB;AACnB,iBAAS,sCAAsC;AAE/C,YAAI,MAAM,EAAE,MAAM,CAAC,KAAK,QAAQ;AAC9B,gBAAM,UAAU;AAChB,iBAAO,QAAQ,eAAe,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC;AACjE,iBAAO,IAAI,OAAO,MAAM,EAAE,KAAK,OAAO;AAAA,QACxC,CAAC;AAED,eAAO,gBAAgB,MAAM,QAAQ,CAAC;AAAA,MACxC;AAEA,eAAS,0CAA0C;AACnD,UAAI,MAAM,EAAE,MAAM,CAAC,KAAK,QAAQ;AAC9B,eAAO,QAAQ,eAAe,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC;AACjE,YAAI,WAAW,MAAM;AAAA,MACvB,CAAC;AAED,aAAO,gBAAgB,MAAM,QAAQ,CAAC;AAAA,IACxC;AAAA,EACF;AACF,CAAC;",
|
|
6
|
+
"names": ["requests"]
|
|
7
|
+
}
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Eslint configuration object for src
|
|
2
|
+
const configSrc = {
|
|
3
|
+
files: [
|
|
4
|
+
"src/*",
|
|
5
|
+
"tests/*"
|
|
6
|
+
],
|
|
7
|
+
linterOptions: {
|
|
8
|
+
reportUnusedDisableDirectives: true,
|
|
9
|
+
},
|
|
10
|
+
rules: {
|
|
11
|
+
"no-console": "warn",
|
|
12
|
+
"eqeqeq": ["error", "always"],
|
|
13
|
+
"no-const-assign": "error",
|
|
14
|
+
"max-depth": ["warn", 4],
|
|
15
|
+
"max-lines": ["warn", 500],
|
|
16
|
+
"max-lines-per-function": ["warn", {"max": 100}],
|
|
17
|
+
"no-else-return": ["error", {allowElseIf: false}],
|
|
18
|
+
"no-plusplus": [
|
|
19
|
+
"error",
|
|
20
|
+
{
|
|
21
|
+
"allowForLoopAfterthoughts": true
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"array-callback-return": [
|
|
25
|
+
"error",
|
|
26
|
+
{
|
|
27
|
+
"checkForEach": false
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"no-unused-vars": [
|
|
31
|
+
"error",
|
|
32
|
+
{
|
|
33
|
+
"argsIgnorePattern": "next"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"no-warning-comments": "off"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// Eslint configuration object for globally ignoring .js files
|
|
41
|
+
// - ignore all files that start with a dot
|
|
42
|
+
// - ignore all files inside directories named 'dist'
|
|
43
|
+
const configIgnores = {
|
|
44
|
+
ignores: [
|
|
45
|
+
"**/.*",
|
|
46
|
+
"**/dist/"
|
|
47
|
+
]
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default [
|
|
51
|
+
configSrc,
|
|
52
|
+
configIgnores
|
|
53
|
+
];
|
package/package.json
CHANGED
|
@@ -14,101 +14,35 @@
|
|
|
14
14
|
"url": "git@github.com:natlibfi/fixugen-http-server-js.git"
|
|
15
15
|
},
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"version": "
|
|
17
|
+
"version": "2.0.0-alpha.1",
|
|
18
18
|
"main": "dist/index.js",
|
|
19
|
+
"type": "module",
|
|
19
20
|
"engines": {
|
|
20
|
-
"node": ">=
|
|
21
|
+
"node": ">=22"
|
|
21
22
|
},
|
|
22
23
|
"publishConfig": {
|
|
23
24
|
"access": "public"
|
|
24
25
|
},
|
|
25
26
|
"scripts": {
|
|
26
27
|
"prepare": "npm run build",
|
|
27
|
-
"build": "
|
|
28
|
+
"build": "esbuild src/**/*.js --sourcemap --platform=node --main-fields=main --outdir=dist --allow-overwrite --analyze",
|
|
28
29
|
"lint": "eslint ./src",
|
|
29
30
|
"lint:dev": "eslint --fix ./src",
|
|
30
31
|
"test": "npm run lint && npm run test:base",
|
|
31
|
-
"test:base": "
|
|
32
|
-
"test
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"dev": "nodemon",
|
|
36
|
-
"dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test nodemon"
|
|
32
|
+
"test:base": "node --test --experimental-test-coverage --test-reporter=spec './src/*.test.js'",
|
|
33
|
+
"watch:test": "cross-env DEBUG=@natlibfi/* NODE_ENV=test node --watch --test --experimental-test-coverage --test-reporter=spec './src/*.test.js'",
|
|
34
|
+
"dev": "npm run watch:test",
|
|
35
|
+
"dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test npm run watch:test"
|
|
37
36
|
},
|
|
38
37
|
"dependencies": {
|
|
39
|
-
"@natlibfi/fixugen": "^
|
|
40
|
-
"@natlibfi/fixura": "^
|
|
41
|
-
"
|
|
38
|
+
"@natlibfi/fixugen": "^3.0.0-alpha.5",
|
|
39
|
+
"@natlibfi/fixura": "^4.0.0-alpha.12",
|
|
40
|
+
"debug": "^4.4.1"
|
|
42
41
|
},
|
|
43
42
|
"devDependencies": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"@babel/register": "^7.27.1",
|
|
49
|
-
"@natlibfi/eslint-config-melinda-backend": "^3.0.6",
|
|
50
|
-
"babel-plugin-istanbul": "^7.0.0",
|
|
51
|
-
"chai": "^4.5.0",
|
|
52
|
-
"cross-env": "^7.0.3",
|
|
53
|
-
"eslint": "^8.57.1",
|
|
54
|
-
"express": "^4.21.2",
|
|
55
|
-
"mocha": "^11.7.1",
|
|
56
|
-
"nodemon": "^3.1.10",
|
|
57
|
-
"nyc": "^17.1.0"
|
|
58
|
-
},
|
|
59
|
-
"eslintConfig": {
|
|
60
|
-
"extends": "@natlibfi/melinda-backend"
|
|
61
|
-
},
|
|
62
|
-
"babel": {
|
|
63
|
-
"presets": [
|
|
64
|
-
[
|
|
65
|
-
"@babel/preset-env",
|
|
66
|
-
{
|
|
67
|
-
"targets": "maintained node versions"
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
],
|
|
71
|
-
"env": {
|
|
72
|
-
"test": {
|
|
73
|
-
"plugins": [
|
|
74
|
-
"istanbul"
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
"mocha": {
|
|
80
|
-
"spec": [
|
|
81
|
-
"src/*.spec.js",
|
|
82
|
-
"src/**/*.spec.js"
|
|
83
|
-
],
|
|
84
|
-
"require": [
|
|
85
|
-
"@babel/register"
|
|
86
|
-
],
|
|
87
|
-
"inline-diffs": true,
|
|
88
|
-
"maxDiffSize": 25000,
|
|
89
|
-
"bail": true,
|
|
90
|
-
"exit": true
|
|
91
|
-
},
|
|
92
|
-
"nodemonConfig": {
|
|
93
|
-
"exec": "npm run test:dev",
|
|
94
|
-
"watch": [
|
|
95
|
-
"src/*",
|
|
96
|
-
"test-fixtures/*"
|
|
97
|
-
]
|
|
98
|
-
},
|
|
99
|
-
"nyc": {
|
|
100
|
-
"exclude": [
|
|
101
|
-
"src/*.spec.js",
|
|
102
|
-
"src/**/*.spec.js"
|
|
103
|
-
],
|
|
104
|
-
"reporter": [
|
|
105
|
-
"text"
|
|
106
|
-
],
|
|
107
|
-
"sourceMap": false,
|
|
108
|
-
"instrument": false,
|
|
109
|
-
"lines": 80,
|
|
110
|
-
"statements": 80,
|
|
111
|
-
"functions": 80,
|
|
112
|
-
"branches": 80
|
|
43
|
+
"cross-env": "^10.0.0",
|
|
44
|
+
"esbuild": "^0.25.9",
|
|
45
|
+
"eslint": "^9.34.0",
|
|
46
|
+
"express": "^5.1.0"
|
|
113
47
|
}
|
|
114
48
|
}
|
package/src/index.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
1
2
|
import {READERS} from '@natlibfi/fixura';
|
|
2
3
|
import generateTests from '@natlibfi/fixugen';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
4
|
+
import createDebugLogger from 'debug';
|
|
5
|
+
import {promisify} from 'util';
|
|
5
6
|
|
|
6
|
-
export default ({path, recurse, formatResponse = formatResponseDefault, callback: createApp,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export default ({path, recurse, formatResponse = formatResponseDefault, callback: createApp, hooks = {}}) => {
|
|
8
|
+
const setTimeoutPromise = promisify(setTimeout); // eslint-disable-line
|
|
9
|
+
const debug = createDebugLogger('@natlibfi/fixugen-http-server');
|
|
10
|
+
const debugDev = createDebugLogger('@natlibfi/fixugen-http-server:dev');
|
|
10
11
|
|
|
11
12
|
generateTests({
|
|
12
13
|
path, recurse,
|
|
@@ -15,28 +16,11 @@ export default ({path, recurse, formatResponse = formatResponseDefault, callback
|
|
|
15
16
|
fixura: {
|
|
16
17
|
failWhenNotFound: false
|
|
17
18
|
},
|
|
18
|
-
|
|
19
|
-
...
|
|
20
|
-
afterEach: mochaAfterEach
|
|
19
|
+
hooks: {
|
|
20
|
+
...hooks
|
|
21
21
|
}
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
-
async function mochaAfterEach() {
|
|
25
|
-
if (mocha.afterEach) {
|
|
26
|
-
await mocha.afterEach();
|
|
27
|
-
return closeRequester();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
closeRequester();
|
|
31
|
-
|
|
32
|
-
function closeRequester() {
|
|
33
|
-
/* istanbul ignore else: Not easily tested */
|
|
34
|
-
if (requester) {
|
|
35
|
-
return requester.close();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
24
|
async function httpCallback({getFixtures, requests, ...options}) {
|
|
41
25
|
const requestFixtures = getFixtures({
|
|
42
26
|
components: [/^request[0-9]+\..*$/u],
|
|
@@ -48,52 +32,74 @@ export default ({path, recurse, formatResponse = formatResponseDefault, callback
|
|
|
48
32
|
reader: READERS.TEXT
|
|
49
33
|
});
|
|
50
34
|
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
35
|
+
const server = await createApp({getFixtures, ...options, requests});
|
|
36
|
+
await iterate(requests, server);
|
|
37
|
+
//await setTimeoutPromise(5000);
|
|
54
38
|
|
|
55
|
-
return
|
|
39
|
+
return;
|
|
56
40
|
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
// eslint-disable-next-line
|
|
42
|
+
async function iterate(testRequests, server, index = 0) {
|
|
43
|
+
const [testRequest, ...rest] = testRequests;
|
|
59
44
|
|
|
60
|
-
if (testRequest) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
45
|
+
if (testRequest === undefined) {
|
|
46
|
+
await server.close();
|
|
47
|
+
debug('Server closed');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
debug('Iteration', index);
|
|
51
|
+
debugDev(testRequest);
|
|
65
52
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
const {
|
|
54
|
+
method, path, status,
|
|
55
|
+
requestParams = {}, requestHeaders = {}, responseHeaders = {}
|
|
56
|
+
} = testRequest;
|
|
70
57
|
|
|
71
|
-
|
|
58
|
+
const requestPayload = requestFixtures[index];
|
|
59
|
+
const requestPath = path || '/';
|
|
60
|
+
const requestMethod = method.toLowerCase();
|
|
61
|
+
const parsedParams = new URLSearchParams(requestParams).toString();
|
|
62
|
+
const url = `http://localhost:1337${requestPath}${parsedParams === '' ? '' : '?' + parsedParams}`;
|
|
63
|
+
debugDev(url);
|
|
64
|
+
const response = await fetch(url, {method: requestMethod, headers: requestHeaders, body: requestPayload});
|
|
72
65
|
|
|
73
|
-
|
|
66
|
+
await handleResponse(response, status, responseHeaders);
|
|
67
|
+
return iterate(rest, server, index + 1);
|
|
74
68
|
|
|
75
|
-
const response = await request.send(requestPayload);
|
|
76
|
-
await handleResponse(response, status, responseHeaders);
|
|
77
|
-
return iterate(requests.slice(1), index + 1);
|
|
78
|
-
|
|
79
|
-
}
|
|
80
69
|
|
|
81
70
|
async function handleResponse(response, status, responseHeaders) {
|
|
82
|
-
|
|
71
|
+
debug('Handling response');
|
|
72
|
+
const {headers, payload} = await formatResponse(response);
|
|
83
73
|
const expectedResponsePayload = responseFixtures[index];
|
|
74
|
+
debugDev('status');
|
|
75
|
+
debugDev(status);
|
|
76
|
+
debugDev(response.status);
|
|
77
|
+
assert.equal(response.status, status);
|
|
84
78
|
|
|
85
|
-
|
|
79
|
+
debugDev('responseHeaders');
|
|
80
|
+
debugDev(responseHeaders);
|
|
81
|
+
//debugDev(headers);
|
|
86
82
|
|
|
87
|
-
Object.entries(
|
|
83
|
+
Object.entries(responseHeaders).forEach(([key, value]) => {
|
|
84
|
+
assert.equal(headers.get(key), value);
|
|
85
|
+
});
|
|
88
86
|
|
|
89
87
|
if (expectedResponsePayload) {
|
|
90
|
-
|
|
88
|
+
debugDev('expectedResponsePayload');
|
|
89
|
+
debugDev(expectedResponsePayload);
|
|
90
|
+
debugDev(payload);
|
|
91
|
+
assert.equal(payload, expectedResponsePayload);
|
|
91
92
|
}
|
|
93
|
+
|
|
94
|
+
debug('Response handling done');
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
}
|
|
95
98
|
};
|
|
96
99
|
|
|
97
|
-
function formatResponseDefault(
|
|
100
|
+
async function formatResponseDefault(response) {
|
|
101
|
+
const payload = await response.text();
|
|
102
|
+
const headers = response.headers;
|
|
98
103
|
return {headers, payload};
|
|
99
104
|
}
|
|
105
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import createDebugLogger from 'debug';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import {promisify} from 'util';
|
|
4
|
+
import generateTests from './index.js';
|
|
5
|
+
|
|
6
|
+
const setTimeoutPromise = promisify(setTimeout); // eslint-disable-line
|
|
7
|
+
const debug = createDebugLogger('@natlibfi/fixugen-http-server:test');
|
|
8
|
+
const debugDev = createDebugLogger('@natlibfi/fixugen-http-server:test:dev');
|
|
9
|
+
|
|
10
|
+
generateTests({
|
|
11
|
+
recurse: false,
|
|
12
|
+
path: [import.meta.dirname, '..', 'test-fixtures'],
|
|
13
|
+
callback: ({getFixture, requests}) => {
|
|
14
|
+
debug('Preparing server');
|
|
15
|
+
const app = express();
|
|
16
|
+
|
|
17
|
+
return createEndpoints(requests);
|
|
18
|
+
|
|
19
|
+
async function createEndpoints(requests, index = 0) {
|
|
20
|
+
const [request, ...rest] = requests;
|
|
21
|
+
|
|
22
|
+
if (request === undefined) {
|
|
23
|
+
const server = app.listen(1337, undefined, (error) => {
|
|
24
|
+
if (error) {
|
|
25
|
+
debugDev(error);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
debug('Server is listening!');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
await setTimeoutPromise(5);
|
|
32
|
+
return server;
|
|
33
|
+
}
|
|
34
|
+
debug('creating express endpoint: ', index);
|
|
35
|
+
debugDev('request: ', request);
|
|
36
|
+
const {method, status, path = '/', responseHeaders = {}} = request;
|
|
37
|
+
|
|
38
|
+
const responsePayload = getFixture(`response${index}.txt`);
|
|
39
|
+
debugDev('responsePayload: ', responsePayload);
|
|
40
|
+
|
|
41
|
+
if (responsePayload) {
|
|
42
|
+
debugDev('Making endpoint with responsePayload');
|
|
43
|
+
|
|
44
|
+
app[method](path, (req, res) => {
|
|
45
|
+
const payload = responsePayload;
|
|
46
|
+
Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));
|
|
47
|
+
return res.status(status).send(payload);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
return createEndpoints(rest, index + 1);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
debugDev('Making endpoint with out responsePayload');
|
|
54
|
+
app[method](path, (req, res) => {
|
|
55
|
+
Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));
|
|
56
|
+
res.sendStatus(status);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
return createEndpoints(rest, index + 1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
package/dist/index.spec.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _express = _interopRequireDefault(require("express"));
|
|
4
|
-
var _ = _interopRequireDefault(require("."));
|
|
5
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
-
(0, _.default)({
|
|
7
|
-
recurse: false,
|
|
8
|
-
path: [__dirname, '..', 'test-fixtures'],
|
|
9
|
-
callback: ({
|
|
10
|
-
getFixture,
|
|
11
|
-
requests
|
|
12
|
-
}) => {
|
|
13
|
-
const app = (0, _express.default)();
|
|
14
|
-
return iterate(requests);
|
|
15
|
-
function iterate(requests, index = 0) {
|
|
16
|
-
const [request] = requests;
|
|
17
|
-
if (request) {
|
|
18
|
-
const {
|
|
19
|
-
method,
|
|
20
|
-
path,
|
|
21
|
-
status,
|
|
22
|
-
responseHeaders = {}
|
|
23
|
-
} = request;
|
|
24
|
-
const responsePayload = getFixture(`response${index}.txt`) || '';
|
|
25
|
-
app[method](path || '/', (req, res) => {
|
|
26
|
-
Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));
|
|
27
|
-
if (responsePayload) {
|
|
28
|
-
return res.status(status).send(responsePayload);
|
|
29
|
-
}
|
|
30
|
-
res.sendStatus(status);
|
|
31
|
-
});
|
|
32
|
-
return iterate(requests.slice(1), index + 1);
|
|
33
|
-
}
|
|
34
|
-
return app.listen(1337);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=index.spec.js.map
|
package/dist/index.spec.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","names":["_express","_interopRequireDefault","require","_","e","__esModule","default","generateTests","recurse","path","__dirname","callback","getFixture","requests","app","express","iterate","index","request","method","status","responseHeaders","responsePayload","req","res","Object","entries","forEach","k","v","set","send","sendStatus","slice","listen"],"sources":["../src/index.spec.js"],"sourcesContent":["import express from 'express';\nimport generateTests from '.';\n\ngenerateTests({\n recurse: false,\n path: [__dirname, '..', 'test-fixtures'],\n callback: ({getFixture, requests}) => {\n const app = express();\n return iterate(requests);\n\n function iterate(requests, index = 0) {\n const [request] = requests;\n\n if (request) {\n const {method, path, status, responseHeaders = {}} = request;\n const responsePayload = getFixture(`response${index}.txt`) || '';\n\n app[method](path || '/', (req, res) => {\n Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));\n\n if (responsePayload) {\n return res.status(status).send(responsePayload);\n }\n\n res.sendStatus(status);\n });\n\n return iterate(requests.slice(1), index + 1);\n }\n\n return app.listen(1337);\n }\n }\n});\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,CAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9B,IAAAG,SAAa,EAAC;EACZC,OAAO,EAAE,KAAK;EACdC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC;EACxCC,QAAQ,EAAEA,CAAC;IAACC,UAAU;IAAEC;EAAQ,CAAC,KAAK;IACpC,MAAMC,GAAG,GAAG,IAAAC,gBAAO,EAAC,CAAC;IACrB,OAAOC,OAAO,CAACH,QAAQ,CAAC;IAExB,SAASG,OAAOA,CAACH,QAAQ,EAAEI,KAAK,GAAG,CAAC,EAAE;MACpC,MAAM,CAACC,OAAO,CAAC,GAAGL,QAAQ;MAE1B,IAAIK,OAAO,EAAE;QACX,MAAM;UAACC,MAAM;UAAEV,IAAI;UAAEW,MAAM;UAAEC,eAAe,GAAG,CAAC;QAAC,CAAC,GAAGH,OAAO;QAC5D,MAAMI,eAAe,GAAGV,UAAU,CAAC,WAAWK,KAAK,MAAM,CAAC,IAAI,EAAE;QAEhEH,GAAG,CAACK,MAAM,CAAC,CAACV,IAAI,IAAI,GAAG,EAAE,CAACc,GAAG,EAAEC,GAAG,KAAK;UACrCC,MAAM,CAACC,OAAO,CAACL,eAAe,CAAC,CAACM,OAAO,CAAC,CAAC,CAACC,CAAC,EAAEC,CAAC,CAAC,KAAKL,GAAG,CAACM,GAAG,CAACF,CAAC,EAAEC,CAAC,CAAC,CAAC;UAElE,IAAIP,eAAe,EAAE;YACnB,OAAOE,GAAG,CAACJ,MAAM,CAACA,MAAM,CAAC,CAACW,IAAI,CAACT,eAAe,CAAC;UACjD;UAEAE,GAAG,CAACQ,UAAU,CAACZ,MAAM,CAAC;QACxB,CAAC,CAAC;QAEF,OAAOJ,OAAO,CAACH,QAAQ,CAACoB,KAAK,CAAC,CAAC,CAAC,EAAEhB,KAAK,GAAG,CAAC,CAAC;MAC9C;MAEA,OAAOH,GAAG,CAACoB,MAAM,CAAC,IAAI,CAAC;IACzB;EACF;AACF,CAAC,CAAC","ignoreList":[]}
|
package/src/index.spec.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import express from 'express';
|
|
2
|
-
import generateTests from '.';
|
|
3
|
-
|
|
4
|
-
generateTests({
|
|
5
|
-
recurse: false,
|
|
6
|
-
path: [__dirname, '..', 'test-fixtures'],
|
|
7
|
-
callback: ({getFixture, requests}) => {
|
|
8
|
-
const app = express();
|
|
9
|
-
return iterate(requests);
|
|
10
|
-
|
|
11
|
-
function iterate(requests, index = 0) {
|
|
12
|
-
const [request] = requests;
|
|
13
|
-
|
|
14
|
-
if (request) {
|
|
15
|
-
const {method, path, status, responseHeaders = {}} = request;
|
|
16
|
-
const responsePayload = getFixture(`response${index}.txt`) || '';
|
|
17
|
-
|
|
18
|
-
app[method](path || '/', (req, res) => {
|
|
19
|
-
Object.entries(responseHeaders).forEach(([k, v]) => res.set(k, v));
|
|
20
|
-
|
|
21
|
-
if (responsePayload) {
|
|
22
|
-
return res.status(status).send(responsePayload);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
res.sendStatus(status);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
return iterate(requests.slice(1), index + 1);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return app.listen(1337);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
});
|