diff --git a/.gitignore b/.gitignore index 55371e5..3254652 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.vscode \ No newline at end of file +.vscode +.env \ No newline at end of file diff --git a/README.md b/README.md index 9756768..9f39e87 100644 --- a/README.md +++ b/README.md @@ -24,18 +24,11 @@ I've managed to workaround this and use my local machine as the host, by using t Clone this `basic-newman-slack-bot` repo and install all the npm modules using the `npm install` command in a terminal. -The `basic-newman-slack-bot` has been pre-loaded with a few example files, these files can be found in the `./collections` and `./environments` folders: - -```sh -- collections - - Restful_Booker_Collection.json -- environments - - Local_Restful_Booker_Environment.json - - Staging_Restful_Booker_Environment.json - - Production_Restful_Booker_Environment.json -``` +The `basic-newman-slack-bot` will search in your Postman workspace for the collection and the environment to execute tests. All you need is a valid API key. You can get your key from the [integrations dashboard](https://go.postman.co/integrations/services/pm_pro_api). + +We'll be using the [Postman echo](https://docs.postman-echo.com/?version=latest), this is a publicly available Collection released by Postman team. It includes many examples in test scripts. -These files will _tell_ `newman` where to make the requests too. We'll be using the [Restful-Booker API](https://restful-booker.herokuapp.com/), this is a publicly available set of endpoints, that I had no control over so it might be worth doing a quick check first, just to know that the API is alive....or you might see a lot of test failures. +Create an environment file with the name : `.env` and add a variable `API_KEY` with the value of the api key generated previously in Postman website. In the same terminal, navigate to the cloned directory and start the `express` server using the `npm start` command. This will start the app on port `3000`. @@ -49,8 +42,6 @@ Running the app locally using Docker can achieved using the `docker-compose up` ![Running Locally With Docker](./public/Running_Locally_With_Docker.png) -**Note** - If you make changes to any of the files or add things like your own `collection` or `environment` files, you will need to run the `docker-compose build` command, for the changes to take effect. - --- ## Installing the Newman Runner app in Slack @@ -115,7 +106,7 @@ If there are any test failures from the Newman Run, these will be listed in the ![Test Run Failures](./public/Slack_Bot_Failures.PNG) -If the Newman Run failed before running the Collection or there was a syntax error within a test etc. This will return a `Newman Error` message with a description of the error: +If the Newman Run failed before running the Collection (couldn't find the collection or the environment in your workspace) or there was a syntax error within a test etc. This will return a `Newman Error` message with a description of the error: ![Newman Run Error](./public/Slack_Bot_Newman_Fail.PNG) @@ -206,16 +197,13 @@ The Slack message output looks the _same_ but the `title` is now a hyperlink tha ![Dashboard Report](./public/Dashboard_Template.PNG) -The report is created using an optional custom template file, this can be found in the `./reports/templates` folder. The `newman-reporter-htmlextra` reporter will just create a default styled report if you don't add the `template` property. - To use a different template, you will need to change the path of the `template` option: ```javascript reporters: ['htmlextra'], reporter: { htmlextra: { - export: './reports/htmlResults.html', - template: '' + export: './reports/htmlResults.html' } } ``` diff --git a/app.js b/app.js index ab88057..25821b4 100644 --- a/app.js +++ b/app.js @@ -8,10 +8,14 @@ const path = require('path') const app = express() app.use(bodyParser.urlencoded({extended: true})) +app.use(bodyParser.json({ limit: "50mb" })); app.use(express.static('reports')); +const apikey = process.env.API_KEY + class TestRunContext { constructor(newmanResult) { + this.collection = newmanResult.collection.name; this.environment = newmanResult.environment.name this.iterationCount = newmanResult.run.stats.iterations.total this.start = new Date(newmanResult.run.timings.started) @@ -27,11 +31,15 @@ class TestRunContext { get percentagePassed() { return (this.testResultTotal * 100 / (this.testResultTotal + this.testResultFailed)).toFixed(2) } - - get envFileName() { - return this.environment === undefined ? "No Environment file specified for the Newman Run" : this.environment + + get environmentName() { + return this.environment === undefined ? "No Environment specified for the Newman Run" : this.environment; } + get collectionName() { + return this.collection === undefined ? "No Collection for the Newman Run" : this.collection; + } + get skippedList() { if(this.skipped === undefined) { return "No Skipped Tests" @@ -81,8 +89,8 @@ class TestRunContext { "fallback": "Newman Run Summary", "color": `${this.colour}`, "title": "Summary Test Result", - "title_link": "https://newman-app.localtunnel.me/htmlResults.html", - "text": `Environment File: *${this.envFileName}*\nTotal Run Duration: *${this.runDuration}*`, + "title_link": "http://newman-app.serverless.social/htmlResults.html", + "text": `Collection : *${this.collectionName}* \nEnvironment : *${this.environmentName}*\nTotal Run Duration: *${this.runDuration}*`, "mrkdwn": true, "fields": [ { @@ -131,13 +139,48 @@ class TestRunContext { } } -let executeNewman = (environmentFile, iterationCount) => { +let getCollectionUid = collectionName => { + const errorMessage = 'The Collection name provided is not found in your workspace. Please try again'; + return new Promise((resolve, reject) => { + axios({ + method: "GET", + url: `https://api.getpostman.com/collections/?apikey=${apikey}` + }) + .then(response => { + collection = response.data.collections.find(collection => collection.name === collectionName); + collection != undefined ? resolve(collection.uid) : reject(errorMessage); + }) + .catch(error => { + reject(error); + }); + }); +}; + +let getEnvironmentUid = environmentName => { + const errorMessage = 'The Environment name provided is not found in your workspace. Please try again'; + return new Promise((resolve, reject) => { + axios({ + method: "get", + url: + `https://api.getpostman.com/environments/?apikey=${apikey}` + }) + .then(response => { + environment = response.data.environments.find( environment => environment.name === environmentName); + environment != undefined ? resolve(environment.uid) : reject(errorMessage); + }) + .catch(error => { + reject(error); + }); + }); +}; + +let executeNewman = (collectionUid, environmentUid, iterationCount) => { return new Promise((resolve, reject) => { newman.run({ - collection: './collections/Restful_Booker_Collection.json', - environment: environmentFile, + collection: `https://api.getpostman.com/collections/${collectionUid}?apikey=${apikey}`, + environment: `https://api.getpostman.com/environments/${environmentUid}?apikey=${apikey}`, iterationCount: iterationCount, - reporters: ['htmlextra'], + reporters: ['cli', 'htmlextra'], reporter: { htmlextra: { export: './reports/htmlResults.html' @@ -152,21 +195,21 @@ let executeNewman = (environmentFile, iterationCount) => { }) } -function InvalidName(responseURL, message, res) { +function InvalidArgument(responseURL, argName, message, res) { axios({ method: 'post', url: `${responseURL}`, - headers: { "Content-Type": "application/json" }, + headers: { 'Content-Type': 'application/json' }, data: { - "response_type": "in_channel", - "attachments": [ + 'response_type': 'in_channel', + 'attachments': [ { - "color": "danger", - "title": "Invalid Environment", - "mrkdwn": true, - "fields": [ + 'color': 'danger', + 'title': `Invalid ${argName}`, + 'mrkdwn': true, + 'fields': [ { - "value": `${message}` + 'value': `${message}` } ] } @@ -182,81 +225,86 @@ app.post("/newmanRun", (req, res) => { const responseURL = req.body.response_url const channelText = req.body.text - const enteredEnv = (channelText).split(" ")[0] - const iterationCount = parseInt((channelText).split(" ")[1]) - - const filename = `./environments/${enteredEnv}_Restful_Booker_Environment.json` - - const fileNameCheck = fs.existsSync(filename) - - if (channelText.length === 0) { - - message = "Please enter an valid *Environment* name." - - return InvalidName(responseURL, message, res) - - } else if (fileNameCheck === false) { + const collectionName = channelText.split(" & ")[0]; + const environmentName = channelText.split(" & ")[1]; + const iterationCount = parseInt(channelText.split(" & ")[2]); - message = `Could not find the *${path.basename(filename)}* environment file. Please try again.` - - return InvalidName(responseURL, message, res) - - } else { - environmentFile = filename + if (channelText.length === 0) { + message = "Please enter a valid *Command* ."; + return InvalidArgument(responseURL,'Slack command', message, res); + } else if (collectionName === undefined || environmentName === undefined) { + message = `Could not find the Collection or the Environment in your command. Please try again.`; + return InvalidArgument(responseURL, 'Slack command', message, res); } - axios({ - method: 'post', - url: `${responseURL}`, - headers: { "Content-Type": "application/json" }, - data: { - "response_type": "in_channel", - "attachments": [ - { - "color": "good", - "title": "Newman Test Run Started", - "mrkdwn": true, - "fields": [ + getCollectionUid(collectionName) + .then(collectionUid => { + getEnvironmentUid(environmentName) + .then(environmentUid => { + axios({ + 'method': "post", + 'url': `${responseURL}`, + 'headers': { "Content-Type": "application/json" }, + 'data': { + 'response_type': "in_channel", + 'attachments': [ { - "value": `Your Summary Report for the *${enteredEnv}* environment will be with you _very_ soon` + 'color': "good", + 'title': "Newman Test Run Started", + 'mrkdwn': true, + 'fields': [ + { + 'value': `Your Summary Report for the collection *${collectionName}* in *${environmentName}* environment will be with you _very_ soon` + } + ] } ] } - ] - } - }) - .then(res.status(202).end()) - .then(() => executeNewman(environmentFile, iterationCount)) - .then(newmanResult => { return new TestRunContext(newmanResult) }) - .then(context => { - return axios({ - method: 'post', - url: `${responseURL}`, - headers: { "Content-Type": "application/json" }, - data: context.slackData - }) - }) - .catch(err => { - axios({ - method: 'post', - url: `${responseURL}`, - headers: { "Content-Type": "application/json" }, - data: { - "response_type": "in_channel", - "attachments": [ - { - "color": "danger", - "title": "Newman Run Error", - "fields": [ - { - "value": `${err}` + }) + .then(res.status(202).end()) + .then(() => { + executeNewman(collectionUid, environmentUid, iterationCount) + .then(newmanResult => { + return new TestRunContext(newmanResult); + }) + .then(context => { + return axios({ + 'method': "post", + 'url': `${responseURL}`, + 'headers': { "Content-Type": "application/json" }, + 'data': context.slackData + }); + }) + .catch(err => { + axios({ + method: "post", + url: `${responseURL}`, + headers: { "Content-Type": "application/json" }, + data: { + response_type: "in_channel", + attachments: [ + { + color: "danger", + title: "Newman Run Error", + fields: [ + { + value: `${err}` + } + ] + } + ] } - ] - } - ] - } - }) + }); + }); + }); + }) + .catch(error => { + InvalidArgument(responseURL, "Environment", error, res); + }); }) + .catch(error => { + InvalidArgument(responseURL, "Collection", error, res); + }); }) const port = Number(process.env.PORT || 3000) app.listen(port) diff --git a/collections/Restful_Booker_Collection.json b/collections/Restful_Booker_Collection.json deleted file mode 100644 index 6ab280c..0000000 --- a/collections/Restful_Booker_Collection.json +++ /dev/null @@ -1,896 +0,0 @@ -{ - "info": { - "_postman_id": "029c5a1a-d349-4b96-88ae-dcfbf619c51a", - "name": "Restful_Booker_Collection", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "item": [ - { - "name": "Health Check", - "item": [ - { - "name": "Ping the API", - "event": [ - { - "listen": "test", - "script": { - "id": "30d607f7-c915-4311-bd5f-8db21ff83749", - "exec": [ - "pm.test('Content-Type header is correct', () => pm.response.to.have.header('Content-Type', 'text/plain; charset=utf-8'))" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "id": "945042dc-1d26-4f1d-8505-61d928416bac", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/ping", - "host": [ - "{{baseURL}}" - ], - "path": [ - "ping" - ] - } - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "c97e3fac-9e1a-4a2d-89a1-316db4226b72", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "ac6e78e9-3fe3-49ee-b369-b4bfb17bbe77", - "type": "text/javascript", - "exec": [ - "pm.test(\"Status code is 201\", () => pm.response.to.have.status(201))" - ] - } - } - ] - }, - { - "name": "Get all Bookings", - "item": [ - { - "name": "Get all bookings", - "event": [ - { - "listen": "test", - "script": { - "id": "2f8189aa-caa7-4356-8a29-a63a8ef56c28", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "auth": { - "type": "noauth" - }, - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ] - } - }, - "response": [] - }, - { - "name": "Get all bookings with all parameters", - "event": [ - { - "listen": "test", - "script": { - "id": "e76e7e4c-5f8b-4487-9bf8-58771974105e", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking?firstname=sally&lastname=brown&checkin=2017-11-11&checkout=2017-11-15", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ], - "query": [ - { - "key": "firstname", - "value": "sally" - }, - { - "key": "lastname", - "value": "brown" - }, - { - "key": "checkin", - "value": "2017-11-11" - }, - { - "key": "checkout", - "value": "2017-11-15" - } - ] - } - }, - "response": [] - }, - { - "name": "Get all bookings with the firstname and last name parameter", - "event": [ - { - "listen": "test", - "script": { - "id": "aaec2a51-856f-4142-aa7e-10cc58d0049f", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking?firstname=sally&lastname=brown", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ], - "query": [ - { - "key": "firstname", - "value": "sally" - }, - { - "key": "lastname", - "value": "brown" - } - ] - } - }, - "response": [] - }, - { - "name": "Get all bookings with the firstname parameter", - "event": [ - { - "listen": "test", - "script": { - "id": "e9268b31-7153-4d71-afec-55bdd4da3716", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking?firstname=sally", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ], - "query": [ - { - "key": "firstname", - "value": "sally" - } - ] - } - }, - "response": [] - }, - { - "name": "Get all bookings with the lastname parameter", - "event": [ - { - "listen": "test", - "script": { - "id": "48384fa9-ab2a-4eba-b42e-b06adfdde2bf", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking?lastname=brown", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ], - "query": [ - { - "key": "lastname", - "value": "brown" - } - ] - } - }, - "response": [] - }, - { - "name": "Get all bookings with the checkin parameter", - "event": [ - { - "listen": "test", - "script": { - "id": "1069d975-0227-486f-9706-e75df3bea694", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking?checkin=2017-11-11", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ], - "query": [ - { - "key": "checkin", - "value": "2017-11-11" - } - ] - } - }, - "response": [] - }, - { - "name": "Get all bookings with the checkout parameter", - "event": [ - { - "listen": "test", - "script": { - "id": "0087784c-6a83-4004-8d73-c5514a29929c", - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking?checkout=2017-11-11", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ], - "query": [ - { - "key": "checkout", - "value": "2017-11-11" - } - ] - } - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "0536a016-3094-46ed-98ea-3fb644a21267", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "cdf77efe-432f-46e9-9b03-3c93ec84022d", - "type": "text/javascript", - "exec": [ - "pm.test(\"Status code is 200\", () => {", - " pm.response.to.have.status(200)", - "})", - "", - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8')", - "})" - ] - } - } - ] - }, - { - "name": "Get a single booking", - "item": [ - { - "name": "Get a single booking", - "event": [ - { - "listen": "test", - "script": { - "id": "f5d0f0a1-de6f-40b3-bc28-8421d7cfeaf7", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8')", - "})", - "", - "if(pm.response.json().additionalneeds === undefined) {", - " pm.test(\"Without Additional Needs - Response data format is correct\", () => {", - " var jsonData = pm.response.json()", - " pm.expect(jsonData.firstname).to.be.a('string')", - " pm.expect(jsonData.lastname).to.be.a('string')", - " pm.expect(jsonData.totalprice).to.a('number')", - " pm.expect(jsonData.depositpaid).to.be.a('boolean')", - " pm.expect(jsonData.bookingdates.checkin).to.be.a('string')", - " pm.expect(jsonData.bookingdates.checkin).to.match(/^\\d{4}-\\d{2}-\\d{2}$/)", - " pm.expect(jsonData.bookingdates.checkout).to.be.a('string')", - " pm.expect(jsonData.bookingdates.checkout).to.match(/^\\d{4}-\\d{2}-\\d{2}$/)", - " })", - "} else {", - " pm.test(\"With Additional Needs - Response data format is correct\", () => {", - " var jsonData = pm.response.json()", - " pm.expect(jsonData.firstname).to.be.a('string')", - " pm.expect(jsonData.lastname).to.be.a('string')", - " pm.expect(jsonData.totalprice).to.a('number')", - " pm.expect(jsonData.depositpaid).to.be.a('boolean')", - " pm.expect(jsonData.bookingdates.checkin).to.be.a('string')", - " pm.expect(jsonData.bookingdates.checkin).to.match(/^\\d{4}-\\d{2}-\\d{2}$/)", - " pm.expect(jsonData.bookingdates.checkout).to.be.a('string')", - " pm.expect(jsonData.bookingdates.checkout).to.match(/^\\d{4}-\\d{2}-\\d{2}$/)", - " pm.expect(pm.response.json().additionalneeds).to.be.a('string')", - " })", - "}", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Accept", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking/1", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking", - "1" - ] - } - }, - "response": [] - }, - { - "name": "Get a single booking with XML header set", - "event": [ - { - "listen": "test", - "script": { - "id": "fd5b8131-a8ac-4247-83f5-6d2602feb747", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'text/html; charset=utf-8')", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [ - { - "key": "Accept", - "value": "application/xml" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking/1", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking", - "1" - ] - } - }, - "response": [] - }, - { - "name": "Get a single booking dynamically", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "87aa1fc1-66cf-4596-bb6e-ec84494274bd", - "exec": [ - "pm.environment.set(\"booking_id\", _.random(1,10))" - ], - "type": "text/javascript" - } - }, - { - "listen": "test", - "script": { - "id": "7f1529fa-a58b-4d9b-a8b1-651483fa26e8", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8')", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "" - }, - "url": { - "raw": "{{baseURL}}/booking/{{booking_id}}", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking", - "{{booking_id}}" - ] - } - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "bed71d80-d8ce-4cdb-8a88-29bf0e78c8d4", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "44406529-93e1-4cb2-9f9f-68d1caa5cc9e", - "type": "text/javascript", - "exec": [ - "pm.test(\"Status code is 200\", () => {", - " pm.response.to.have.status(200)", - "})", - "", - "" - ] - } - } - ] - }, - { - "name": "Create a new booking", - "item": [ - { - "name": "Create a new booking with JSON", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "eeb0b51e-2c47-4271-8399-7fd1cd934d72", - "exec": [ - "" - ], - "type": "text/javascript" - } - }, - { - "listen": "test", - "script": { - "id": "748f8788-42bc-4765-a013-0795b357b67b", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8')", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\r\n \"firstname\" : \"Sally\",\r\n\t\"lastname\" : \"Brown\",\r\n\t\"totalprice\" : 111,\r\n\t\"depositpaid\" : true,\r\n\t\"additionalneeds\" : \"Breakfast\",\r\n\t\"bookingdates\" : {\r\n\t\t\"checkin\" : \"2013-02-23\",\r\n\t\t\"checkout\" : \"2014-10-23\"\r\n\t}\r\n}" - }, - "url": { - "raw": "{{baseURL}}/booking", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ] - } - }, - "response": [] - }, - { - "name": "Create a new booking with XML", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "eeb0b51e-2c47-4271-8399-7fd1cd934d72", - "exec": [ - "" - ], - "type": "text/javascript" - } - }, - { - "listen": "test", - "script": { - "id": "43617033-fef8-4fae-9cef-6ddbcf0260d6", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'text/html; charset=utf-8')", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "text/xml" - }, - { - "key": "Accept", - "value": "application/xml" - } - ], - "body": { - "mode": "raw", - "raw": "\r\n Sally\r\n Brown\r\n 111\r\n true\r\n Breakfast\r\n \r\n 2013/02/23\r\n 2014/10/23\r\n \r\n" - }, - "url": { - "raw": "{{baseURL}}/booking", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ] - } - }, - "response": [] - }, - { - "name": "Dynamically create a new booking with JSON", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "f4db6ba1-d350-4d89-a62b-97543a0886df", - "exec": [ - "pm.sendRequest(\"https://randomuser.me/api/\", (err, res) => {", - " var firstname = res.json().results[0].name.first", - " var lastname = res.json().results[0].name.last", - " pm.environment.set(\"first_name\", JSON.stringify((_.capitalize(firstname))))", - " pm.environment.set(\"last_name\", JSON.stringify((_.capitalize(lastname))))", - "})", - "", - "pm.environment.set(\"total_price\", _.random(0, 1000))", - "", - "const depositPaid = [true, false]", - "pm.environment.set(\"depositPaid\", _.shuffle(depositPaid)[0])", - "", - "const moment = require('moment')", - "pm.environment.set(\"check_in\", JSON.stringify(moment().format('YYYY-MM-DD')))", - "pm.environment.set(\"check_out\", JSON.stringify(moment().add(_.random(1, 14), 'days').format('YYYY-MM-DD')))", - "", - "const items = [\"None\", \"Breakfast\", \"Lunch\", \"Dinner\", \"Late Checkout\", \"Newspaper\", \"Extra Pillow\"]", - "pm.environment.set(\"additional_needs\", JSON.stringify(_.shuffle(items)[0]))" - ], - "type": "text/javascript" - } - }, - { - "listen": "test", - "script": { - "id": "34a00c54-ce1d-4a19-9ff4-59ffc06f5e39", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8')", - "})", - "", - "function cleanup() {", - " const clean = ['first_name', 'last_name', 'total_price', 'depositPaid', 'check_in', 'check_out', 'additional_needs']", - " for(let i = 0; i < clean.length; ++i){", - " pm.environment.unset(clean[i])", - " }", - "}", - "cleanup()", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\r\n\t\"firstname\" : {{first_name}},\r\n\t\"lastname\" : {{last_name}},\r\n\t\"totalprice\" : {{total_price}},\r\n\t\"depositpaid\" : {{depositPaid}},\r\n\t\"additionalneeds\" : {{additional_needs}},\r\n\t\"bookingdates\" : {\r\n\t\t\"checkin\" : {{check_in}},\r\n\t\t\"checkout\" : {{check_out}}\r\n\t}\r\n}" - }, - "url": { - "raw": "{{baseURL}}/booking", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ] - } - }, - "response": [] - }, - { - "name": "Dynamically create a new booking with XML", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "f4db6ba1-d350-4d89-a62b-97543a0886df", - "exec": [ - "pm.sendRequest(\"https://randomuser.me/api/\", (err, res) => {", - " var firstname = res.json().results[0].name.first", - " var lastname = res.json().results[0].name.last", - " pm.environment.set(\"first_name\", JSON.stringify((_.capitalize(firstname))))", - " pm.environment.set(\"last_name\", JSON.stringify((_.capitalize(lastname))))", - "})", - "", - "pm.environment.set(\"total_price\", _.random(0, 1000))", - "", - "const depositPaid = [true, false]", - "pm.environment.set(\"depositPaid\", _.shuffle(depositPaid)[0])", - "", - "const moment = require('moment')", - "pm.environment.set(\"check_in\", JSON.stringify(moment().format('YYYY-MM-DD')))", - "pm.environment.set(\"check_out\", JSON.stringify(moment().add(_.random(1, 14), 'days').format('YYYY-MM-DD')))", - "", - "const items = [\"None\", \"Breakfast\", \"Lunch\", \"Dinner\", \"Late Checkout\", \"Newspaper\", \"Extra Pillow\"]", - "pm.environment.set(\"additional_needs\", JSON.stringify(_.shuffle(items)[0]))" - ], - "type": "text/javascript" - } - }, - { - "listen": "test", - "script": { - "id": "34a00c54-ce1d-4a19-9ff4-59ffc06f5e39", - "exec": [ - "pm.test('Content-Type header is correct', () => { ", - " pm.response.to.have.header('Content-Type', 'text/html; charset=utf-8')", - "})", - "", - "function cleanup() {", - " const clean = ['first_name', 'last_name', 'total_price', 'depositPaid', 'check_in', 'check_out', 'additional_needs']", - " for(let i = 0; i < clean.length; ++i){", - " pm.environment.unset(clean[i])", - " }", - "}", - "cleanup()", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "text/xml" - }, - { - "key": "Accept", - "value": "application/xml" - } - ], - "body": { - "mode": "raw", - "raw": "\r\n {{first_name}}\r\n {{last_name}}\r\n {{total_price}}\r\n {{depositPaid}}\r\n {{additional_needs}}\r\n \r\n {{check_in}}\r\n {{check_out}}\r\n \r\n" - }, - "url": { - "raw": "{{baseURL}}/booking", - "host": [ - "{{baseURL}}" - ], - "path": [ - "booking" - ] - } - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "11c17706-3be5-4542-8259-14da4a075c9d", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "0889379f-bb83-4911-945a-60722eb65854", - "type": "text/javascript", - "exec": [ - "pm.test(\"Status code is 200\", () => {", - " pm.response.to.have.status(200)", - "})" - ] - } - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "dc3d0ab5-1b11-4abe-b203-7240dc6b3fd7", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "3dfdde3a-f257-4fde-8b54-9301f0e4f6c8", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ] -} \ No newline at end of file diff --git a/environments/Local_Restful_Booker_Environment.json b/environments/Local_Restful_Booker_Environment.json deleted file mode 100644 index 029ddc9..0000000 --- a/environments/Local_Restful_Booker_Environment.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": "71b771de-4312-479c-afc8-5f042c207a71", - "name": "Local_Restful_Booker_Environment", - "values": [ - { - "key": "baseURL", - "value": "https://restful-booker.herokuapp.com", - "description": { - "content": "", - "type": "text/plain" - }, - "enabled": true - } - ], - "_postman_variable_scope": "environment", - "_postman_exported_at": "2018-11-05T11:03:58.286Z", - "_postman_exported_using": "Postman/6.4.4" -} \ No newline at end of file diff --git a/environments/Production_Restful_Booker_Environment.json b/environments/Production_Restful_Booker_Environment.json deleted file mode 100644 index 68fbf21..0000000 --- a/environments/Production_Restful_Booker_Environment.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": "71b771de-4312-479c-afc8-5f042c207a71", - "name": "Production_Restful_Booker_Environment", - "values": [ - { - "key": "baseURL", - "value": "https://restful-booker.herokuapp.com", - "description": { - "content": "", - "type": "text/plain" - }, - "enabled": true - } - ], - "_postman_variable_scope": "environment", - "_postman_exported_at": "2018-11-05T11:03:58.286Z", - "_postman_exported_using": "Postman/6.4.4" -} \ No newline at end of file diff --git a/environments/Staging_Restful_Booker_Environment.json b/environments/Staging_Restful_Booker_Environment.json deleted file mode 100644 index 4ee474a..0000000 --- a/environments/Staging_Restful_Booker_Environment.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": "71b771de-4312-479c-afc8-5f042c207a71", - "name": "Staging_Restful_Booker_Environment", - "values": [ - { - "key": "baseURL", - "value": "https://restful-booker.herokuapp.com", - "description": { - "content": "", - "type": "text/plain" - }, - "enabled": true - } - ], - "_postman_variable_scope": "environment", - "_postman_exported_at": "2018-11-05T11:03:58.286Z", - "_postman_exported_using": "Postman/6.4.4" -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a22e9cd..90085e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,29 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@postman/csv-parse": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@postman/csv-parse/-/csv-parse-4.0.2.tgz", + "integrity": "sha512-fopt7VY/srspxfPz2tJdR41z9fGTjbuwcKRxWTqwXjcutJBBgHp+ot8Vr5oa5XO5sGHEbPNyX9mxtsJso8oVYw==" + }, + "@postman/form-data": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@postman/form-data/-/form-data-3.1.0.tgz", + "integrity": "sha512-6x1UHKQ45Sv5yLFjqhhtyk3YGOF9677RVRQjfr32Bkt45pH8yIlqcpPxiIR4/ZEs3GFk5vl5j9ymmdLTt0HR6Q==", + "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" + } + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -14,11 +37,11 @@ } }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -285,12 +308,11 @@ } }, "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "underscore": "~1.7.0", - "underscore.string": "~2.4.0" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -359,12 +381,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "asynckit": { "version": "0.4.0", @@ -377,9 +396,12 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autolinker": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", - "integrity": "sha1-NCQX2PLzRhsUzwkIjV7fh5HcmDI=" + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", + "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=", + "requires": { + "gulp-header": "^1.7.1" + } }, "aws-sign2": { "version": "0.7.0", @@ -387,9 +409,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "axios": { "version": "0.18.1", @@ -442,6 +464,11 @@ "pascalcase": "^0.1.1" } }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -548,10 +575,13 @@ "to-regex": "^3.0.1" } }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + "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" + } }, "bytes": { "version": "3.1.0", @@ -595,9 +625,9 @@ } }, "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.8.0.tgz", + "integrity": "sha512-fRAe54sDSPvCz9I3puKUoUpLBEIUjlwBoNyNcD2eAiP5Ybw2iXnrT7w15hfkNywosXFNllWwvOKsxl7UUCKQaQ==" }, "charset": { "version": "1.0.1", @@ -626,9 +656,9 @@ } }, "cli-progress": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-2.1.1.tgz", - "integrity": "sha512-TSJw3LY9ZRSis7yYzQ7flIdtQMbacd9oYoiFphJhI4SzgmqF0zErO+uNv0lbUjk1L4AGfHQJ4OVYYzW+JV66KA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.6.0.tgz", + "integrity": "sha512-elg6jkiDedYrvwqWSae2FGvtbMo37Lo04oI9jJ5cI43Ge3jrDPWzeL3axv7MgBLYHDY/kGio/CXa49m4MWMrNw==", "requires": { "colors": "^1.1.2", "string-width": "^2.1.1" @@ -740,28 +770,36 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "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.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "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": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "requires": { + "source-map": "^0.6.1" + } + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -818,11 +856,6 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" }, - "csv-parse": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.0.1.tgz", - "integrity": "sha512-ehkwejEj05wwO7Q9JD+YSI6dNMIauHIroNU1RALrmRrqPoZIwRnfBtgq5GkU6i2RxZOJqjo3dtI1NrVSXvaimA==" - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -944,12 +977,24 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" + } } }, "domelementtype": { @@ -974,6 +1019,11 @@ "domelementtype": "1" } }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1032,9 +1082,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" }, "expand-brackets": { "version": "2.1.4", @@ -1204,6 +1254,11 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "faker": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", + "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" + }, "falsey": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/falsey/-/falsey-0.3.2.tgz", @@ -1220,14 +1275,14 @@ } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "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", @@ -1235,9 +1290,9 @@ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" }, "filesize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-4.1.2.tgz", - "integrity": "sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" }, "fill-range": { "version": "4.0.0", @@ -1312,9 +1367,9 @@ } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" }, "follow-redirects": { "version": "1.7.0", @@ -1430,10 +1485,20 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, + "gulp-header": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", + "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", + "requires": { + "concat-with-sourcemaps": "*", + "lodash.template": "^4.4.0", + "through2": "^2.0.0" + } + }, "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.6.0.tgz", + "integrity": "sha512-i1ZUP7Qp2JdkMaFon2a+b0m5geE8Z4ZTLaGkgrObkEd+OkUKyRbRWw4KxuFCoHfdETSY1yf9/574eVoNSiK7pw==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -1620,9 +1685,9 @@ } }, "highlight.js": { - "version": "9.15.6", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", - "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==" + "version": "9.18.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", + "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==" }, "hosted-git-info": { "version": "2.7.1", @@ -1751,6 +1816,11 @@ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", @@ -1962,9 +2032,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "lazy-cache": { "version": "2.0.2", @@ -2035,9 +2105,14 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, "lodash.clonedeep": { "version": "4.5.0", @@ -2064,6 +2139,23 @@ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "log-ok": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", @@ -2110,9 +2202,9 @@ } }, "marked": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.1.tgz", - "integrity": "sha512-+H0L3ibcWhAZE02SKMqmvYsErLo4EAVJxu5h3bHBBDvvjeWXtl92rGUSBYHL2++5Y+RSNgl8dYOAXcYe7lp1fA==" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" }, "media-typer": { "version": "0.3.0", @@ -2349,48 +2441,94 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, "newman": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/newman/-/newman-4.4.1.tgz", - "integrity": "sha512-HMYCBlFNlST/XnpVg8ri6hZ9PaDiqsgIpzUyy26Ra1WpNQorrezN8qD0FM35yeCv5R//QrsUiJMH8Wy6AkE3nw==", - "requires": { - "async": "2.6.1", - "chardet": "0.7.0", - "cli-progress": "2.1.1", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/newman/-/newman-4.6.0.tgz", + "integrity": "sha512-TJ1S9uSEkdzgIsLbXv5wRDZUt+a006WEdeFcK2lS9vUWpG4WiP5KiOVr/7nD4huU9jvEdZfkuFY2YDpuNxYrKA==", + "requires": { + "@postman/csv-parse": "4.0.2", + "async": "3.2.0", + "chardet": "0.8.0", + "cli-progress": "3.6.0", "cli-table3": "0.5.1", - "colors": "1.3.3", - "commander": "2.19.0", - "csv-parse": "4.0.1", - "eventemitter3": "3.1.0", - "filesize": "4.1.2", - "lodash": "4.17.11", + "colors": "1.4.0", + "commander": "4.1.1", + "eventemitter3": "4.0.0", + "filesize": "6.1.0", + "lodash": "4.17.15", "mkdirp": "0.5.1", - "postman-collection": "3.4.6", - "postman-collection-transformer": "3.0.0", - "postman-request": "2.88.1-postman.8", - "postman-runtime": "7.11.0", - "pretty-ms": "4.0.0", - "semver": "5.6.0", + "postman-collection": "3.5.5", + "postman-collection-transformer": "3.2.0", + "postman-request": "2.88.1-postman.16", + "postman-runtime": "7.22.0", + "pretty-ms": "5.1.0", + "semver": "7.1.3", "serialised-error": "1.1.3", "word-wrap": "1.2.3", - "xmlbuilder": "11.0.1" + "xmlbuilder": "14.0.0" + }, + "dependencies": { + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" + }, + "pretty-ms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-5.1.0.tgz", + "integrity": "sha512-4gaK1skD2gwscCfkswYQRmddUb2GJZtzDGRjHWadVHtK/DIKFufa12MvES6/xu1tVbUYeia5bmLcwJtZJQUqnw==", + "requires": { + "parse-ms": "^2.1.0" + } + }, + "semver": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==" + } } }, "newman-reporter-htmlextra": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/newman-reporter-htmlextra/-/newman-reporter-htmlextra-1.6.10.tgz", - "integrity": "sha512-VlMG9DTU6Sv8/u+SYbFSbp1t6owTXj9PB9rw29UFLcnklEvvN85segyal/cQX8BvKWI6Pkz88CWKz8U60eAaVw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/newman-reporter-htmlextra/-/newman-reporter-htmlextra-1.12.1.tgz", + "integrity": "sha512-fP8sKEvaN/g9p3qljbzpKcqU12y/IDZjo3kb8fECOfWtz21yrRV0Iju66vOJ7vELxCjvYKDnqCdZwPdQF/pVCg==", "requires": { - "filesize": "^4.1.2", - "handlebars": "^4.1.1", + "filesize": "^6.0.0", + "handlebars": "^4.7.3", "handlebars-helpers": "^0.10.0", "helper-moment": "^0.2.0", - "lodash": "^4.17.10", - "pretty-ms": "^4.0.0" + "lodash": "^4.17.14", + "pretty-ms": "^6.0.0" + }, + "dependencies": { + "handlebars": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.3.tgz", + "integrity": "sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" + }, + "pretty-ms": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", + "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", + "requires": { + "parse-ms": "^2.1.0" + } + } } }, "node-oauth1": { @@ -2586,9 +2724,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -2606,43 +2744,90 @@ } }, "postman-collection": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.4.6.tgz", - "integrity": "sha512-8MWLE84JolniNR4mmBiZlkTgqICtlEt7wppsK1xzUfdNQWNvId0dZuwqLF6e6pyXNhCtDYl0CqjdY7l82X7+gg==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.5.5.tgz", + "integrity": "sha512-W0w0wqLlMSvFSY0LYsoNKpaFcjeg+MeNOR1XK4VyX8XFDt3uAhwCe88dS23Ee/ZG7K8T83fJU8lqVk7fjOuAUA==", "requires": { "escape-html": "1.0.3", + "faker": "4.1.0", "file-type": "3.9.0", "http-reasons": "0.1.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.5.0", "liquid-json": "0.3.1", - "lodash": "4.17.11", - "marked": "0.6.1", + "lodash": "4.17.15", + "marked": "0.7.0", "mime-format": "2.0.0", - "mime-types": "2.1.22", - "postman-url-encoder": "1.0.1", - "sanitize-html": "1.20.0", - "semver": "5.6.0", - "uuid": "3.3.2" + "mime-types": "2.1.25", + "postman-url-encoder": "1.0.3", + "sanitize-html": "1.20.1", + "semver": "6.3.0", + "uuid": "3.3.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", + "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "postman-collection-transformer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-3.0.0.tgz", - "integrity": "sha512-XPNCtaekoOFGBQnjOfGs/fD7Qk8L8Nmp9NPO77Pivv8MRdMvNZM8QqbZ/Uh4zybyLedIIBKX1vsov4VIOBhU6Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-3.2.0.tgz", + "integrity": "sha512-Z29YqacRD+G0sj5hWsmPP8FvgzT2sx2xc/fyQ/YhpP1rHosH9Q04mXKe534VcsIv3LjT25vUgMFVFLfKYHLdpg==", "requires": { - "commander": "2.19.0", - "inherits": "2.0.3", + "commander": "3.0.1", + "inherits": "2.0.4", "intel": "1.2.0", - "lodash": "4.17.11", - "semver": "5.6.0", - "strip-json-comments": "2.0.1" + "lodash": "4.17.15", + "semver": "6.3.0", + "strip-json-comments": "3.0.1" + }, + "dependencies": { + "commander": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz", + "integrity": "sha512-UNgvDd+csKdc9GD4zjtkHKQbT8Aspt2jCBqNSPp53vAS0L1tS9sXB2TCEOPHJ7kt9bN/niWkYj8T3RQSoMXdSQ==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "postman-request": { - "version": "2.88.1-postman.8", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.8.tgz", - "integrity": "sha512-lXxc4R6+g4oiLPA937Thl5MGdFBV7FSBN4WnUhKNq2UWEt+YJrOEYv0UOP6pH7kPF5cg8IXG1lHls7IWf8if4A==", + "version": "2.88.1-postman.16", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.16.tgz", + "integrity": "sha512-qXIK9aQ8JzAZA/VBWtyajEdAQNbPuVVRXuzhzXUuPcdaFYeZgj2PUZXkml6KhGB8zg8FP6/l53gHLA56IRV7Cw==", "requires": { + "@postman/tunnel-agent": "^0.6.3", "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", @@ -2663,49 +2848,152 @@ "safe-buffer": "^5.1.2", "stream-length": "^1.0.2", "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "postman-url-encoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-1.0.1.tgz", + "integrity": "sha1-oJSkLpQV/wu/3ODqqOYBHUSe6Dw=" + } } }, "postman-runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.11.0.tgz", - "integrity": "sha512-IgBo6CZneFIhpOXNMDllOd8sQwm0wNHM3mjYynFPdLUx29UVP+4P92QdWDpUwsxDa55hKBg8sZhqGU7JeH9teg==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.22.0.tgz", + "integrity": "sha512-VTxjUHKVT/XryLMNDGxGH3m/dha9oMmI0lnrzEP9+ZP86yrCeBWh6NbpQHsatt4Kmi1ICDcMQynZtufwrFZExQ==", "requires": { - "async": "2.6.1", - "aws4": "1.8.0", - "btoa": "1.2.1", + "async": "2.6.2", + "aws4": "1.9.0", "crypto-js": "3.1.9-1", - "eventemitter3": "3.1.0", + "eventemitter3": "4.0.0", + "handlebars": "4.6.0", "http-reasons": "0.1.0", "httpntlm": "1.7.6", - "inherits": "2.0.3", - "lodash": "4.17.11", + "inherits": "2.0.4", + "lodash": "4.17.15", "node-oauth1": "1.2.2", "performance-now": "2.1.0", - "postman-collection": "3.4.6", - "postman-request": "2.88.1-postman.8", - "postman-sandbox": "3.2.6", - "resolve-from": "4.0.0", + "postman-collection": "3.5.5", + "postman-request": "2.88.1-postman.18", + "postman-sandbox": "3.5.2", + "postman-url-encoder": "1.0.3", + "resolve-from": "5.0.0", "serialised-error": "1.1.3", - "uuid": "3.3.2" + "tough-cookie": "3.0.1", + "uuid": "3.3.3" + }, + "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "requires": { + "lodash": "^4.17.11" + } + }, + "aws4": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", + "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "postman-request": { + "version": "2.88.1-postman.18", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.18.tgz", + "integrity": "sha512-wve79Z0OpDewdqS8u9P4dJN7yGjs6dmYeo857oe/KQtBu7bTWvr98MphjD5JnbijABKHFbsKbIllPh+5WX2BrA==", + "requires": { + "@postman/form-data": "~3.1.0", + "@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.2.0", + "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", + "postman-url-encoder": "1.0.1", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "stream-length": "^1.0.2", + "tough-cookie": "~2.5.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "postman-url-encoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-1.0.1.tgz", + "integrity": "sha1-oJSkLpQV/wu/3ODqqOYBHUSe6Dw=" + }, + "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" + } + } + } + }, + "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" + } + } } }, "postman-sandbox": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-3.2.6.tgz", - "integrity": "sha512-mf7x9yuFJf4XYDtZ5T5jPRFH116wvs5k9WRyiMSmA8fYpqX+LZPZaP4M8DVTkJ6T4DbgErRzc+VMfVtJ4wSjkg==", - "requires": { - "inherits": "2.0.3", - "lodash": "4.17.11", - "uuid": "3.3.2", - "uvm": "1.7.5" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-3.5.2.tgz", + "integrity": "sha512-2+dMUNVdSOHJhyJml4RVdzcsj1FUC4A4mHg3jODp146e3tUjj5c523GdxU28QvCuY4g2bw6awkd9ZAkDtmccmA==", + "requires": { + "inherits": "2.0.4", + "lodash": "4.17.15", + "teleport-javascript": "1.0.0", + "tough-cookie": "3.0.1", + "uuid": "3.3.3", + "uvm": "1.7.8" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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" + } + } } }, "postman-url-encoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-1.0.1.tgz", - "integrity": "sha1-oJSkLpQV/wu/3ODqqOYBHUSe6Dw=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-1.0.3.tgz", + "integrity": "sha512-bkLjnntRHuPBQVOyGXrlrV1AWGNoZjkAI9C1pbATGzw5nLy4pOSDu5KVUsK20u6hhriFFXKUIblp0WqS3iMygw==" }, "pretty-ms": { "version": "4.0.0", @@ -2715,6 +3003,11 @@ "parse-ms": "^2.0.0" } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -2725,9 +3018,9 @@ } }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "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", @@ -2794,9 +3087,9 @@ } }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "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", @@ -2850,12 +3143,12 @@ } }, "remarkable": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.1.tgz", - "integrity": "sha1-qspJchALZqZCpjoQIcpLrBvjv/Y=", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", + "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", "requires": { - "argparse": "~0.1.15", - "autolinker": "~0.15.0" + "argparse": "^1.0.10", + "autolinker": "~0.28.0" } }, "repeat-element": { @@ -2887,9 +3180,9 @@ } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve-url": { "version": "0.2.1", @@ -2920,9 +3213,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize-html": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.0.tgz", - "integrity": "sha512-BpxXkBoAG+uKCHjoXFmox6kCSYpnulABoGcZ/R3QyY9ndXbIM5S94eOr1IqnzTG8TnbmXaxWoDDzKC5eJv7fEQ==", + "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", @@ -3028,9 +3321,9 @@ } }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -3120,11 +3413,11 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -3191,6 +3484,11 @@ } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "srcset": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", @@ -3269,11 +3567,18 @@ } }, "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "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.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } } }, "strip-ansi": { @@ -3293,9 +3598,9 @@ } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" }, "striptags": { "version": "3.1.1", @@ -3320,6 +3625,44 @@ "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==" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -3454,14 +3797,6 @@ "punycode": "^2.1.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -3495,19 +3830,19 @@ } }, "uglify-js": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.8.tgz", - "integrity": "sha512-GFSjB1nZIzoIq70qvDRtWRORHX3vFkAnyK/rDExc0BN7r9+/S+Voz3t/fwJuVfjppAMz+ceR2poE7tkhvnVwQQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.1.tgz", + "integrity": "sha512-W7KxyzeaQmZvUFbGj4+YFshhVrMBGSg2IbcYAjGWGvx8DHvJMclbTDMpffdxFUGPBHjIytk7KJUR/KUXstUGDw==", "optional": true, "requires": { - "commander": "~2.20.0", + "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "optional": true } } @@ -3517,33 +3852,15 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" - }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unpipe": { @@ -3621,19 +3938,31 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "uvm": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-1.7.5.tgz", - "integrity": "sha512-QteSdkvRFbrSozInbNwRy5c8RUlxyyZU32EFCVHBDDPprCJ/gAAbWwTTAvyqC8+7uhxGihocAtcn28YBrpObZg==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-1.7.8.tgz", + "integrity": "sha512-Uasp7fsWQBo+pZbtlA0C464vYC6uHDdSVbX08vIinvi7r/k1R9sSs7n2/rf8lHkYRR6l4I46i7/xsWdqvLKDVQ==", "requires": { - "flatted": "2.0.0", - "inherits": "2.0.3", - "lodash": "4.17.11", + "flatted": "2.0.1", + "inherits": "2.0.4", + "lodash": "4.17.15", "uuid": "3.3.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } } }, "validate-npm-package-license": { @@ -3690,14 +4019,14 @@ } }, "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "3.2.1", diff --git a/package.json b/package.json index 24f023c..51efa58 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "app.js", "scripts": { "start": "node app.js", - "start-tunnel": "lt --subdomain newman-app --port 3000" + "start-tunnel": "lt --subdomain newman-app -h \"http://serverless.social\" --port 3000" }, "keywords": [], "author": "Danny Dainton", @@ -13,10 +13,11 @@ "dependencies": { "axios": "^0.18.1", "body-parser": "^1.19.0", + "dotenv": "^8.2.0", "express": "^4.15.3", "localtunnel": "^1.9.1", - "newman": "^4.4.1", - "newman-reporter-htmlextra": "^1.6.10", + "newman": "^4.6.0", + "newman-reporter-htmlextra": "^1.12.1", "pretty-ms": "^4.0.0" }, "repository": { diff --git a/public/Slack_Bot_Command.PNG b/public/Slack_Bot_Command.PNG index f4d841b..1acfb2b 100644 Binary files a/public/Slack_Bot_Command.PNG and b/public/Slack_Bot_Command.PNG differ diff --git a/public/Slack_Bot_Iteration_Count.PNG b/public/Slack_Bot_Iteration_Count.PNG index 18209b8..05d2b3b 100644 Binary files a/public/Slack_Bot_Iteration_Count.PNG and b/public/Slack_Bot_Iteration_Count.PNG differ diff --git a/public/Slack_Bot_Iteration_Count_Run.PNG b/public/Slack_Bot_Iteration_Count_Run.PNG index f4e466b..5385d30 100644 Binary files a/public/Slack_Bot_Iteration_Count_Run.PNG and b/public/Slack_Bot_Iteration_Count_Run.PNG differ diff --git a/public/Slack_Bot_Newman_Fail.PNG b/public/Slack_Bot_Newman_Fail.PNG index 8aaa812..17da633 100644 Binary files a/public/Slack_Bot_Newman_Fail.PNG and b/public/Slack_Bot_Newman_Fail.PNG differ diff --git a/public/Slack_Bot_Pass.PNG b/public/Slack_Bot_Pass.PNG index 1052367..39d9c86 100644 Binary files a/public/Slack_Bot_Pass.PNG and b/public/Slack_Bot_Pass.PNG differ diff --git a/public/Slack_Bot_Run.gif b/public/Slack_Bot_Run.gif index 9441122..fcf4a6e 100644 Binary files a/public/Slack_Bot_Run.gif and b/public/Slack_Bot_Run.gif differ diff --git a/public/Slack_Bot_Run_Iterations.gif b/public/Slack_Bot_Run_Iterations.gif index 8b875a0..af49a42 100644 Binary files a/public/Slack_Bot_Run_Iterations.gif and b/public/Slack_Bot_Run_Iterations.gif differ diff --git a/reports/templates/dark-theme-dashboard.hbs b/reports/templates/dark-theme-dashboard.hbs deleted file mode 100644 index e80f246..0000000 --- a/reports/templates/dark-theme-dashboard.hbs +++ /dev/null @@ -1,807 +0,0 @@ - - - - - Newman Summary Report - - - - - - - -
- {{#with summary}} -
-
- - {{/with}} -
-
-
-{{#with summary}} -
-

{{title}}

-

{{moment date format="dddd, DD MMMM YYYY HH:mm:ss"}}

-
-
-
-
-
- -
-
Total Iterations
-

{{stats.iterations.total}}

-
-
-
-
-
-
-
- -
-
Total Assertions
-

{{totalTests stats.assertions.total skippedTests.length}}

-
-
-
-
-
-
-
- -
-
Total Failed Tests
-

{{failures.length}}

-
-
-
-
-
-
-
- -
-
Total Skipped Tests
-

{{#gt skippedTests.length 0}}{{skippedTests.length}}{{else}}0{{/gt}}

-
-
-
-
-
-
-
-
-
-
-
-
File Information
- Collection: {{collection.name}}
- {{#if environment.name}} Environment: {{environment.name}}
{{/if}} -
-
-
-
- {{#if collection.description}} -
-
-
-
-
Collection Description
-
-
{{collection.description}}
-
-
-
-
-
- {{/if}} -
-
-
-
-
Timings and Data
- Total run duration: {{duration}}
- Total data received: {{responseTotal}}
- Average response time: {{responseAverage}}
-
-
-
-
- {{/with}} -
-
-
- - - - - - - - - - {{#with summary.stats}} - - - - - - - - - - - - - - - - {{/with}} - {{#with summary}} - - - - - - - - - - - {{/with}} - -
Summary ItemTotalFailed
Requests{{requests.total}}{{requests.failed}}
Prerequest Scripts{{prerequestScripts.total}}{{prerequestScripts.failed}}
Test Scripts{{testScripts.total}}{{testScripts.failed}}
Assertions{{totalTests stats.assertions.total skippedTests.length}}{{stats.assertions.failed}}
Skipped Tests{{#gt skippedTests.length 0}}{{skippedTests.length}}{{else}}0{{/gt}}-
-
-
-
-
-
-
-
-
-
-
- - {{#if summary.failures.length}} - {{#with summary}} -
-

Showing {{failures.length}} {{#gt failures.length 1}}Failures{{else}}Failure{{/gt}}

-
- {{/with}} - {{#each summary.failures}} -
-
-
- -
-
-
Failed Test: {{error.test}}
-
-
Assertion Error Message
-
-
{{error.message}}
-
-
-
-
-
-
- {{/each}} - {{else}} -
-

There are no failed tests



-
- {{/if}} -
- -
- - {{#if summary.skippedTests.length}} - {{#with summary}} -
-

Showing {{skippedTests.length}} Skipped {{#gt skippedTests.length 1}}Tests{{else}}Test{{/gt}}

-
- {{/with}} - {{#each summary.skippedTests}} -
-
-
- -
-
-
Request Name: {{item.name}}
-
-
-
-
-
- {{/each}} - {{else}} -
-

There are no skipped tests



-
- {{/if}} -
-
- - {{#if summary.consoleLogs.length}} - {{#with summary}} -
-

Showing {{consoleLogs.length}} Console Log {{#gt consoleLogs.length 1}}Messages{{else}}Message{{/gt}}

-
- {{/with}} - {{#each summary.consoleLogs}} -
-
-
-
-
Log Message
-
-
-
-
{{messages}}
-
-
-
-
-
- {{/each}} - {{/if}} -
-
- - - - {{!--
-
- -
-
--}} -
- {{#with summary}} -
{{stats.iterations.total}} {{#gt stats.iterations.total 1}}Iterations{{else}}Iteration{{/gt}} available to view
- {{/with}} - -
-
-{{#each aggregations}} - {{#if parent.name}} - -
- {{> aggregations}} -
- {{else}} - {{> aggregations}} - {{/if}} -{{/each}} -
-
-
-
- - - -{{#*inline "aggregations"}} -{{#each executions}} -
-
-
-
- -
-
- {{#with request}} - {{#if description.content}} -
-
-
-
-
-
Request Description
-
- {{description.content}} -
-
-
-
-
-
- {{/if}} - {{/with}} -
-
-
-
-
-
Request Information
- Request Method: {{request.method}}
- Request URL: {{request.url}}
-
-
-
-
-
Response Information
- Response Code: {{response.code}} - {{response.status}}
- Mean time per request: {{mean.time}}
- Mean size per request: {{mean.size}}
-
-
Test Pass Percentage
-
-
-
-
{{#gte cumulativeTests.passed 1}}{{percent cumulativeTests.passed cumulativeTests.failed}} %{{else}}0 %{{/gte}}
-
-
-
-
-
-
-
-
- {{#with request}} - {{#if body.raw}} -
-
-
-
-
-
Request Body
-
-
{{body.raw}}
-
-
-
-
-
-
- {{/if}} - {{/with}} -
-
-
-
-
-
Response Headers
- {{#if response.header}} -
- - - - {{#each response.header}} - - - - - {{/each}} - -
Header NameHeader Value
{{key}}{{value}}
-
- {{/if}} -
-
-
-
-
-
-
-
-
-
-
Response Body
- {{#if response.body}} -
-
{{response.body}}
-
- - {{/if}} -
-
-
-
-
-
-
-
-
Test Information
- {{#if assertions.length}} -
- - - - {{#each assertions}} - - - - - - - {{/each}} - - - - - - - -
NamePassedFailedSkipped
{{this.name}}{{this.passed}}{{this.failed}}{{this.skipped}}
Total{{cumulativeTests.passed}}{{cumulativeTests.failed}}{{cumulativeTests.skipped}}
-
-
-
-
-
-
-
Test Failures
-
- - - - {{#each assertions}} - {{#isTheSame testFailure.test this.name}} - - - - - {{/isTheSame}} - {{/each}} - -
Test NameAssertion Error
{{testFailure.test}}
{{testFailure.message}}
-
-
-
-
-
-
- {{else}} -
No Tests for this request
- {{/if}} -
-
-
-
-
-
-
-
-
-{{/each}} -{{/inline}} - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/reports/templates/dashboard-template.hbs b/reports/templates/dashboard-template.hbs deleted file mode 100644 index 7cc9977..0000000 --- a/reports/templates/dashboard-template.hbs +++ /dev/null @@ -1,761 +0,0 @@ - - - - - Newman Summary Report - - - - - - - -
- {{#with summary}} -
-
- - {{/with}} -
-
-
-{{#with summary}} -
-

{{title}}

-

{{moment date format="dddd, DD MMMM YYYY HH:mm:ss"}}

-
-
-
-
-
- -
-
Total Iterations
-

{{stats.iterations.total}}

-
-
-
-
-
-
-
- -
-
Total Assertions
-

{{totalTests stats.assertions.total skippedTests.length}}

-
-
-
-
-
-
-
- -
-
Total Failed Tests
-

{{failures.length}}

-
-
-
-
-
-
-
- -
-
Total Skipped Tests
-

{{#gt skippedTests.length 0}}{{skippedTests.length}}{{else}}0{{/gt}}

-
-
-
-
-
-
-
-
-
-
-
-
File Information
- Collection: {{collection.name}}
- {{#if environment.name}} Environment: {{environment.name}}
{{/if}} -
-
-
-
- {{#if collection.description}} -
-
-
-
-
Collection Description
-
-
{{collection.description}}
-
-
-
-
-
- {{/if}} -
-
-
-
-
Timings and Data
- Total run duration: {{duration}}
- Total data received: {{responseTotal}}
- Average response time: {{responseAverage}}
-
-
-
-
- {{/with}} -
-
-
- - - - - - - - - - {{#with summary.stats}} - - - - - - - - - - - - - - - - {{/with}} - {{#with summary}} - - - - - - - - - - - {{/with}} - -
Summary ItemTotalFailed
Requests{{requests.total}}{{requests.failed}}
Prerequest Scripts{{prerequestScripts.total}}{{prerequestScripts.failed}}
Test Scripts{{testScripts.total}}{{testScripts.failed}}
Assertions{{totalTests stats.assertions.total skippedTests.length}}{{stats.assertions.failed}}
Skipped Tests{{#gt skippedTests.length 0}}{{skippedTests.length}}{{else}}0{{/gt}}-
-
-
-
-
-
-
-
-
-
-
- - {{#if summary.failures.length}} - {{#with summary}} -
-

Showing {{failures.length}} {{#gt failures.length 1}}Failures{{else}}Failure{{/gt}}

-
- {{/with}} - {{#each summary.failures}} -
-
-
- -
-
-
Failed Test: {{error.test}}
-
-
Assertion Error Message
-
-
{{error.message}}
-
-
-
-
-
-
- {{/each}} - {{else}} -
-

There are no failed tests



-
- {{/if}} -
- -
- - {{#if summary.skippedTests.length}} - {{#with summary}} -
-

Showing {{skippedTests.length}} Skipped {{#gt skippedTests.length 1}}Tests{{else}}Test{{/gt}}

-
- {{/with}} - {{#each summary.skippedTests}} -
-
-
- -
-
-
Request Name: {{item.name}}
-
-
-
-
-
- {{/each}} - {{else}} -
-

There are no skipped tests



-
- {{/if}} -
-
- - {{#if summary.consoleLogs.length}} - {{#with summary}} -
-

Showing {{consoleLogs.length}} Console Log {{#gt consoleLogs.length 1}}Messages{{else}}Message{{/gt}}

-
- {{/with}} - {{#each summary.consoleLogs}} -
-
-
-
-
Log Message
-
-
-
-
{{messages}}
-
-
-
-
-
- {{/each}} - {{/if}} -
-
- - - - {{!--
-
- -
-
--}} -
- {{#with summary}} -
{{stats.iterations.total}} {{#gt stats.iterations.total 1}}Iterations{{else}}Iteration{{/gt}} available to view
- {{/with}} - -
-
-{{#each aggregations}} - {{#if parent.name}} - -
- {{> aggregations}} -
- {{else}} - {{> aggregations}} - {{/if}} -{{/each}} -
-
-
-
- - - -{{#*inline "aggregations"}} -{{#each executions}} -
-
-
-
- -
-
- {{#with request}} - {{#if description.content}} -
-
-
-
-
-
Request Description
-
- {{description.content}} -
-
-
-
-
-
- {{/if}} - {{/with}} -
-
-
-
-
-
Request Information
- Request Method: {{request.method}}
- Request URL: {{request.url}}
-
-
-
-
-
Response Information
- Response Code: {{response.code}} - {{response.status}}
- Mean time per request: {{mean.time}}
- Mean size per request: {{mean.size}}
-
-
Test Pass Percentage
-
-
-
-
{{#gte cumulativeTests.passed 1}}{{percent cumulativeTests.passed cumulativeTests.failed}} %{{else}}0 %{{/gte}}
-
-
-
-
-
-
-
-
- {{#with request}} - {{#if body.raw}} -
-
-
-
-
-
Request Body
-
-
{{body.raw}}
-
-
-
-
-
-
- {{/if}} - {{/with}} -
-
-
-
-
-
Response Headers
- {{#if response.header}} -
- - - - {{#each response.header}} - - - - - {{/each}} - -
Header NameHeader Value
{{key}}{{value}}
-
- {{/if}} -
-
-
-
-
-
-
-
-
-
-
Response Body
- {{#if response.body}} -
-
{{response.body}}
-
- - {{/if}} -
-
-
-
-
-
-
-
-
Test Information
- {{#if assertions.length}} -
- - - - {{#each assertions}} - - - - - - - {{/each}} - - - - - - - -
NamePassedFailedSkipped
{{this.name}}{{this.passed}}{{this.failed}}{{this.skipped}}
Total{{cumulativeTests.passed}}{{cumulativeTests.failed}}{{cumulativeTests.skipped}}
-
-
-
-
-
-
-
Test Failures
-
- - - - {{#each assertions}} - {{#isTheSame testFailure.test this.name}} - - - - - {{/isTheSame}} - {{/each}} - -
Test NameAssertion Error
{{testFailure.test}}
{{testFailure.message}}
-
-
-
-
-
-
- {{else}} -
No Tests for this request
- {{/if}} -
-
-
-
-
-
-
-
-
-{{/each}} -{{/inline}} - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file