@natlibfi/fixugen-http-server 2.0.0 → 2.0.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/README.md CHANGED
@@ -9,11 +9,11 @@ Uses [fixugen's](https://www.npmjs.com/package/@natlibfi/fixugen) **useMetadataF
9
9
  # Usage
10
10
  ```js
11
11
  import generateTests from '@natlibfi/fixugen-http-server';
12
- import startApp from './app';
12
+ import startApp from './app.js';
13
13
 
14
14
  generateTests({
15
15
  callback: () => startApp(),
16
- path: [__dirname, '..', '..', 'test-fixtures', 'app']
16
+ path: [import.meta.dirname, '..', '..', 'test-fixtures', 'app']
17
17
  });
18
18
 
19
19
  ```
@@ -41,12 +41,15 @@ generateTests({
41
41
  path: [__dirname, '..', '..', 'test-fixtures', 'app']
42
42
  });
43
43
 
44
- function formatResponse(headers, payload) {
44
+ // Note: version > 2 requires response as input for formatResponse instead of headers and payload
45
+ function formatResponse(response) {
46
+ const payload = await response.text(); // or which ever method is used for reading payload
45
47
  const newHeaders = doSomethingWithHeaders();
46
48
  return { payload, headers: newHeaders };
47
49
  }
48
50
  ```
49
51
 
52
+
50
53
  Where `[0-9]+` denotes the index number of the fixture (Requests and responses are mocked in that order).
51
54
 
52
55
  ## License and copyright
package/dist/index.js CHANGED
@@ -61,18 +61,20 @@ export default ({ path, recurse, formatResponse = formatResponseDefault, callbac
61
61
  debug("Handling response");
62
62
  const { headers, payload } = await formatResponse(response2);
63
63
  const expectedResponsePayload = responseFixtures[index];
64
- debugDev("status");
65
- debugDev(status2);
66
- debugDev(response2.status);
64
+ debugDev(`status: ${status2} vs response.status: ${response2.status}`);
67
65
  assert.equal(response2.status, status2);
66
+ debugDev(`Status OK`);
68
67
  debugDev("responseHeaders");
69
68
  debugDev(responseHeaders2);
69
+ debugDev(headers);
70
70
  Object.entries(responseHeaders2).forEach(([key, value]) => {
71
71
  assert.equal(headers.get(key), value);
72
72
  });
73
+ debugDev(`Headers OK`);
73
74
  if (expectedResponsePayload) {
74
75
  debugDev("expectedResponsePayload");
75
76
  debugDev(expectedResponsePayload);
77
+ debugDev("actual payload");
76
78
  debugDev(payload);
77
79
  assert.equal(payload, expectedResponsePayload);
78
80
  }
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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": "AAAA,OAAO,YAAY;AACnB,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAC1B,OAAO,uBAAuB;AAC9B,SAAQ,iBAAgB;AAExB,eAAe,CAAC,EAAC,MAAM,SAAS,iBAAiB,uBAAuB,UAAU,WAAW,QAAQ,CAAC,EAAC,MAAM;AAC3G,QAAM,oBAAoB,UAAU,UAAU;AAC9C,QAAM,QAAQ,kBAAkB,+BAA+B;AAC/D,QAAM,WAAW,kBAAkB,mCAAmC;AAEtE,gBAAc;AAAA,IACZ;AAAA,IAAM;AAAA,IACN,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,QAAQ;AAAA,MACN,kBAAkB;AAAA,IACpB;AAAA,IACA,OAAO;AAAA,MACL,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AAED,iBAAe,aAAa,EAAC,aAAa,UAAU,GAAG,QAAO,GAAG;AAC/D,UAAM,kBAAkB,YAAY;AAAA,MAClC,YAAY,CAAC,sBAAsB;AAAA,MACnC,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,mBAAmB,YAAY;AAAA,MACnC,YAAY,CAAC,uBAAuB;AAAA,MACpC,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,SAAS,MAAM,UAAU,EAAC,aAAa,GAAG,SAAS,SAAQ,CAAC;AAClE,UAAM,QAAQ,UAAU,MAAM;AAG9B;AAGA,mBAAe,QAAQ,cAAcA,SAAQ,QAAQ,GAAG;AACtD,YAAM,CAAC,aAAa,GAAG,IAAI,IAAI;AAE/B,UAAI,gBAAgB,QAAW;AAC7B,cAAMA,QAAO,MAAM;AACnB,cAAM,eAAe;AACrB;AAAA,MACF;AACA,YAAM,aAAa,KAAK;AACxB,eAAS,WAAW;AAEpB,YAAM;AAAA,QACJ;AAAA,QAAQ,MAAAC;AAAA,QAAM;AAAA,QACd,gBAAgB,CAAC;AAAA,QAAG,iBAAiB,CAAC;AAAA,QAAG,kBAAkB,CAAC;AAAA,MAC9D,IAAI;AAEJ,YAAM,iBAAiB,gBAAgB,KAAK;AAC5C,YAAM,cAAcA,SAAQ;AAC5B,YAAM,gBAAgB,OAAO,YAAY;AACzC,YAAM,eAAe,IAAI,gBAAgB,aAAa,EAAE,SAAS;AACjE,YAAM,MAAM,wBAAwB,WAAW,GAAG,iBAAiB,KAAK,KAAK,MAAM,YAAY;AAC/F,eAAS,GAAG;AACZ,YAAM,WAAW,MAAM,MAAM,KAAK,EAAC,QAAQ,eAAe,SAAS,gBAAgB,MAAM,eAAc,CAAC;AAExG,YAAM,eAAe,UAAU,QAAQ,eAAe;AACtD,aAAO,QAAQ,MAAMD,SAAQ,QAAQ,CAAC;AAGtC,qBAAe,eAAeE,WAAUC,SAAQC,kBAAiB;AAC/D,cAAM,mBAAmB;AACzB,cAAM,EAAC,SAAS,QAAO,IAAI,MAAM,eAAeF,SAAQ;AACxD,cAAM,0BAA0B,iBAAiB,KAAK;AACtD,iBAAS,QAAQ;AACjB,iBAASC,OAAM;AACf,iBAASD,UAAS,MAAM;AACxB,eAAO,MAAMA,UAAS,QAAQC,OAAM;AAEpC,iBAAS,iBAAiB;AAC1B,iBAASC,gBAAe;AAGxB,eAAO,QAAQA,gBAAe,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACxD,iBAAO,MAAM,QAAQ,IAAI,GAAG,GAAG,KAAK;AAAA,QACtC,CAAC;AAED,YAAI,yBAAyB;AAC3B,mBAAS,yBAAyB;AAClC,mBAAS,uBAAuB;AAChC,mBAAS,OAAO;AAChB,iBAAO,MAAM,SAAS,uBAAuB;AAAA,QAC/C;AAEA,cAAM,wBAAwB;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,sBAAsB,UAAU;AAC7C,QAAM,UAAU,MAAM,SAAS,KAAK;AACpC,QAAM,UAAU,SAAS;AACzB,SAAO,EAAC,SAAS,QAAO;AAC1B;",
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 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 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 // Note: formatResponse requires response itself as input\n const {headers, payload} = await formatResponse(response);\n const expectedResponsePayload = responseFixtures[index];\n debugDev(`status: ${status} vs response.status: ${response.status}`);\n assert.equal(response.status, status);\n debugDev(`Status OK`);\n debugDev('responseHeaders');\n debugDev(responseHeaders);\n debugDev(headers);\n Object.entries(responseHeaders).forEach(([key, value]) => {\n assert.equal(headers.get(key), value);\n });\n debugDev(`Headers OK`);\n\n if (expectedResponsePayload) {\n debugDev('expectedResponsePayload');\n debugDev(expectedResponsePayload);\n debugDev('actual payload');\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
6
  "names": ["server", "path", "response", "status", "responseHeaders"]
7
7
  }
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "url": "https://github.com/NatLibFi/fixugen-http-server-js"
14
14
  },
15
15
  "license": "MIT",
16
- "version": "2.0.0",
16
+ "version": "2.0.1",
17
17
  "main": "dist/index.js",
18
18
  "type": "module",
19
19
  "engines": {
package/src/index.js CHANGED
@@ -38,7 +38,6 @@ export default ({path, recurse, formatResponse = formatResponseDefault, callback
38
38
 
39
39
  return;
40
40
 
41
- // eslint-disable-next-line
42
41
  async function iterate(testRequests, server, index = 0) {
43
42
  const [testRequest, ...rest] = testRequests;
44
43
 
@@ -62,31 +61,30 @@ export default ({path, recurse, formatResponse = formatResponseDefault, callback
62
61
  const url = `http://localhost:1337${requestPath}${parsedParams === '' ? '' : '?' + parsedParams}`;
63
62
  debugDev(url);
64
63
  const response = await fetch(url, {method: requestMethod, headers: requestHeaders, body: requestPayload});
65
-
66
64
  await handleResponse(response, status, responseHeaders);
67
65
  return iterate(rest, server, index + 1);
68
66
 
69
67
 
70
68
  async function handleResponse(response, status, responseHeaders) {
71
69
  debug('Handling response');
70
+ // Note: formatResponse requires response itself as input
72
71
  const {headers, payload} = await formatResponse(response);
73
72
  const expectedResponsePayload = responseFixtures[index];
74
- debugDev('status');
75
- debugDev(status);
76
- debugDev(response.status);
73
+ debugDev(`status: ${status} vs response.status: ${response.status}`);
77
74
  assert.equal(response.status, status);
78
-
75
+ debugDev(`Status OK`);
79
76
  debugDev('responseHeaders');
80
77
  debugDev(responseHeaders);
81
- //debugDev(headers);
82
-
78
+ debugDev(headers);
83
79
  Object.entries(responseHeaders).forEach(([key, value]) => {
84
80
  assert.equal(headers.get(key), value);
85
81
  });
82
+ debugDev(`Headers OK`);
86
83
 
87
84
  if (expectedResponsePayload) {
88
85
  debugDev('expectedResponsePayload');
89
86
  debugDev(expectedResponsePayload);
87
+ debugDev('actual payload');
90
88
  debugDev(payload);
91
89
  assert.equal(payload, expectedResponsePayload);
92
90
  }