From a008a4acb856142a1d9466a3fc991cbd4893d197 Mon Sep 17 00:00:00 2001 From: Adam Nowrot Date: Tue, 2 Apr 2019 15:59:44 +0200 Subject: [PATCH 1/2] updated webdriver-manager --- dist/comparators/comparator.interface.js | 2 + .../interfaces/comparator.interface.js | 0 dist/form-handlers/form-handler.interface.js | 2 + .../interfaces/form-handler.interface.js | 0 dist/generators/generator.interface.js | 2 + .../interfaces/generator.interface.js | 0 dist/matchers/interfaces/matcher.interface.js | 0 dist/matchers/matcher.interface.js | 2 + dist/rest/api-request.js | 34 ++ dist/rest/api-response.js | 28 ++ dist/rest/rest-api-service.js | 25 ++ dist/step_definitions/api.js | 74 +++++ dist/tests/dictionaries/fake-dictionary.js | 10 + dist/tests/init.js | 6 + .../interfaces/transformer.interface.js | 0 dist/transformers/transformer.interface.js | 2 + .../browsers/get-browser-drivers.helper.js | 14 + package-lock.json | 295 +++++++++++++----- package.json | 2 +- 19 files changed, 420 insertions(+), 78 deletions(-) create mode 100644 dist/comparators/comparator.interface.js create mode 100644 dist/comparators/interfaces/comparator.interface.js create mode 100644 dist/form-handlers/form-handler.interface.js create mode 100644 dist/form-handlers/interfaces/form-handler.interface.js create mode 100644 dist/generators/generator.interface.js create mode 100644 dist/generators/interfaces/generator.interface.js create mode 100644 dist/matchers/interfaces/matcher.interface.js create mode 100644 dist/matchers/matcher.interface.js create mode 100644 dist/rest/api-request.js create mode 100644 dist/rest/api-response.js create mode 100644 dist/rest/rest-api-service.js create mode 100644 dist/step_definitions/api.js create mode 100644 dist/tests/dictionaries/fake-dictionary.js create mode 100644 dist/tests/init.js create mode 100644 dist/transformers/interfaces/transformer.interface.js create mode 100644 dist/transformers/transformer.interface.js create mode 100644 dist/web/browsers/get-browser-drivers.helper.js diff --git a/dist/comparators/comparator.interface.js b/dist/comparators/comparator.interface.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/comparators/comparator.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/comparators/interfaces/comparator.interface.js b/dist/comparators/interfaces/comparator.interface.js new file mode 100644 index 00000000..e69de29b diff --git a/dist/form-handlers/form-handler.interface.js b/dist/form-handlers/form-handler.interface.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/form-handlers/form-handler.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/form-handlers/interfaces/form-handler.interface.js b/dist/form-handlers/interfaces/form-handler.interface.js new file mode 100644 index 00000000..e69de29b diff --git a/dist/generators/generator.interface.js b/dist/generators/generator.interface.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/generators/generator.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/generators/interfaces/generator.interface.js b/dist/generators/interfaces/generator.interface.js new file mode 100644 index 00000000..e69de29b diff --git a/dist/matchers/interfaces/matcher.interface.js b/dist/matchers/interfaces/matcher.interface.js new file mode 100644 index 00000000..e69de29b diff --git a/dist/matchers/matcher.interface.js b/dist/matchers/matcher.interface.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/matchers/matcher.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/rest/api-request.js b/dist/rest/api-request.js new file mode 100644 index 00000000..46ef2dea --- /dev/null +++ b/dist/rest/api-request.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const node_fetch_1 = require("node-fetch"); +const FormData = require("form-data"); +class ApiRequest { + constructor() { + this.payload = null; + this.headers = new node_fetch_1.Headers(); + this.formData = new FormData(); + } + addHeaders(headers) { + for (const [key, value] of Object.entries(headers)) { + this.headers.append(key, value); + } + } + addFormData(payload) { + for (const table of payload) { + this.formData.append(table[0], table[1]); + } + return this.formData; + } + get body() { + return this.payload; + } + set body(payload) { + if (payload instanceof FormData) { + this.payload = payload; + } + else { + this.payload = payload ? JSON.stringify(payload) : undefined; + } + } +} +exports.ApiRequest = ApiRequest; diff --git a/dist/rest/api-response.js b/dist/rest/api-response.js new file mode 100644 index 00000000..2e554e2e --- /dev/null +++ b/dist/rest/api-response.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const _ = require("lodash"); +const Ajv = require("ajv"); +const ajv = new Ajv({ allErrors: true }); +class ApiResponse { + constructor(responseStatus, body) { + this.body = body; + this.status = responseStatus; + } + hasStatus(status) { + return this.status === status; + } + hasBodyMatch(body) { + if (Object.keys(this.body).length === 0) { + return Error('Response from server was empty'); + } + return _.isEqual(this.body, body); + } + hasMatchingSchema(schema) { + const test = ajv.compile(schema); + const isValid = test(this.body); + if (isValid === false) { + throw Error('Response doesnt match schema'); + } + } +} +exports.ApiResponse = ApiResponse; diff --git a/dist/rest/rest-api-service.js b/dist/rest/rest-api-service.js new file mode 100644 index 00000000..95c68269 --- /dev/null +++ b/dist/rest/rest-api-service.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const node_fetch_1 = require("node-fetch"); +const api_response_1 = require("./api-response"); +class RestApiService { + constructor(baseUrl) { + this.baseUrl = baseUrl; + } + fetch(request) { + const url = this.resolveUrl(request.endpoint); + return node_fetch_1.default(url, { method: request.method, body: request.body, headers: request.headers }).then(response => { + const contentType = response.headers.get('content-type'); + if (contentType && contentType.startsWith('application/json')) { + return response.json().then(requestBody => { + return new api_response_1.ApiResponse(response.status, requestBody); + }); + } + return new api_response_1.ApiResponse(response.status, {}); + }); + } + resolveUrl(endpoint) { + return `${this.baseUrl}${endpoint}`; + } +} +exports.RestApiService = RestApiService; diff --git a/dist/step_definitions/api.js b/dist/step_definitions/api.js new file mode 100644 index 00000000..4a242fab --- /dev/null +++ b/dist/step_definitions/api.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const cucumber_1 = require("cucumber"); +const config_helper_1 = require("../core/config.helper"); +const rest_api_service_1 = require("../rest/rest-api-service"); +const api_request_1 = require("../rest/api-request"); +const service = new rest_api_service_1.RestApiService(config_helper_1.default.apiUrl); +let apiRequest = new api_request_1.ApiRequest(); +cucumber_1.defineSupportCode(({ When, Then }) => { + let fetchResult; + When(/^I send "([^"]*)" request on "([^"]*)" endpoint$/, (method, endpoint) => { + apiRequest.method = method; + apiRequest.endpoint = endpoint; + return service + .fetch(apiRequest) + .then(response => { + fetchResult = response; + return response; + }) + .finally(() => { + apiRequest = new api_request_1.ApiRequest(); + return apiRequest; + }); + }); + When(/^I send "([^"]*)" request on "([^"]*)" endpoint with JSON body:$/, (method, endpoint, payload) => { + apiRequest.method = method; + apiRequest.endpoint = endpoint; + apiRequest.body = JSON.parse(payload); + apiRequest.addHeaders({ 'Content-Type': 'application/json' }); + return service + .fetch(apiRequest) + .then(response => { + fetchResult = response; + return response; + }) + .finally(() => { + apiRequest = new api_request_1.ApiRequest(); + return apiRequest; + }); + }); + When(/^I send "([^"]*)" request on "([^"]*)" endpoint using form data:$/, (method, endpoint, payload) => { + apiRequest.method = method; + apiRequest.endpoint = endpoint; + apiRequest.body = apiRequest.addFormData(payload.raw()); + apiRequest.addHeaders({ 'Content-Type': 'multipart/form-data' }); + return service + .fetch(apiRequest) + .then(response => { + fetchResult = response; + return response; + }) + .finally(() => { + apiRequest = new api_request_1.ApiRequest(); + return apiRequest; + }); + }); + When(/^I set request headers:$/, headers => { + return apiRequest.addHeaders(headers.rowsHash()); + }); + Then(/^the response code should be "([^"]*)"$/, status => { + return expect(fetchResult.hasStatus(parseInt(status))).toBe(true); + }); + Then(/^the response should exact match to body:$/, body => { + return expect(fetchResult.hasBodyMatch(JSON.parse(body))).toBe(true); + }); + Then(/^the response should match JSON schema:$/, schema => { + try { + fetchResult.hasMatchingSchema(JSON.parse(schema)); + } + catch (error) { + return Promise.reject(error); + } + }); +}); diff --git a/dist/tests/dictionaries/fake-dictionary.js b/dist/tests/dictionaries/fake-dictionary.js new file mode 100644 index 00000000..394a1e69 --- /dev/null +++ b/dist/tests/dictionaries/fake-dictionary.js @@ -0,0 +1,10 @@ +"use strict"; +const base_1 = require("../../dictionaries/base"); +class FakeDictionary extends base_1.default { + constructor() { + super('fake-dictionary', { + 'some-key': 'some-value', + }); + } +} +module.exports = new FakeDictionary(); diff --git a/dist/tests/init.js b/dist/tests/init.js new file mode 100644 index 00000000..c94654e1 --- /dev/null +++ b/dist/tests/init.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const protractor = require("protractor"); +// set global by to allow recursive call on src directory +global.by = new protractor.ProtractorBy(); +require('../core/prototypes'); diff --git a/dist/transformers/interfaces/transformer.interface.js b/dist/transformers/interfaces/transformer.interface.js new file mode 100644 index 00000000..e69de29b diff --git a/dist/transformers/transformer.interface.js b/dist/transformers/transformer.interface.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/transformers/transformer.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/web/browsers/get-browser-drivers.helper.js b/dist/web/browsers/get-browser-drivers.helper.js new file mode 100644 index 00000000..a1b0735e --- /dev/null +++ b/dist/web/browsers/get-browser-drivers.helper.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +exports.getBrowsersDrivers = (commandArgs) => { + const drivers = []; + const pathToDrivers = './node_modules/protractor/node_modules/webdriver-manager/selenium'; + if (commandArgs.ie) { + // This is required as Protractor cannot find IEDriverServer. The other drivers does not require any additional configuration. + const availableDrivers = fs.readdirSync(pathToDrivers); + const IEDriver = availableDrivers.filter(item => item.match('IEDriverServer([0-9].[0-9]{3}.[0-9]).exe'))[0]; + drivers.push(`-Dwebdriver.ie.driver=${pathToDrivers}/${IEDriver}`); + } + return drivers; +}; diff --git a/package-lock.json b/package-lock.json index e356e82b..adde3aad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1556,6 +1556,11 @@ "readdirp": "^2.0.0" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1671,7 +1676,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", @@ -1687,8 +1691,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codepage": { "version": "1.13.1", @@ -1992,8 +1995,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -2205,7 +2207,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -2639,7 +2640,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -2930,6 +2930,14 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "^2.2.1" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -3496,8 +3504,7 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-func-name": { "version": "2.0.0", @@ -3520,7 +3527,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -5736,6 +5742,14 @@ "tmpl": "1.0.x" } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5842,6 +5856,30 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -6122,7 +6160,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, "requires": { "path-key": "^2.0.0" } @@ -6141,8 +6178,7 @@ "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=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { "version": "2.1.2", @@ -6482,11 +6518,20 @@ "object-assign": "^4.1.0" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "1.3.0", @@ -6585,8 +6630,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", @@ -6833,6 +6877,24 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "webdriver-manager": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz", + "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } } } }, @@ -6878,7 +6940,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7468,14 +7529,12 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "resolve": { "version": "1.10.0", @@ -7974,8 +8033,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", @@ -8444,8 +8502,7 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { "version": "2.0.1", @@ -8532,6 +8589,27 @@ } } }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, "test-exclude": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", @@ -9058,57 +9136,127 @@ } }, "webdriver-manager": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz", - "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", - "requires": { - "adm-zip": "^0.4.9", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.87.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-13.0.0.tgz", + "integrity": "sha512-nwcbUWZwwqw4Nn+Xs8rgyX5JWDJ3oOAEc+OMI9sp8QlM7yg1CDaqqk/2DRZI/ig3DxQwZ1Xna3Eq0unNUaSQvA==", + "requires": { + "adm-zip": "^0.4.13", + "loglevel": "^1.6.1", + "request": "^2.88.0", + "semver": "^5.6.0", + "tar": "^4.4.8", + "xml2js": "^0.4.19", + "yargs": "^12.0.5" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "camelcase": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.0.tgz", + "integrity": "sha512-Y05ICatFYPAfykDIB7VdwSJ0LUl1yq/BwO2OpyGGLjiRe1fgzTwVypPiWnzkGFOVFHXrCXUNBl86bpjBhZWSJg==" }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "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" + "invert-kv": "^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=", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "ansi-regex": "^2.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.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=" + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -9174,8 +9322,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wordwrap": { "version": "0.0.3", @@ -9186,7 +9333,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -9195,14 +9341,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -9211,7 +9355,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -9222,7 +9365,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -9318,8 +9460,7 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yallist": { "version": "2.1.2", diff --git a/package.json b/package.json index f4d11e3a..73e491d2 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "protractor-multiple-cucumber-html-reporter-plugin": "^1.8.0", "shelljs": "^0.8.3", "sugar-date": "^2.0.6", - "webdriver-manager": "^12.1.0" + "webdriver-manager": "^13.0.0" }, "lint-staged": { "src/**/*.js": [ From f176884eecdfc5240c5c29ee9a92633982f480a8 Mon Sep 17 00:00:00 2001 From: Adam Nowrot Date: Mon, 8 Apr 2019 08:01:54 +0200 Subject: [PATCH 2/2] removed unnecessary files --- dist/comparators/comparator.interface.js | 2 - dist/form-handlers/form-handler.interface.js | 2 - dist/generators/generator.interface.js | 2 - dist/matchers/matcher.interface.js | 2 - dist/rest/api-request.js | 34 --------- dist/rest/api-response.js | 28 ------- dist/rest/rest-api-service.js | 25 ------- dist/step_definitions/api.js | 74 ------------------- dist/tests/dictionaries/fake-dictionary.js | 10 --- dist/tests/init.js | 6 -- dist/transformers/transformer.interface.js | 2 - .../browsers/get-browser-drivers.helper.js | 14 ---- 12 files changed, 201 deletions(-) delete mode 100644 dist/comparators/comparator.interface.js delete mode 100644 dist/form-handlers/form-handler.interface.js delete mode 100644 dist/generators/generator.interface.js delete mode 100644 dist/matchers/matcher.interface.js delete mode 100644 dist/rest/api-request.js delete mode 100644 dist/rest/api-response.js delete mode 100644 dist/rest/rest-api-service.js delete mode 100644 dist/step_definitions/api.js delete mode 100644 dist/tests/dictionaries/fake-dictionary.js delete mode 100644 dist/tests/init.js delete mode 100644 dist/transformers/transformer.interface.js delete mode 100644 dist/web/browsers/get-browser-drivers.helper.js diff --git a/dist/comparators/comparator.interface.js b/dist/comparators/comparator.interface.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/comparators/comparator.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/form-handlers/form-handler.interface.js b/dist/form-handlers/form-handler.interface.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/form-handlers/form-handler.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/generators/generator.interface.js b/dist/generators/generator.interface.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/generators/generator.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/matchers/matcher.interface.js b/dist/matchers/matcher.interface.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/matchers/matcher.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/rest/api-request.js b/dist/rest/api-request.js deleted file mode 100644 index 46ef2dea..00000000 --- a/dist/rest/api-request.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const node_fetch_1 = require("node-fetch"); -const FormData = require("form-data"); -class ApiRequest { - constructor() { - this.payload = null; - this.headers = new node_fetch_1.Headers(); - this.formData = new FormData(); - } - addHeaders(headers) { - for (const [key, value] of Object.entries(headers)) { - this.headers.append(key, value); - } - } - addFormData(payload) { - for (const table of payload) { - this.formData.append(table[0], table[1]); - } - return this.formData; - } - get body() { - return this.payload; - } - set body(payload) { - if (payload instanceof FormData) { - this.payload = payload; - } - else { - this.payload = payload ? JSON.stringify(payload) : undefined; - } - } -} -exports.ApiRequest = ApiRequest; diff --git a/dist/rest/api-response.js b/dist/rest/api-response.js deleted file mode 100644 index 2e554e2e..00000000 --- a/dist/rest/api-response.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const _ = require("lodash"); -const Ajv = require("ajv"); -const ajv = new Ajv({ allErrors: true }); -class ApiResponse { - constructor(responseStatus, body) { - this.body = body; - this.status = responseStatus; - } - hasStatus(status) { - return this.status === status; - } - hasBodyMatch(body) { - if (Object.keys(this.body).length === 0) { - return Error('Response from server was empty'); - } - return _.isEqual(this.body, body); - } - hasMatchingSchema(schema) { - const test = ajv.compile(schema); - const isValid = test(this.body); - if (isValid === false) { - throw Error('Response doesnt match schema'); - } - } -} -exports.ApiResponse = ApiResponse; diff --git a/dist/rest/rest-api-service.js b/dist/rest/rest-api-service.js deleted file mode 100644 index 95c68269..00000000 --- a/dist/rest/rest-api-service.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const node_fetch_1 = require("node-fetch"); -const api_response_1 = require("./api-response"); -class RestApiService { - constructor(baseUrl) { - this.baseUrl = baseUrl; - } - fetch(request) { - const url = this.resolveUrl(request.endpoint); - return node_fetch_1.default(url, { method: request.method, body: request.body, headers: request.headers }).then(response => { - const contentType = response.headers.get('content-type'); - if (contentType && contentType.startsWith('application/json')) { - return response.json().then(requestBody => { - return new api_response_1.ApiResponse(response.status, requestBody); - }); - } - return new api_response_1.ApiResponse(response.status, {}); - }); - } - resolveUrl(endpoint) { - return `${this.baseUrl}${endpoint}`; - } -} -exports.RestApiService = RestApiService; diff --git a/dist/step_definitions/api.js b/dist/step_definitions/api.js deleted file mode 100644 index 4a242fab..00000000 --- a/dist/step_definitions/api.js +++ /dev/null @@ -1,74 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const cucumber_1 = require("cucumber"); -const config_helper_1 = require("../core/config.helper"); -const rest_api_service_1 = require("../rest/rest-api-service"); -const api_request_1 = require("../rest/api-request"); -const service = new rest_api_service_1.RestApiService(config_helper_1.default.apiUrl); -let apiRequest = new api_request_1.ApiRequest(); -cucumber_1.defineSupportCode(({ When, Then }) => { - let fetchResult; - When(/^I send "([^"]*)" request on "([^"]*)" endpoint$/, (method, endpoint) => { - apiRequest.method = method; - apiRequest.endpoint = endpoint; - return service - .fetch(apiRequest) - .then(response => { - fetchResult = response; - return response; - }) - .finally(() => { - apiRequest = new api_request_1.ApiRequest(); - return apiRequest; - }); - }); - When(/^I send "([^"]*)" request on "([^"]*)" endpoint with JSON body:$/, (method, endpoint, payload) => { - apiRequest.method = method; - apiRequest.endpoint = endpoint; - apiRequest.body = JSON.parse(payload); - apiRequest.addHeaders({ 'Content-Type': 'application/json' }); - return service - .fetch(apiRequest) - .then(response => { - fetchResult = response; - return response; - }) - .finally(() => { - apiRequest = new api_request_1.ApiRequest(); - return apiRequest; - }); - }); - When(/^I send "([^"]*)" request on "([^"]*)" endpoint using form data:$/, (method, endpoint, payload) => { - apiRequest.method = method; - apiRequest.endpoint = endpoint; - apiRequest.body = apiRequest.addFormData(payload.raw()); - apiRequest.addHeaders({ 'Content-Type': 'multipart/form-data' }); - return service - .fetch(apiRequest) - .then(response => { - fetchResult = response; - return response; - }) - .finally(() => { - apiRequest = new api_request_1.ApiRequest(); - return apiRequest; - }); - }); - When(/^I set request headers:$/, headers => { - return apiRequest.addHeaders(headers.rowsHash()); - }); - Then(/^the response code should be "([^"]*)"$/, status => { - return expect(fetchResult.hasStatus(parseInt(status))).toBe(true); - }); - Then(/^the response should exact match to body:$/, body => { - return expect(fetchResult.hasBodyMatch(JSON.parse(body))).toBe(true); - }); - Then(/^the response should match JSON schema:$/, schema => { - try { - fetchResult.hasMatchingSchema(JSON.parse(schema)); - } - catch (error) { - return Promise.reject(error); - } - }); -}); diff --git a/dist/tests/dictionaries/fake-dictionary.js b/dist/tests/dictionaries/fake-dictionary.js deleted file mode 100644 index 394a1e69..00000000 --- a/dist/tests/dictionaries/fake-dictionary.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -const base_1 = require("../../dictionaries/base"); -class FakeDictionary extends base_1.default { - constructor() { - super('fake-dictionary', { - 'some-key': 'some-value', - }); - } -} -module.exports = new FakeDictionary(); diff --git a/dist/tests/init.js b/dist/tests/init.js deleted file mode 100644 index c94654e1..00000000 --- a/dist/tests/init.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const protractor = require("protractor"); -// set global by to allow recursive call on src directory -global.by = new protractor.ProtractorBy(); -require('../core/prototypes'); diff --git a/dist/transformers/transformer.interface.js b/dist/transformers/transformer.interface.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/transformers/transformer.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/web/browsers/get-browser-drivers.helper.js b/dist/web/browsers/get-browser-drivers.helper.js deleted file mode 100644 index a1b0735e..00000000 --- a/dist/web/browsers/get-browser-drivers.helper.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const fs = require("fs"); -exports.getBrowsersDrivers = (commandArgs) => { - const drivers = []; - const pathToDrivers = './node_modules/protractor/node_modules/webdriver-manager/selenium'; - if (commandArgs.ie) { - // This is required as Protractor cannot find IEDriverServer. The other drivers does not require any additional configuration. - const availableDrivers = fs.readdirSync(pathToDrivers); - const IEDriver = availableDrivers.filter(item => item.match('IEDriverServer([0-9].[0-9]{3}.[0-9]).exe'))[0]; - drivers.push(`-Dwebdriver.ie.driver=${pathToDrivers}/${IEDriver}`); - } - return drivers; -};