From 14213ebe23576d2d3c9ce4f4a25366a862cdb8a0 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Fri, 20 Nov 2020 17:55:49 +0100 Subject: [PATCH 1/3] Added e2e tests using postman --- ...ADNC_GettingStarted_PostmanCollection.json | 604 +++++++++ .../JADNC_GettingStarted_PostmanGlobals.json | 13 + test/e2e/postman/README.md | 35 + test/e2e/postman/index.js | 33 + test/e2e/postman/package-lock.json | 1158 +++++++++++++++++ test/e2e/postman/package.json | 18 + 6 files changed, 1861 insertions(+) create mode 100644 test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json create mode 100644 test/e2e/postman/JADNC_GettingStarted_PostmanGlobals.json create mode 100644 test/e2e/postman/README.md create mode 100644 test/e2e/postman/index.js create mode 100644 test/e2e/postman/package-lock.json create mode 100644 test/e2e/postman/package.json diff --git a/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json b/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json new file mode 100644 index 0000000000..76f5d44eed --- /dev/null +++ b/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json @@ -0,0 +1,604 @@ +{ + "info": { + "_postman_id": "e52ad62d-5462-4b05-b086-5bdc58032d1c", + "name": "JsonApiDotNetCoreGettingStarted", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Get books", + "event": [ + { + "listen": "test", + "script": { + "id": "4c761c43-9dd3-4747-b08b-d1dba7a63798", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{host}}/api/books", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "books" + ] + } + }, + "response": [] + }, + { + "name": "Get missing book", + "event": [ + { + "listen": "test", + "script": { + "id": "593ae8f1-2c20-43bb-99df-2bd82ac4fa16", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{host}}/api/books", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "books" + ] + } + }, + "response": [] + }, + { + "name": "Get book titles", + "event": [ + { + "listen": "test", + "script": { + "id": "08cde6cb-b0b7-4a22-b079-e9bf7daa3c07", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title');\r", + " pm.expect(element.attributes).to.not.have.any.keys('publishYear');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{host}}/api/books?fields=title", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "books" + ], + "query": [ + { + "key": "fields", + "value": "title" + } + ] + } + }, + "response": [] + }, + { + "name": "Get book titles with authors", + "event": [ + { + "listen": "test", + "script": { + "id": "8ea4e07f-a592-41c5-9ed3-97b057df467c", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title');\r", + " pm.expect(element.attributes).to.not.have.any.keys('publishYear');\r", + " });\r", + "\r", + " pm.expect(responseBody.included.length).to.eq(3);\r", + "\r", + " responseBody.included.forEach(element => {\r", + " pm.expect(element.type).to.eq('people');\r", + " pm.expect(element.attributes).to.have.all.keys('name');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{host}}/api/books?fields=title&include=author", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "books" + ], + "query": [ + { + "key": "fields", + "value": "title" + }, + { + "key": "include", + "value": "author" + } + ] + } + }, + "response": [] + }, + { + "name": "Get paged books", + "event": [ + { + "listen": "test", + "script": { + "id": "c091cde9-3588-481c-b0ef-223fdbba82ac", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(1);\r", + "\r", + " pm.expect(responseBody.data[0].type).to.eq('books');\r", + " pm.expect(responseBody.data[0].attributes.title).to.eq('Gulliver\\'s Travels');\r", + " pm.expect(responseBody.data[0].attributes.publishYear).to.eq(1726);\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{host}}/api/books?page[size]=1&page[number]=2&sort=title", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "books" + ], + "query": [ + { + "key": "page[size]", + "value": "1" + }, + { + "key": "page[number]", + "value": "2" + }, + { + "key": "sort", + "value": "title" + } + ] + } + }, + "response": [] + }, + { + "name": "Get books published after 1720", + "event": [ + { + "listen": "test", + "script": { + "id": "c0b8c847-5a49-448d-bec7-937c33ba8e1d", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(2);\r", + " pm.expect(responseBody.data.length).to.eq(2);\r", + "\r", + " pm.expect(responseBody.data[0].type).to.eq('books');\r", + " pm.expect(responseBody.data[0].attributes.title).to.eq('Frankenstein');\r", + " pm.expect(responseBody.data[0].attributes.publishYear).to.eq(1818);\r", + "\r", + " pm.expect(responseBody.data[1].type).to.eq('books');\r", + " pm.expect(responseBody.data[1].attributes.title).to.eq('Gulliver\\'s Travels');\r", + " pm.expect(responseBody.data[1].attributes.publishYear).to.eq(1726);\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{host}}/api/books?filter=greaterThan(publishYear,'1720')&sort=-publishYear", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "books" + ], + "query": [ + { + "key": "filter", + "value": "greaterThan(publishYear,'1720')" + }, + { + "key": "sort", + "value": "-publishYear" + } + ] + } + }, + "response": [] + }, + { + "name": "Get book author", + "event": [ + { + "listen": "test", + "script": { + "id": "6b3ac25b-4f27-415f-a96e-83d59b3f510b", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('people');\r", + " pm.expect(element.attributes).to.have.all.keys('name');\r", + " });\r", + "\r", + " pm.expect(responseBody.included.length).to.eq(3);\r", + "\r", + " responseBody.included.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{host}}/api/people?include=books&page[size]=0,books:0", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "people" + ], + "query": [ + { + "key": "include", + "value": "books" + }, + { + "key": "page[size]", + "value": "0,books:0" + } + ] + } + }, + "response": [] + }, + { + "name": "Get people", + "event": [ + { + "listen": "test", + "script": { + "id": "0176dea4-ef64-4798-adbb-929e7345496b", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('people');\r", + " pm.expect(element.attributes).to.have.all.keys('name');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{host}}/api/people", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "people" + ] + } + }, + "response": [] + }, + { + "name": "Get people with books", + "event": [ + { + "listen": "test", + "script": { + "id": "a456bcc6-2234-4bc6-a6d5-f26bfab3cbdb", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('people');\r", + " pm.expect(element.attributes).to.have.all.keys('name');\r", + " });\r", + "\r", + " pm.expect(responseBody.included.length).to.eq(3);\r", + "\r", + " responseBody.included.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{host}}/api/people?include=books&page[size]=0,books:0", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "people" + ], + "query": [ + { + "key": "include", + "value": "books" + }, + { + "key": "page[size]", + "value": "0,books:0" + } + ] + } + }, + "response": [] + }, + { + "name": "Get person with books", + "event": [ + { + "listen": "test", + "script": { + "id": "147303da-dbc1-41a4-91f5-004e68d85b0c", + "exec": [ + "pm.test(\"Correct response is returned\", function () {\r", + " pm.response.to.have.status(200);\r", + "\r", + " pm.response.to.have.header(\"Content-Type\");\r", + " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", + "\r", + " var responseBody = pm.response.json();\r", + " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", + " pm.expect(responseBody.data.length).to.eq(3);\r", + "\r", + " responseBody.data.forEach(element => {\r", + " pm.expect(element.type).to.eq('people');\r", + " pm.expect(element.attributes).to.have.all.keys('name');\r", + " });\r", + "\r", + " pm.expect(responseBody.included.length).to.eq(3);\r", + "\r", + " responseBody.included.forEach(element => {\r", + " pm.expect(element.type).to.eq('books');\r", + " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", + " });\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{host}}/api/people?include=books&page[size]=0,books:0", + "host": [ + "{{host}}" + ], + "path": [ + "api", + "people" + ], + "query": [ + { + "key": "include", + "value": "books" + }, + { + "key": "page[size]", + "value": "0,books:0" + } + ] + } + }, + "response": [] + } + ], + "protocolProfileBehavior": {} +} \ No newline at end of file diff --git a/test/e2e/postman/JADNC_GettingStarted_PostmanGlobals.json b/test/e2e/postman/JADNC_GettingStarted_PostmanGlobals.json new file mode 100644 index 0000000000..3302bfb5f5 --- /dev/null +++ b/test/e2e/postman/JADNC_GettingStarted_PostmanGlobals.json @@ -0,0 +1,13 @@ +{ + "id": "683ad527-9279-f62f-ff8d-663df9026ca8", + "name": "Postman Globals", + "values": [ + { + "key": "host", + "value": "http://localhost:14141", + "enabled": true, + "type": "text" + } + ], + "_postman_variable_scope": "globals" +} diff --git a/test/e2e/postman/README.md b/test/e2e/postman/README.md new file mode 100644 index 0000000000..567cdf3075 --- /dev/null +++ b/test/e2e/postman/README.md @@ -0,0 +1,35 @@ +## Overview + +This directory contains end-to-end tests (against the GettingStarted project) using [Postman](https://www.postman.com/). + +First, you need to run the GettingStarted project (in Kestrel or IIS Express). + +## Running the tests manually + +The collection can be imported in Postman to run the tests one-by-one. +How to use tests in Postman is described [here](https://blog.postman.com/writing-tests-in-postman/) and +[here](https://learning.postman.com/docs/writing-scripts/script-references/test-examples/), but in short: +- The 'Tests' tab (top panel) contains assertions in JavaScript. +- After send, the outcome is displayed on the 'Test Results' tab (bottom panel). + +## Running all tests sequentially + +Newman is used to run all tests from the command-line. Detailed steps are described at [this link](https://learning.postman.com/docs/running-collections/using-newman-cli/command-line-integration-with-newman/). +Quick steps: +- Install [Node.js](https://nodejs.org/en/download/) including NPM +- Install Newman: + ``` + npm install -g newman + ``` +- Run the tests: +``` + newman run JADNC_GettingStarted_PostmanCollection.json --globals JADNC_GettingStarted_PostmanGlobals.json +``` + +## Running all tests in parallel + +This is implemented using a custom script, based on [this](https://medium.com/@mnu/run-multiple-postman-collection-in-parallel-stress-ee20801922ed). All you need to run: +``` +npm install +npm start +``` diff --git a/test/e2e/postman/index.js b/test/e2e/postman/index.js new file mode 100644 index 0000000000..52969f0f14 --- /dev/null +++ b/test/e2e/postman/index.js @@ -0,0 +1,33 @@ +const path = require('path') +const async = require('async') +const newman = require('newman') + +const PARALLEL_RUN_COUNT = 10 + +const parametersForTestRun = { + collection: path.join(__dirname, 'JADNC_GettingStarted_PostmanCollection.json'), + globals: path.join(__dirname, 'JADNC_GettingStarted_PostmanGlobals.json'), + reporters: 'cli' +}; + +parallelCollectionRun = function (done) { + newman.run(parametersForTestRun, done); +}; + +let commands = [] +for (let index = 0; index < PARALLEL_RUN_COUNT; index++) { + commands.push(parallelCollectionRun); +} + +async.parallel( + commands, + (err, results) => { + err && console.error(err); + + results.forEach(function (result) { + var failures = result.run.failures; + + console.info(failures.length ? JSON.stringify(failures.failures, null, 2) : + `${result.collection.name} ran successfully.`); + }); + }); diff --git a/test/e2e/postman/package-lock.json b/test/e2e/postman/package-lock.json new file mode 100644 index 0000000000..26d0fb07ec --- /dev/null +++ b/test/e2e/postman/package-lock.json @@ -0,0 +1,1158 @@ +{ + "name": "load-tests", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@postman/form-data": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@postman/form-data/-/form-data-3.1.1.tgz", + "integrity": "sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "@postman/tunnel-agent": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz", + "integrity": "sha512-k57fzmAZ2PJGxfOA4SGR05ejorHbVAa/84Hxh/2nAztjNXc4ZjOm9NUIk6/Z6LCrBvJZqjRZbN8e/nROVUPVdg==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "brotli": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.2.tgz", + "integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=", + "requires": { + "base64-js": "^1.1.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.3.0.tgz", + "integrity": "sha512-cyTQGGptIjIT+CMGT5J/0l9c6Fb+565GCFjjeUTKxUO7w3oR+FcNCMEKTn5xtVKaLFmladN7QF68IiQsv5Fbdw==" + }, + "charset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==" + }, + "cli-progress": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz", + "integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==", + "requires": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + } + }, + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "csv-parse": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.12.0.tgz", + "integrity": "sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dbug": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/dbug/-/dbug-0.4.2.tgz", + "integrity": "sha1-MrSzEF6IYQQ6b5rHVdgOVC02WzE=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "faker": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.1.0.tgz", + "integrity": "sha512-RrWKFSSA/aNLP0g3o2WW1Zez7/MnMr7xkiZmoCfAGZmdkDQZ6l2KtuXHN5XjdvpRjDl8+3vf+Rrtl06Z352+Mw==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" + }, + "flatted": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-reasons": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", + "integrity": "sha1-qVPKZwB4Zp3eFCzomUAbnW6F07Q=" + }, + "http-signature": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.5.tgz", + "integrity": "sha512-NwoTQYSJoFt34jSBbwzDHDofoA61NGXzu6wXh95o1Ry62EnmKjXb/nR/RknLeZ3G/uGwrlKNY2z7uPt+Cdl7Tw==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.14.1" + } + }, + "httpntlm": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.7.6.tgz", + "integrity": "sha1-aZHoNSg2AH1nEBuD247Q+RX5BtA=", + "requires": { + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "intel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/intel/-/intel-1.2.0.tgz", + "integrity": "sha1-EdEUfraz9Fgr31M3s31UFYTp5B4=", + "requires": { + "chalk": "^1.1.0", + "dbug": "~0.4.2", + "stack-trace": "~0.0.9", + "strftime": "~0.10.0", + "symbol": "~0.3.1", + "utcstring": "~0.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "liquid-json": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", + "integrity": "sha1-kVWhgTbYprJhXl8W+aJEira1Duo=" + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "marked": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.0.tgz", + "integrity": "sha512-tiRxakgbNPBr301ihe/785NntvYyhxlqcL3YaC8CaxJQh7kiaEtrN9B/eK2I2943Yjkh5gw25chYFDQhOMCwMA==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.0.tgz", + "integrity": "sha1-4p+IkeKE14JwJG8AUNaDS9u+EzI=", + "requires": { + "charset": "^1.0.0" + } + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "newman": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/newman/-/newman-5.2.1.tgz", + "integrity": "sha512-kEuTMQCiORHZFx92sPVih8RHsJ40JxgxvlsrUe6MFXLQg2/UrO1KaUQCDabTy41tOu0a+dx6Mtg+x+uK1rCPcA==", + "requires": { + "async": "3.2.0", + "chardet": "1.3.0", + "cli-progress": "3.8.2", + "cli-table3": "0.6.0", + "colors": "1.4.0", + "commander": "6.2.0", + "csv-parse": "4.12.0", + "eventemitter3": "4.0.7", + "filesize": "6.1.0", + "lodash": "4.17.20", + "mkdirp": "1.0.4", + "postman-collection": "3.6.8", + "postman-collection-transformer": "3.3.3", + "postman-request": "2.88.1-postman.27", + "postman-runtime": "7.26.8", + "pretty-ms": "7.0.1", + "semver": "7.3.2", + "serialised-error": "1.1.3", + "tough-cookie": "3.0.1", + "word-wrap": "1.2.3", + "xmlbuilder": "15.1.1" + } + }, + "node-oauth1": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-oauth1/-/node-oauth1-1.3.0.tgz", + "integrity": "sha512-0yggixNfrA1KcBwvh/Hy2xAS1Wfs9dcg6TdFf2zN7gilcAigMdrtZ4ybrBSXBgLvGDw9V1p2MRnGBMq7XjTWLg==" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postman-collection": { + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.6.8.tgz", + "integrity": "sha512-TNPaK2dpVRhttUFo/WN0ReopXEtuSQMktwcvwJbQ0z8K+5hftvyx2ia40xgg9qFl/Ra78qoNTUmLL1s3lRqLMg==", + "requires": { + "escape-html": "1.0.3", + "faker": "5.1.0", + "file-type": "3.9.0", + "http-reasons": "0.1.0", + "iconv-lite": "0.6.2", + "liquid-json": "0.3.1", + "lodash": "4.17.20", + "marked": "1.2.0", + "mime-format": "2.0.0", + "mime-types": "2.1.27", + "postman-url-encoder": "3.0.0", + "sanitize-html": "1.20.1", + "semver": "7.3.2", + "uuid": "3.4.0" + } + }, + "postman-collection-transformer": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-3.3.3.tgz", + "integrity": "sha512-Ra0hfljwB6xnGJ7a638K0TkXTf5BuwGNo1Ahpa9ECehOTOlUFisE8dqX5VZl04QGbpvN5nmr0rwrtLXtK53Abg==", + "requires": { + "commander": "5.1.0", + "inherits": "2.0.4", + "intel": "1.2.0", + "lodash": "4.17.19", + "semver": "7.3.2", + "strip-json-comments": "3.1.1" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + } + } + }, + "postman-request": { + "version": "2.88.1-postman.27", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.27.tgz", + "integrity": "sha512-4Qc7p3/cbp5S4Q6LcOzJ+K5N7loWDKjW0S9hj8M2AMJDUVcFUbdgvQb6ZfTERz2+34xP9ByCy7VhdnNCATe/bA==", + "requires": { + "@postman/form-data": "~3.1.1", + "@postman/tunnel-agent": "^0.6.3", + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "brotli": "~1.3.2", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "har-validator": "~5.1.3", + "http-signature": "~1.3.1", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "stream-length": "^1.0.2", + "tough-cookie": "~2.5.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "postman-runtime": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.26.8.tgz", + "integrity": "sha512-ZMUZ7mQ2SMOX/C/ntgx2SAfRt3VV6wOy+aLyWbAqpQPo5Jfodxwv9QhxGj3S2km+IYzO6BT1luzE8X8fr2UafA==", + "requires": { + "async": "2.6.3", + "aws4": "1.10.1", + "eventemitter3": "4.0.7", + "handlebars": "4.7.6", + "http-reasons": "0.1.0", + "httpntlm": "1.7.6", + "inherits": "2.0.4", + "js-sha512": "0.8.0", + "lodash": "4.17.20", + "node-oauth1": "1.3.0", + "performance-now": "2.1.0", + "postman-collection": "3.6.8", + "postman-request": "2.88.1-postman.27", + "postman-sandbox": "4.0.0", + "postman-url-encoder": "3.0.0", + "resolve-from": "5.0.0", + "serialised-error": "1.1.3", + "tough-cookie": "3.0.1", + "uuid": "3.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + } + } + }, + "postman-sandbox": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-4.0.0.tgz", + "integrity": "sha512-0j1VCDa5MHMTfZqv2XSYUyn+hgT9izoRdGFAvjtHCH+i+2TP1KxqXzjxXzOdx1pt26wpl9APdJ2hKKFpx9UlrQ==", + "requires": { + "lodash": "4.17.20", + "teleport-javascript": "1.0.0", + "uvm": "2.0.1" + } + }, + "postman-url-encoder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.0.tgz", + "integrity": "sha512-bk5wus5/5Ei9pbh+sQXaAxS5n4ZwiNAaIA8VBvRcXP6QyKcue2yF6xk1HqdtaZoH1G8+6509SVeOBojoFQ7nrA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "requires": { + "parse-ms": "^2.1.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize-html": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.1.tgz", + "integrity": "sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA==", + "requires": { + "chalk": "^2.4.1", + "htmlparser2": "^3.10.0", + "lodash.clonedeep": "^4.5.0", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.mergewith": "^4.6.1", + "postcss": "^7.0.5", + "srcset": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "serialised-error": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/serialised-error/-/serialised-error-1.1.3.tgz", + "integrity": "sha512-vybp3GItaR1ZtO2nxZZo8eOo7fnVaNtP3XE2vJKgzkKR2bagCkdJ1EpYYhEMd3qu/80DwQk9KjsNSxE3fXWq0g==", + "requires": { + "object-hash": "^1.1.2", + "stack-trace": "0.0.9", + "uuid": "^3.0.0" + }, + "dependencies": { + "stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "srcset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", + "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", + "requires": { + "array-uniq": "^1.0.2", + "number-is-nan": "^1.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stream-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-length/-/stream-length-1.0.2.tgz", + "integrity": "sha1-gnfzy+5JpNqrz9tOL0qbXp8snwA=", + "requires": { + "bluebird": "^2.6.2" + } + }, + "strftime": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz", + "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM=" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.3.1.tgz", + "integrity": "sha1-tvmpANSWpX8CQI8iGYwQndoGMEE=" + }, + "teleport-javascript": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/teleport-javascript/-/teleport-javascript-1.0.0.tgz", + "integrity": "sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg==" + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "uglify-js": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.6.tgz", + "integrity": "sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g==", + "optional": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "utcstring": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/utcstring/-/utcstring-0.1.0.tgz", + "integrity": "sha1-Qw/VEKt/yVtdWRDJAteYgMIIQ2s=" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "uvm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-2.0.1.tgz", + "integrity": "sha512-bZAckfNKnr95YkTCVZWyzK+7w1c8sYJuTresCBqhiizByVRtfPqhGJpTwFUSaS2YkaVfsMoN5xZcOCNxTx9uCA==", + "requires": { + "flatted": "3.1.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/test/e2e/postman/package.json b/test/e2e/postman/package.json new file mode 100644 index 0000000000..abe3a4ed22 --- /dev/null +++ b/test/e2e/postman/package.json @@ -0,0 +1,18 @@ +{ + "name": "load-tests", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "async": "^3.2.0", + "newman": "^5.2.1", + "path": "^0.12.7" + } +} From 53ef0ae0848d04f26a2ba94040f43a14a9dca3f7 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 23 Nov 2020 11:57:56 +0100 Subject: [PATCH 2/3] Corrections in tests --- ...ADNC_GettingStarted_PostmanCollection.json | 65 +++++++++---------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json b/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json index 76f5d44eed..1772ca8103 100644 --- a/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json +++ b/test/e2e/postman/JADNC_GettingStarted_PostmanCollection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "e52ad62d-5462-4b05-b086-5bdc58032d1c", + "_postman_id": "f44d0703-d5b8-4bcf-8c8b-f5d23baa7ce7", "name": "JsonApiDotNetCoreGettingStarted", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -11,7 +11,7 @@ { "listen": "test", "script": { - "id": "4c761c43-9dd3-4747-b08b-d1dba7a63798", + "id": "346f319b-c87c-4fd3-81ff-874f695d7206", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -63,22 +63,20 @@ { "listen": "test", "script": { - "id": "593ae8f1-2c20-43bb-99df-2bd82ac4fa16", + "id": "35583730-4fc2-420a-bb58-baaa38993567", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", - " pm.response.to.have.status(200);\r", + " pm.response.to.have.status(404);\r", "\r", " pm.response.to.have.header(\"Content-Type\");\r", " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", "\r", " var responseBody = pm.response.json();\r", - " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", - " pm.expect(responseBody.data.length).to.eq(3);\r", + " pm.expect(responseBody.errors.length).to.eq(1);\r", "\r", - " responseBody.data.forEach(element => {\r", - " pm.expect(element.type).to.eq('books');\r", - " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", - " });\r", + " pm.expect(responseBody.errors[0].status).to.eq(\"404\");\r", + " pm.expect(responseBody.errors[0].title).to.eq(\"The requested resource does not exist.\");\r", + " pm.expect(responseBody.errors[0].detail).to.eq(\"Resource of type 'books' with ID '99999999' does not exist.\");\r", "});\r", "" ], @@ -97,13 +95,14 @@ "raw": "" }, "url": { - "raw": "{{host}}/api/books", + "raw": "{{host}}/api/books/99999999", "host": [ "{{host}}" ], "path": [ "api", - "books" + "books", + "99999999" ] } }, @@ -115,7 +114,7 @@ { "listen": "test", "script": { - "id": "08cde6cb-b0b7-4a22-b079-e9bf7daa3c07", + "id": "c7db941a-26f5-4650-bb22-cc2bcea0b1fb", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -167,7 +166,7 @@ { "listen": "test", "script": { - "id": "8ea4e07f-a592-41c5-9ed3-97b057df467c", + "id": "c3d53ca9-5b59-4a9e-871e-cca1d02b4334", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -230,7 +229,7 @@ { "listen": "test", "script": { - "id": "c091cde9-3588-481c-b0ef-223fdbba82ac", + "id": "595ed506-f24c-453a-aaea-99f4b82e6a87", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -288,7 +287,7 @@ { "listen": "test", "script": { - "id": "c0b8c847-5a49-448d-bec7-937c33ba8e1d", + "id": "0a5476d6-5c52-4b7c-8ef5-fee6e8f5856b", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -346,7 +345,7 @@ { "listen": "test", "script": { - "id": "6b3ac25b-4f27-415f-a96e-83d59b3f510b", + "id": "406d83df-1b2c-4bce-a2a6-d04bcb5756e3", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -415,7 +414,7 @@ { "listen": "test", "script": { - "id": "0176dea4-ef64-4798-adbb-929e7345496b", + "id": "eed97da8-1407-416f-838e-4aaa9191edd0", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -467,7 +466,7 @@ { "listen": "test", "script": { - "id": "a456bcc6-2234-4bc6-a6d5-f26bfab3cbdb", + "id": "e6d4ef48-4706-47fa-9a82-1b312753b303", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -536,7 +535,7 @@ { "listen": "test", "script": { - "id": "147303da-dbc1-41a4-91f5-004e68d85b0c", + "id": "ef34f885-48d2-4fed-ab5b-fc55b02598f3", "exec": [ "pm.test(\"Correct response is returned\", function () {\r", " pm.response.to.have.status(200);\r", @@ -545,20 +544,13 @@ " pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/vnd.api+json');\r", "\r", " var responseBody = pm.response.json();\r", - " pm.expect(responseBody.meta.totalResources).to.eq(3);\r", - " pm.expect(responseBody.data.length).to.eq(3);\r", + " pm.expect(responseBody.data.type).to.eq('people');\r", + " pm.expect(responseBody.data.attributes.name).to.eq('Mary Shelley');\r", "\r", - " responseBody.data.forEach(element => {\r", - " pm.expect(element.type).to.eq('people');\r", - " pm.expect(element.attributes).to.have.all.keys('name');\r", - " });\r", - "\r", - " pm.expect(responseBody.included.length).to.eq(3);\r", - "\r", - " responseBody.included.forEach(element => {\r", - " pm.expect(element.type).to.eq('books');\r", - " pm.expect(element.attributes).to.have.all.keys('title', 'publishYear');\r", - " });\r", + " pm.expect(responseBody.included.length).to.eq(1);\r", + " pm.expect(responseBody.included[0].type).to.eq('books');\r", + " pm.expect(responseBody.included[0].attributes.title).to.eq('Frankenstein');\r", + " pm.expect(responseBody.included[0].attributes.publishYear).to.eq(1818);\r", "});\r", "" ], @@ -577,13 +569,14 @@ "raw": "" }, "url": { - "raw": "{{host}}/api/people?include=books&page[size]=0,books:0", + "raw": "{{host}}/api/people/1?include=books&page[size]=books:0", "host": [ "{{host}}" ], "path": [ "api", - "people" + "people", + "1" ], "query": [ { @@ -592,7 +585,7 @@ }, { "key": "page[size]", - "value": "0,books:0" + "value": "books:0" } ] } From 3f8b85b5ed04c0a7dc35fb00dbbeb1f1363ad055 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Tue, 24 Nov 2020 16:10:24 +0100 Subject: [PATCH 3/3] Review feedback --- test/e2e/postman/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/postman/index.js b/test/e2e/postman/index.js index 52969f0f14..88ef98991c 100644 --- a/test/e2e/postman/index.js +++ b/test/e2e/postman/index.js @@ -14,7 +14,7 @@ parallelCollectionRun = function (done) { newman.run(parametersForTestRun, done); }; -let commands = [] +const commands = [] for (let index = 0; index < PARALLEL_RUN_COUNT; index++) { commands.push(parallelCollectionRun); } @@ -25,7 +25,7 @@ async.parallel( err && console.error(err); results.forEach(function (result) { - var failures = result.run.failures; + const failures = result.run.failures; console.info(failures.length ? JSON.stringify(failures.failures, null, 2) : `${result.collection.name} ran successfully.`);