Issue-ID: SDC-2483 38/92638/1
authorilanap <ilanap@amdocs.com>
Sun, 4 Aug 2019 07:16:33 +0000 (10:16 +0300)
committerilanap <ilanap@amdocs.com>
Sun, 4 Aug 2019 07:16:33 +0000 (10:16 +0300)
Adding https support for cucumber tests and slight refactoring

Signed-off-by: ilanap <ilanap@amdocs.com>
Change-Id: Ib772d18cd4278238571daf54bcb6372c553d6e4b

30 files changed:
cucumber-js-test-apis-ci/config.json
cucumber-js-test-apis-ci/cucumber-common/package.json [new file with mode: 0644]
cucumber-js-test-apis-ci/cucumber-common/plugins/README.md [moved from cucumber-js-test-apis-ci/plugins/README.md with 86% similarity]
cucumber-js-test-apis-ci/cucumber-common/plugins/jsdoc_config.json [moved from cucumber-js-test-apis-ci/plugins/jsdoc_config.json with 86% similarity]
cucumber-js-test-apis-ci/cucumber-common/plugins/reporter.js [moved from cucumber-js-test-apis-ci/plugins/reporter.js with 100% similarity]
cucumber-js-test-apis-ci/cucumber-common/plugins/steps.js [moved from cucumber-js-test-apis-ci/plugins/steps.js with 100% similarity]
cucumber-js-test-apis-ci/cucumber-common/stepDefinitions/world.js [moved from cucumber-js-test-apis-ci/stepDefinitions/world.js with 71% similarity]
cucumber-js-test-apis-ci/cucumber-common/utils/UpdateTestConfig.js [new file with mode: 0644]
cucumber-js-test-apis-ci/cucumber-common/utils/Utils.js [new file with mode: 0644]
cucumber-js-test-apis-ci/cucumber.js
cucumber-js-test-apis-ci/dev_pom.xml [deleted file]
cucumber-js-test-apis-ci/docker/Dockerfile
cucumber-js-test-apis-ci/docker/startup.sh
cucumber-js-test-apis-ci/package.json
cucumber-js-test-apis-ci/pom.xml
cucumber-js-test-apis-ci/stepDefinitions/ActivitySpec_steps.js
cucumber-js-test-apis-ci/stepDefinitions/Collaboration_Steps.js
cucumber-js-test-apis-ci/stepDefinitions/General_Steps.js
cucumber-js-test-apis-ci/stepDefinitions/GlobalTypes.js
cucumber-js-test-apis-ci/stepDefinitions/InputData_steps.js
cucumber-js-test-apis-ci/stepDefinitions/InterfaceOperationSteps.js
cucumber-js-test-apis-ci/stepDefinitions/Item_steps.js
cucumber-js-test-apis-ci/stepDefinitions/NetworkPackage_steps.js
cucumber-js-test-apis-ci/stepDefinitions/Questionnaire_steps.js
cucumber-js-test-apis-ci/stepDefinitions/REST_Steps.js
cucumber-js-test-apis-ci/stepDefinitions/Toggle_Steps.js
cucumber-js-test-apis-ci/stepDefinitions/Utils.js [deleted file]
cucumber-js-test-apis-ci/stepDefinitions/VF_steps.js
cucumber-js-test-apis-ci/stepDefinitions/VLM_steps.js
cucumber-js-test-apis-ci/stepDefinitions/VSP_steps.js

index 00c6552..fdee980 100644 (file)
@@ -1,22 +1,28 @@
 {
-  "protocol" : "http",
-
   "onboarding" : {
+    "protocol" : "http",
     "port" : "onboarding.port",
     "prefix" : "onboarding-api/v1.0",
     "server" : "onboarding.server",
-    "user" : "onboarding.user"
+    "user" : "onboarding.user",
+    "isDefault" : true
   },
   "catalog" : {
+    "protocol" : "http",
     "port" : "CatalogBE.port",
     "prefix" : "sdc2/rest/v1",
     "server" : "CatalogBE.server",
     "user" : "CatalogBE.user"
   },
   "activity_spec" : {
+    "protocol" : "http",
     "port" : "activity-spec.port",
     "prefix" : "activity-spec-api/v1.0",
     "server" : "activity_spec.server",
     "user" : "activity-spec.user"
+  },
+  "initData" : {
+    "vlm" : {"id": null, "versionId": null},
+    "vsp" : {"id": null, "versionId": null}
   }
 }
diff --git a/cucumber-js-test-apis-ci/cucumber-common/package.json b/cucumber-js-test-apis-ci/cucumber-common/package.json
new file mode 100644 (file)
index 0000000..1efc8f1
--- /dev/null
@@ -0,0 +1,37 @@
+{
+  "name": "cucumber-common",
+  "version": "1.0.14",
+  "description": "Cucumber common methods and utilities",
+  "repository": "",
+  "main": "index.js",
+  "directories": {
+    "doc": "docs"
+  },
+  "scripts": {
+    "test": "cucumber-js",
+    "test-and-report": "npm-run-all -c -s test cucumber-html-report",
+    "cucumber-html-report": "node plugins/reporter.js",
+    "cucumber-docs": "jsdoc ./stepDefinitions  -c plugins/jsdoc_config.json --readme plugins/README.md"
+  },
+  "author": "",
+  "license": "Apache-2.0",
+  "dependencies": {
+    "assert": "^1.4.1",
+    "btoa": "^1.2.1",
+    "cucumber": "^5.1.0",
+    "cucumber-html-reporter": "^4.0.4",
+    "docdash": "^1.0.2",
+    "find-up": "^4.1.0",
+    "jsdoc": "^3.5.5",
+    "jsdoc-one-page": "0.0.5",
+    "lodash": "^4.17.11",
+    "md5": "^2.2.1",
+    "needle": "^2.4.0",
+    "node-zip": "^1.1.1",
+    "normalize-newline": "^3.0.0",
+    "npm-run-all": "^4.1.2",
+    "request": "^2.83.0",
+    "yamljs": "^0.3.0"
+  },
+  "devDependencies": {}
+}
@@ -7,8 +7,9 @@ The Modules on the left contains all steps for particalar aress and/or explanati
 <li> Copy the config.json to devConfig.json
 <li> Replace the server and user values with the correct values
 <h3>How to run with Maven</h3>
-<li>"mvn clean install -f dev_pom.xml" will install npm if needed, download all modules and create the documentation under the "docs" folder
-<li>"mvn test-and-report" will run all  tests in the features folder and create an HTML report under the "reports" folder
+<li>"mvn clean install" will install npm if needed, download all modules
+<li> run "mvn install -DskipTests=true -P dev" to create the documentation under the "docs" folder
+<li>"mvn test -P dev" will run all tests in the features folder and create an HTML report under the "reports" folder
 <h3>How to develop tests</h3>
 You can open the project in IntelliJ and Webstorm to run and develop scenarios.<br>
 <li><b>You will need to install the Cucumber.Js plugin</b> In order to install, go to "Settings/Plugins". If cucumber.js in not on the list, go to "Browse repositories.." and install .
@@ -7,7 +7,8 @@
       "outputSourceFiles": false
     }
   },
-  "plugins": ["plugins/steps"],
+
+  "plugins": ["./steps"],
   "opts": {
     "template": "node_modules/jsdoc-one-page",
     "destination": "docs/"
  */
 const { setWorldConstructor } = require('cucumber');
 const _ = require('lodash');
+const findUp = require('find-up');
 
-let config = require('../config.json');
+
+
+let configPath = findUp.sync('config.json');
+configPath = configPath.replace(/\\/g, '/');
+
+let config = require(configPath);
 let localConfig = {};
 try {
-       localConfig = require('../devConfig.json');
+       let devConfigPath = findUp.sync('devConfig.json');
+       devConfigPath = devConfigPath.replace(/\\/g, '/');
+       localConfig = require(devConfigPath);
 } catch (e) {
        try {
-               localConfig = require('../environments/dockerConfig.json');
+               let envdir = findUp.sync('environments', {type: 'directory'});
+               envdir = envdir.replace(/\\/g, '/');
+               localConfig = require(envdir + '/dockerConfig.json');
        } catch (e) {
                console.error("no env configuration was found!");
        }
@@ -35,11 +45,10 @@ var {setDefaultTimeout} = require('cucumber');
 /**
  * @module Context
  * @description Context that is used per feature file and can be accessed as 'this.context' in all steps.<Br>
+ *     This class can be extended in order to add additional configurations.
  *<Br>
  * Contains the following items:<br>
  * <li>this.context.server <ul>REST server and onboarding prefix including version. set either in configuration file or from the command line or SERVER environment variable</ul>
- * <li>this.context.vlm <ul>When a VLM has been created, this has the an id and versionId set to the correct IDs.</ul>
- * <li>this.context.vsp <ul>When a VSP has been created, this has the an id and versionId and componentId set to the correct IDs.</ul>
  * <li>this.context.item <ul>When a VLM or VSP has been created, this has the an id and versionId set to the correct IDs.</ul>
  * <li>this.context <ul>Object with properties that were saved in the steps.</ul>
  * <li>this.context.inputdata <ul><b>Automatically updated with the last responseData from the Rest call</b><br>Object with properties that were prepares in the steps.</ul>
@@ -50,23 +59,32 @@ class CustomWorld {
                this.context = {};
                this.context.headers = {};
                let typeName;
+
+               this.context.defaultServerType = 'main';
                for (typeName in config) {
                        this.context.headers[typeName] = {};
                        if (config[typeName].user) {
                                this.context.headers[typeName]['USER_ID'] = config[typeName].user;
                        }
+                       // adding additional headers
+                       if (config[typeName].additionalHeaders) {
+                               _.assign(this.context.headers[typeName] , config[typeName].additionalHeaders);
+                       }
+                       if (config[typeName].isDefault !== undefined && config[typeName].isDefault) {
+                               this.context.defaultServerType = typeName;
+                       }
                }
-
-               this.context.vlm = {id: null, versionId: null};
-               this.context.vsp = {id: null, versionId: null};
                this.context.item = {id: null, versionId: null, componentId: null};
+               // adding the default items that should also be initialized
+               if (config.initData) {
+                       _.assign(this.context, config.initData);
+               }
 
                this.context.shouldFail = false;
                this.context.errorCode = null;
                this.context.inputData = null;
                this.context.responseData = null;
 
-               this.context.defaultServerType = 'onboarding';
 
                this.config = config;
 
@@ -76,17 +94,14 @@ class CustomWorld {
                        var _config = config;
                        return function(type) {
                                let typeData = _config[type];
-                               let _url = _config.protocol + '://' +
+                               let _url = typeData.protocol + '://' +
                                        typeData.server + ':' +
                                        typeData.port + '/' +
                                        typeData.prefix;
                                return _url;
                        }
                })();
-
                setDefaultTimeout(60 * 1000);
        }
 }
-
-
 setWorldConstructor(CustomWorld);
diff --git a/cucumber-js-test-apis-ci/cucumber-common/utils/UpdateTestConfig.js b/cucumber-js-test-apis-ci/cucumber-common/utils/UpdateTestConfig.js
new file mode 100644 (file)
index 0000000..a2c1dae
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict'
+
+const fs = require('fs');
+
+var pathToRoot = process.env.TESTS_BASE;
+if (!pathToRoot.endsWith("/")) {
+       pathToRoot += "/";
+}
+var envConfig = require(pathToRoot + 'config.json');
+var protocol = (process.env.PROTOCOL !== undefined) ? process.env.PROTOCOL : 'https';
+
+try {
+       envConfig = require(pathToRoot + 'environments/dockerConfig.json');
+} catch (e) {
+}
+
+function run() {
+       var inputArgs = process.argv.slice(2);
+       let changeConfig = false;
+       if (process.env.K8S_CONF_PATH !== undefined) {
+               console.log('updating with kubernetes services');
+               let k8sConfig = require(pathToRoot + process.env.K8S_CONF_PATH);
+               mapK8sPod2Docker(k8sConfig, inputArgs[0], inputArgs[1]);
+               changeConfig = true;
+       } else {
+               console.log('not updating at all');
+       }
+       if (changeConfig) {
+               let data = JSON.stringify(envConfig, null, 2);
+               console.log('writing config file: ' + pathToRoot+'environments/dockerConfig.json');
+               console.log(data);
+               fs.writeFileSync(pathToRoot+'environments/dockerConfig.json', data);
+       }
+}
+
+function mapK8sPod2Docker(k8sConfig, id, k8sid) {
+       let item = k8sConfig.items.find(item => {
+               if (item.spec !== undefined && item.spec.ports !== undefined) {
+                       let spec = item.spec.ports.find(port => {
+                               if (port.name === k8sid) {
+                                       return true;
+                               }
+                       });
+                       return (spec !== undefined);
+               } else {
+                       return false;
+               }
+       });
+
+       item.spec.ports.forEach(port => {
+               if (port.name === k8sid) {
+                       envConfig[id].port = port.nodePort;
+                       let rancherData = JSON.parse(item.metadata.annotations["field.cattle.io/publicEndpoints"]);
+                       let address = rancherData.find(address => {
+                               return address.port === port.nodePort;
+                       });
+                       envConfig[id].port = address.port;
+                       envConfig[id].server = address.addresses[0];
+                       envConfig[id].protocol = protocol;
+                       envConfig[id].user = process.env.SDC_USER_ID;
+               }
+       });
+
+}
+
+run();
diff --git a/cucumber-js-test-apis-ci/cucumber-common/utils/Utils.js b/cucumber-js-test-apis-ci/cucumber-common/utils/Utils.js
new file mode 100644 (file)
index 0000000..22ee775
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+const needle = require('needle');
+const fs = require('fs');
+require('node-zip');
+var btoa = require('btoa');
+const md5 = require('md5');
+const _ = require('lodash');
+
+function getOptionsForRequest(context, method, path, type) {
+       if (type == undefined || type == null) {
+               type = context.defaultServerType
+       }
+       let server = context.getUrlForType(type);
+       let options = {
+               method: method,
+               url: server + path,
+               headers: _.clone(context.headers[type])
+       };
+//     options.headers["Content-Type"] = "application/json";
+//     options.headers["accept"] = "application/json";
+       return options;
+}
+
+function _requestBinaryFormData(context, method, path, fileName, formInputName, type) {
+       let options = getOptionsForRequest(context, method, path, type);
+       let formData = {};
+       if (method === 'POST' || method === 'PUT') {
+               //formData[formInputName] = fs.createReadStream(fileName);
+               //options.formData = formData;
+               let fileData =  {
+                       file: fileName
+               };
+               fileData['content_type'] = 'multipart/form-data';
+               options.formData = {};
+               options.formData[formInputName] = fileData;
+       }
+       return _request(context, method, path, options);
+}
+function _requestBinaryBody(context, method, path, fileName, type) {
+       let options = getOptionsForRequest(context, method, path, type);
+       if (method === 'POST' || method === 'PUT') {
+               options.body =  fs.createReadStream(fileName);
+               options.headers['Content-Type'] = 'application/octet-stream';
+
+       }
+       return _request(context, method, path, options);
+}
+
+
+function _requestPayload(context, method, path, filePath, type) {
+       let options = getOptionsForRequest(context, method, path, type);
+       options.json = _createPayload(filePath);
+       options.headers['Content-MD5'] = addCheckSum(options.json);
+       return _request(context, method, path, options);
+}
+
+function _requestRest(context, method, path, data, type) {
+       let options = getOptionsForRequest(context, method, path, type);
+       if (method === 'POST' || method === 'PUT') {
+               options.json = data;
+       }
+       return _request(context, method, path, options);
+}
+
+function _request(context, method, path, options) {
+       console.log('--> Calling REST ' + options.method +' url: ' + options.url);
+       let inputData = options.json;
+       let needleOptions = {headers: options.headers, rejectUnauthorized: false};
+       if (inputData == undefined) {
+               if (options.formData != undefined) {
+                       inputData = options.formData;
+                       needleOptions.multipart = true;
+               }
+               if (inputData && inputData.body != undefined) {
+                       inputData = options.body;
+               }
+       } else {
+               needleOptions.json = true;
+       }
+       return needle(method, options.url, inputData, needleOptions)
+               .then(function(result) {
+                       context.inputData = null;
+                       let isExpected = (context.shouldFail) ? (result.statusCode != 200 && result.statusCode != 201) : (result.statusCode == 200 || result.statusCode == 201);
+                       data = result.body;
+                       if (!isExpected) {
+                               console.log('Did not get expected response code');
+                               throw  'Status Code was ' + result.statusCode ;
+                       }
+                       if (context.shouldFail && context.errorCode) {
+                               if (typeof data === 'string' && data) {
+                                       data = JSON.parse(data);
+                               }
+                               let errorCode = data.errorCode;
+                               let contextErrorCode = context.errorCode;
+                               context.errorCode = null;
+                               if (errorCode !== contextErrorCode) {
+                                       throw 'Error Code was ' + errorCode + ' instead of ' + contextErrorCode;
+                               }
+                       }
+                       if (context.shouldFail && context.errorMessage) {
+                               if (typeof data === 'string' && data) {
+                                       data = JSON.parse(data);
+                               }
+                               let errorMessage = data.message;
+                               let contextErrorMessage = context.errorMessage;
+                               context.errorMessage = null;
+                               if (errorMessage !== contextErrorMessage) {
+                                       throw 'Error Message was ' + errorMessage + ' instead of ' + contextErrorMessage;
+                               }
+                       }
+                       if (context.shouldFail) {
+                               context.shouldFail = false;
+                               return({statusCode: result.statusCode, data: {}});
+                       }
+
+                       if (typeof data === 'string' && data) {
+                               if (data.startsWith('[') || data.startsWith('{')) {
+                                       data = JSON.parse(data);
+                               }
+                       }
+                       context.responseData = data;
+                       context.inputData = data;
+                       return({statusCode: result.statusCode, data: data});
+
+               })
+               .catch(function(err) {
+                       console.error('Request URL: ' + options.url);
+                       console.error('Request Method: ' + options.method);
+                       console.log(err);
+                       throw err;
+               })
+}
+
+function download(context, path, filePath,  type) {
+       if (type == undefined || type == null) {
+               type = context.defaultServerType
+       }
+       let server = context.getUrlForType(type);
+       let options = {
+               method: 'GET',
+               url: server + path,
+               headers: context.headers[type]
+       };
+
+       console.log('--> Calling REST download url: ' + options.url);
+       return needle('GET', options.url, {}, {
+               headers: options.headers,
+               rejectUnauthorized: false,
+               output: filePath
+       })
+               .then(function (result) {
+                       let zipFile = fs.readFileSync(filePath, 'binary');
+                       let zip = new JSZip(zipFile, {base64: false, checkCRC32: true});
+                       if (zip.files['MANIFEST.json']) {
+                               let manifestData = zip.files['MANIFEST.json']._data;
+                               manifestData = manifestData.replace(/\\n/g, '');
+                               context.responseData = JSON.parse(manifestData);
+                       }
+                       return zip;
+               })
+               .catch(function (err) {
+                       console.error('Request URL: ' + options.url);
+                       console.error('Request Method: ' + options.method);
+                       throw err;
+               })
+}
+
+function _random() {
+       let d = new Date();
+       return d.getTime().toString().split('').reverse().join('');
+}
+
+function _getJSONFromFile(file) {
+       return JSON.parse(fs.readFileSync(file, 'utf8'));
+}
+
+function _createPayload(fileName) {
+       var body = fs.readFileSync(fileName);
+       let payload = {
+               payloadData: body.toString('base64'),
+               payloadName: fileName.substring(fileName.lastIndexOf("/") + 1 )
+       };
+       return payload;
+}
+
+function addCheckSum(payloadData) {
+       let _md5 = md5(JSON.stringify(payloadData));
+       return btoa(_md5.toLowerCase());
+}
+
+function _getFile(file, format) {
+       if(format === '' ){
+               return fs.readFileSync(file)
+       }
+       return fs.readFileSync(file, format);
+}
+
+
+module.exports = {
+       getFile: _getFile,
+       request: _requestRest,
+       requestPayload: _requestPayload,
+       requestBinaryFormData: _requestBinaryFormData,
+       requestBinaryBody: _requestBinaryBody,
+       random : _random,
+       getJSONFromFile: _getJSONFromFile,
+       download: download,
+       payload: _createPayload
+};
index 0eb79d3..0f3b6bc 100644 (file)
@@ -1,3 +1,3 @@
 module.exports = {
-       "default" : "--require stepDefinitions -f summary -r ./features -f summary:report/summary.txt -f json:report/report.json --format-options '{\"colorsEnabled\": false}'"
+       "default" : "--require stepDefinitions --require cucumber-common/stepDefinitions -f summary -r ./features -f summary:report/summary.txt -f json:report/report.json --format-options '{\"colorsEnabled\": false}'"
 };
\ No newline at end of file
diff --git a/cucumber-js-test-apis-ci/dev_pom.xml b/cucumber-js-test-apis-ci/dev_pom.xml
deleted file mode 100644 (file)
index 7ad10f8..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>onboarding-cucumber</artifactId>
-    <name>cucumber-report</name>
-
-    <parent>
-        <groupId>org.openecomp.sdc</groupId>
-        <artifactId>sdc-onboarding</artifactId>
-        <version>1.3.1-SNAPSHOT</version>
-        <relativePath>../onboarding/pom.xml</relativePath>
-    </parent>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-clean-plugin</artifactId>
-                <version>2.6.1</version>
-                <executions>
-                    <execution>
-                        <id>clean.dist.folder</id>
-                        <phase>clean</phase>
-                        <goals>
-                            <goal>clean</goal>
-                        </goals>
-                        <configuration>
-                            <filesets>
-                                <fileset>
-                                    <directory>${basedir}/report</directory>
-                                    <includes>
-                                        <include>**/*</include>
-                                    </includes>
-                                </fileset>
-                                <fileset>
-                                    <directory>${basedir}/resources/downloads</directory>
-                                    <includes>
-                                        <include>**/*</include>
-                                    </includes>
-                                </fileset>
-                              <fileset>
-                                <directory>${basedir}/docs</directory>
-                                <includes>
-                                  <include>**/*</include>
-                                </includes>
-                              </fileset>
-                            </filesets>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-
-            <plugin>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>create-reporting-folders</id>
-                        <phase>generate-sources</phase>
-                        <configuration>
-                            <tasks>
-                                <echo message="Generate reports and downloads folders"/>
-                                <mkdir dir="${basedir}/report"/>
-                                <mkdir dir="${basedir}/resources/downloads"/>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!-- ============================================= -->
-            <!-- Build the UI module node code -->
-            <!-- ============================================= -->
-            <plugin>
-                <groupId>com.github.eirslett</groupId>
-                <artifactId>frontend-maven-plugin</artifactId>
-                <version>1.6</version>
-
-                <configuration>
-                    <installDirectory>${project.parent.parent.basedir}</installDirectory>
-                </configuration>
-
-                <executions>
-
-                    <execution>
-                        <id>install node and yarn</id>
-                        <goals>
-                            <goal>install-node-and-yarn</goal>
-                        </goals>
-                        <configuration>
-                            <nodeVersion>v9.4.0</nodeVersion>
-                            <yarnVersion>v1.3.2</yarnVersion>
-                        </configuration>
-                    </execution>
-
-                    <execution>
-                        <id>yarn run install</id>
-                        <goals>
-                            <goal>yarn</goal>
-                        </goals>
-                        <configuration>
-                            <arguments>install</arguments>
-                        </configuration>
-                    </execution>
-                  <execution>
-                    <id>yarn run cucumber docs</id>
-                    <goals>
-                      <goal>yarn</goal>
-                    </goals>
-                    <configuration>
-                        <yarnInheritsProxyConfigFromMaven>false</yarnInheritsProxyConfigFromMaven>
-                      <arguments>run cucumber-docs</arguments>
-                    </configuration>
-                  </execution>
-
-                  <execution>
-                    <id>yarn run cucumber test</id>
-                    <goals>
-                      <goal>yarn</goal>
-                    </goals>
-                    <configuration>
-                        <yarnInheritsProxyConfigFromMaven>false</yarnInheritsProxyConfigFromMaven>
-                      <arguments>run test-and-report</arguments>
-                    </configuration>
-                    <phase>test</phase>
-                  </execution>
-
-
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
index fb44092..eab4e89 100644 (file)
@@ -1,11 +1,12 @@
 FROM node:8.16.0
 
-
 ENV TESTS_BASE /var/lib/tests
 USER root
 RUN mkdir $TESTS_BASE
-COPY cucumber $TESTS_BASE 
-COPY startup.sh $TESTS_BASE 
-RUN chmod 777 $TESTS_BASE/startup.sh
+RUN mkdir $TESTS_BASE/environments
+COPY cucumber $TESTS_BASE
+COPY startup.sh .
+RUN chmod 777 ./startup.sh
+RUN chmod -R 777 $TESTS_BASE/node_modules/
 
-ENTRYPOINT [ "/var/lib/tests/startup.sh" ]
+ENTRYPOINT [ "./startup.sh" ]
index 3170411..b3ad4f1 100644 (file)
@@ -1,6 +1,9 @@
 #!/bin/bash
 
 cd /var/lib/tests
+
+rm devConfig.json
+
 mkdir resources/downloads
-yarn install
-yarn run test-and-report
+
+npm run test-and-report
index 0aecbdc..646b71f 100644 (file)
@@ -9,19 +9,23 @@
   "scripts": {
     "test": "cucumber-js",
     "test-and-report": "npm-run-all -c -s test cucumber-html-report",
-    "cucumber-html-report": "node plugins/reporter.js",
-    "cucumber-docs": "jsdoc ./stepDefinitions  -c plugins/jsdoc_config.json --readme plugins/README.md"
+    "cucumber-html-report": "node cucumber-common/plugins/reporter.js",
+    "cucumber-docs": "jsdoc ./stepDefinitions -c cucumber-common/plugins/jsdoc_config.json --readme cucumber-common/plugins/README.md"
   },
   "author": "",
   "license": "Apache-2.0",
   "dependencies": {
     "assert": "^1.4.1",
+    "btoa": "^1.2.1",
     "cucumber": "^3.2.1",
     "cucumber-html-reporter": "^3.0.4",
     "docdash": "^0.4.0",
+    "find-up": "^4.1.0",
     "jsdoc": "^3.5.5",
     "jsdoc-one-page": "0.0.5",
     "lodash": "^4.17.4",
+    "md5": "^2.2.1",
+    "needle": "^2.4.0",
     "node-zip": "^1.1.1",
     "normalize-newline": "^3.0.0",
     "npm-run-all": "^4.1.2",
index e24a7d2..41c3352 100644 (file)
             </goals>
             <configuration>
               <filesets>
+                <fileset>
+                  <directory>${basedir}/node_modules</directory>
+                  <includes>
+                    <include>**/*</include>
+                  </includes>
+                </fileset>
                 <fileset>
                   <directory>${basedir}/report</directory>
                   <includes>
         <configuration>
         </configuration>
       </plugin>
+      <plugin>
+        <groupId>com.github.eirslett</groupId>
+        <artifactId>frontend-maven-plugin</artifactId>
+        <version>1.6</version>
+
+        <configuration>
+          <installDirectory>${project.parent.parent.basedir}</installDirectory>
+        </configuration>
+
+        <executions>
+          <execution>
+            <id>install node and npm</id>
+            <goals>
+              <goal>install-node-and-npm</goal>
+            </goals>
+            <phase>generate-resources</phase>
+            <configuration>
+              <nodeVersion>v10.15.3</nodeVersion>
+              <npmVersion>6.4.1</npmVersion>
+            </configuration>
+          </execution>
+          <execution>
+            <id>npm run install</id>
+            <goals>
+              <goal>npm</goal>
+            </goals>
+            <configuration>
+              <arguments>install</arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
     <resources>
       <resource>
         <targetPath>${project.build.directory}/docker_assembly</targetPath>
         <filtering>false</filtering>
       </resource>
-      <resource>
-        <directory>${basedir}</directory>
-        <includes>
-          <include>features/**/*</include>
-          <include>stepDefinitions/**/*</include>
-          <include>plugins/**/*</include>
-          <include>resources/**/*</include>
-          <include>*.js*</include>
-        </includes>
-        <targetPath>${project.build.directory}/docker_assembly/cucumber</targetPath>
-        <filtering>false</filtering>
-      </resource>
     </resources>
   </build>
   <profiles>
+    <profile>
+      <id>dev</id>
+      <activation>
+        <activeByDefault>false</activeByDefault>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-antrun-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>create-reporting-folders</id>
+                <phase>initialize</phase>
+                <configuration>
+                  <tasks>
+                    <echo message="Generate reports and downloads folders"/>
+                    <mkdir dir="${basedir}/report"/>
+                    <mkdir dir="${basedir}/resources/downloads"/>
+                  </tasks>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>com.github.eirslett</groupId>
+            <artifactId>frontend-maven-plugin</artifactId>
+            <version>1.6</version>
+
+            <configuration>
+              <workingDirectory>${project.basedir}</workingDirectory>
+              <installDirectory>${project.parent.parent.basedir}</installDirectory>
+            </configuration>
+
+            <executions>
+
+              <execution>
+                <id>npm run install</id>
+                <goals>
+                  <goal>npm</goal>
+                </goals>
+                <configuration>
+                  <arguments>install</arguments>
+                </configuration>
+              </execution>
+
+              <execution>
+                <id>npm run cucumber test</id>
+                <goals>
+                  <goal>npm</goal>
+                </goals>
+                <configuration>
+                  <npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
+                  <arguments>run test-and-report</arguments>
+                </configuration>
+                <phase>test</phase>
+              </execution>
+
+              <execution>
+                <id>npm run documentation</id>
+                <goals>
+                  <goal>npm</goal>
+                </goals>
+                <configuration>
+                  <npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
+                  <arguments>run cucumber-docs</arguments>
+                </configuration>
+                <phase>install</phase>
+              </execution>
+
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
     <profile>
       <id>docker</id>
       <activation>
       </activation>
       <build>
         <plugins>
+          <plugin>
+            <artifactId>maven-resources-plugin</artifactId>
+            <version>3.0.2</version>
+            <executions>
+              <execution>
+                <id>copy-resources</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>copy-resources</goal>
+                </goals>
+                <configuration>
+                  <outputDirectory>${project.build.directory}/docker_assembly/cucumber</outputDirectory>
+                  <resources>
+                    <resource>
+                      <directory>${basedir}</directory>
+                      <includes>
+                        <include>features/**/*</include>
+                        <include>stepDefinitions/**/*</include>
+                        <include>plugins/**/*</include>
+                        <include>resources/**/*</include>
+                        <include>node_modules/**/*</include>
+                        <include>cucumber-common/**/*</include>
+                        <include>*.js*</include>
+                      </includes>
+                      <filtering>false</filtering>
+                    </resource>
+                  </resources>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
           <plugin>
             <groupId>io.fabric8</groupId>
             <artifactId>docker-maven-plugin</artifactId>
index 7fe8ddf..d12421b 100644 (file)
@@ -16,7 +16,7 @@
 
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 const _ = require('lodash');
 
 When('I want to create an ActivitySpec', function () {
index c4de758..a0713c5 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When, Given} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 /**
  * @module Collaboration
index 2076366..e59d441 100644 (file)
@@ -20,7 +20,7 @@ const normalizeNewline = require('normalize-newline');
 require('node-zip');
 YAML = require('yamljs');
 const fs = require('fs');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 function getPath(path, context) {
        let compiled = _.template(path);
index 461fee7..f278a2e 100644 (file)
@@ -16,9 +16,9 @@
 
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 When('I want to get interface lifecycle types', function () {
     let path = '/catalog/interfaceLifecycleTypes';
-    return util.request(this.context, 'GET', path, null, false, 'catalog');
+    return util.request(this.context, 'GET', path, null, 'catalog');
 });
\ No newline at end of file
index 57a374b..782aeae 100644 (file)
@@ -17,7 +17,7 @@ const {Then, When, Given} = require('cucumber');
 const assert = require('assert');
 const _ = require('lodash');
 const fs = require('fs');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 /**
  * @module InputData
index 3e23219..ba716d0 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 
 When('I want to create a VF', function()  {
@@ -27,7 +27,7 @@ When('I want to create a VF', function()  {
 
     var type = "resources";
     let path = '/catalog/' + type;
-    return util.request(this.context, 'POST', path,  inputData, false, 'catalog').then(result => {
+    return util.request(this.context, 'POST', path,  inputData, 'catalog').then(result => {
         this.context.component = {uniqueId : result.data.uniqueId, type : type, id : result.data.inputs[0].uniqueId};
 });
 });
@@ -41,7 +41,7 @@ When('I want to create a Service', function()  {
 
     var type = "services";
     let path = '/catalog/' + type;
-    return util.request(this.context, 'POST', path,  inputData, false, 'catalog').then(result => {
+    return util.request(this.context, 'POST', path,  inputData,  'catalog').then(result => {
         this.context.component = {uniqueId : result.data.uniqueId, type : type, id : result.data.inputs[0].uniqueId};
 });
 });
@@ -68,7 +68,7 @@ When('I want to create an Operation', function()  {
     inputData.interfaces.interface1.operations.delete.outputs.listToscaDataDefinition[0].name = util.random();
     inputData.interfaces.interface1.operations.delete.description = operationName + " description";
 
-    return util.request(this.context, 'POST', path, inputData, false, 'catalog').then(result => {
+    return util.request(this.context, 'POST', path, inputData, 'catalog').then(result => {
             {intOperations = result.data.interfaces[0].operations};
         this.context.interface = {  interfaceUniqueId : result.data.interfaces[0].uniqueId,
                                     interfaceType : result.data.interfaces[0].type,
@@ -86,7 +86,7 @@ When('I want to update an Operation', function () {
     inputData.interfaces.interface1.operations.delete.inputs.listToscaDataDefinition[0].inputId = this.context.component.id;
     inputData.interfaces.interface1.operations.delete.outputs.listToscaDataDefinition[0].name = util.random();
 
-    return util.request(this.context, 'PUT', path, inputData, false, 'catalog').then((result)=> {
+    return util.request(this.context, 'PUT', path, inputData, 'catalog').then((result)=> {
     {intOperations = result.data.interfaces[0].operations};
             this.context.interface =  { interfaceUniqueId : result.data.interfaces[0].uniqueId,
                                         interfaceType : result.data.interfaces[0].type,
@@ -98,7 +98,7 @@ When('I want to update an Operation', function () {
 When('I want to get an Operation by Id', function () {
     let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/interfaces/' +
         this.context.interface.interfaceUniqueId + '/operations/' +this.context.interface.operationUniqueId ;
-    return util.request(this.context, 'GET', path, null, false, 'catalog').then((result)=> {
+    return util.request(this.context, 'GET', path, null, 'catalog').then((result)=> {
 
     {intOperations = result.data.interfaces[0].operations};
     this.context.interface =  { interfaceUniqueId : result.data.interfaces[0].uniqueId,
@@ -111,7 +111,7 @@ When('I want to get an Operation by Id', function () {
 
 When('I want to list Operations', function () {
     let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/filteredDataByParams?include=interfaces';
-    return util.request(this.context, 'GET', path, null, false, 'catalog').then((result)=> {
+    return util.request(this.context, 'GET', path, null, 'catalog').then((result)=> {
     });
 });
 
@@ -119,14 +119,14 @@ When('I want to list Operations', function () {
 When('I want to delete an Operation', function()  {
     let path = '/catalog/'+ this.context.component.type + '/'+ this.context.component.uniqueId +'/interfaces/' +
         this.context.interface.interfaceUniqueId + '/operations/' +this.context.interface.operationUniqueId ;
-    return util.request(this.context, 'DELETE', path, null, false, 'catalog');
+    return util.request(this.context, 'DELETE', path, null, 'catalog');
 });
 
 
 When('I want to checkin this component', function () {
     let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/lifecycleState/CHECKIN' ;
     let inputData = {userRemarks: 'checkin'};
-    return util.request(this.context, 'POST', path, inputData, false, 'catalog').then((result)=> {
+    return util.request(this.context, 'POST', path, inputData, 'catalog').then((result)=> {
     this.context.component = {uniqueId : result.data.uniqueId, type : this.context.component.type};
 });
 });
@@ -135,7 +135,7 @@ When('I want to checkin this component', function () {
 Then('I want to submit this component', function () {
     let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/lifecycleState/certificationRequest' ;
     let inputData = {userRemarks: 'submit'};
-    return util.request(this.context, 'POST', path, inputData, false, 'catalog').then((result)=> {
+    return util.request(this.context, 'POST', path, inputData, 'catalog').then((result)=> {
     this.context.component = {uniqueId : result.data.uniqueId};
 });
 });
@@ -143,7 +143,7 @@ Then('I want to submit this component', function () {
 Then('I want to certify this component', function () {
     let path = '/catalog/'+ this.context.component.type +'/' + this.context.component.uniqueId + '/lifecycleState/certify' ;
     let inputData = {userRemarks: 'certify'};
-    return util.request(this.context, 'POST', path, inputData, false, 'catalog').then((result)=> {
+    return util.request(this.context, 'POST', path, inputData, 'catalog').then((result)=> {
     this.context.component = {uniqueId : result.data.uniqueId};
 });
 });
\ No newline at end of file
index 3ff7f20..6f2c087 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 /**
  * @module Item
  * @description uses item id and version id from context
index 731d5b8..cdb5cbe 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 const _ = require('lodash');
 const fs = require('fs');
 require('node-zip');
@@ -28,7 +28,7 @@ require('node-zip');
  **/
 Then('I want to upload a NetworkPackage for this VSP from path {string}', function (string) {
        let path =  '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/orchestration-template-candidate';
-       return util.request(this.context, 'POST', path, string, true);
+       return util.requestBinaryFormData(this.context, 'POST', path, string, 'upload');
 });
 
 /**
@@ -37,9 +37,9 @@ Then('I want to upload a NetworkPackage for this VSP from path {string}', functi
  * @exampleFile Example_HEAT.feature
  * @step I want to download the NetworkPackage for this VSP to path {string}
  **/
-When('I want to download the NetworkPackage for this VSP to path {string}', function (string, callback) {
+When('I want to download the NetworkPackage for this VSP to path {string}', function (string) {
        let path =  '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/orchestration-template-candidate';
-       return [util.download(this.context, path, string, callback)];
+       return util.download(this.context, path, string);
 });
 
 /**
index 2e169fa..8da747e 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 const _ = require('lodash');
 
 function getPath(path, context) {
index c384412..4671f36 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {When} = require('cucumber');
 const _ = require('lodash');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 _.templateSettings.interpolate = /{([\s\S]+?)}/g;
 
 function getPath(path, context) {
index 16bcc2a..8b416fc 100644 (file)
@@ -16,7 +16,7 @@
 
 const {Then, When, Given} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 
 /**
diff --git a/cucumber-js-test-apis-ci/stepDefinitions/Utils.js b/cucumber-js-test-apis-ci/stepDefinitions/Utils.js
deleted file mode 100644 (file)
index 66e959f..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright © 2016-2017 European Support Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-const request = require('request');
-const fs = require('fs');
-require('node-zip');
-
-function _request(context, method, path, data, isBinary=false, type='onboarding') {
-       let server = context.getUrlForType(type);
-
-       let options = {
-               method: method,
-               url: server + path,
-               headers: context.headers[type]
-       };
-       console.log('--> Calling REST ' + options.method +' url: ' + options.url);
-
-       return new Promise(function (resolve, reject) {
-               if (method === 'POST' || method === 'PUT') {
-                       if (isBinary) {
-                               var formData = {
-                                       upload: fs.createReadStream(data),
-                               };
-                               options.formData = formData;
-                       } else {
-                               options.json = data;
-                       }
-               }
-               request(options, function (err, result, data) {
-                       context.inputData = null;
-                       if (err) {
-                               console.error('Request URL: ' + result.request.uri.href);
-                               console.error('Request Method: ' + result.request.method);
-                               console.error('Response Status Code: ' +result.statusCode);
-                               console.log(err);
-                               reject(err);
-                       } else {
-                               let isExpected = (context.shouldFail) ? (result.statusCode != 200 && result.statusCode != 201) : (result.statusCode == 200 || result.statusCode == 201);
-                               if (!isExpected) {
-                                       console.error('Request URL: ' + result.request.uri.href);
-                                       console.error('Request Method: ' + result.request.method);
-                                       console.error('Response Status Code: ' +result.statusCode);
-                                       console.error(result.body);
-                                       reject('Status Code was ' + result.statusCode);
-                               }
-                               if (context.shouldFail && context.errorCode) {
-                    if (typeof data === 'string' && data) {
-                        data = JSON.parse(data);
-                    }
-                                       let errorCode = data.errorCode;
-                                       let contextErrorCode = context.errorCode;
-                                       context.errorCode = null;
-                                       if (errorCode !== contextErrorCode) {
-                                               reject('Error Code was ' + errorCode + ' instead of ' + contextErrorCode);
-                                       }
-                               }
-                               if (context.shouldFail && context.errorMessage) {
-                                   if (typeof data === 'string' && data) {
-                        data = JSON.parse(data);
-                    }
-                    let errorMessage = data.message;
-                    let contextErrorMessage = context.errorMessage;
-                    context.errorMessage = null;
-                    if (errorMessage !== contextErrorMessage) {
-                       reject('Error Message was ' + errorMessage + ' instead of ' + contextErrorMessage);
-                    }
-                }
-                               if (context.shouldFail) {
-                                       context.shouldFail = false;
-                                       resolve({statusCode: result.statusCode, data: {}});
-                                       return;
-                               }
-                               if (method === 'GET' && isBinary) {
-                                       // downloading (NetworkPackage) files
-                                       return ({
-                                               blob: blobUtil.createBlob([data], {type: 'text/plain'}),
-                                               headers: result.headers
-                                       });
-                               } else {
-                                       if (typeof data === 'string' && data) {
-                                               data = JSON.parse(data);
-                                       }
-                                       context.responseData = data;
-                                       context.inputData = data;
-                                       resolve({statusCode: result.statusCode, data: data});
-                               }
-                       }
-               });
-       });
-}
-
-function download(context, path, filePath,  callback, type='onboarding') {
-       let server = context.getUrlForType(type);
-       let options = {
-                       method: 'GET',
-                       url: server + path,
-                       headers: context.headers[type]
-               };
-       console.log('--> Calling REST download url: ' + options.url);
-
-       var file = fs.createWriteStream(filePath);
-               var r = request(options).pipe(file);
-               r.on('error', function (err) {
-                       console.log(err);
-                       callback(err);
-               });
-               r.on('finish', function () {
-                       file.close();
-                       let zipFile = fs.readFileSync(filePath, 'binary');
-                       let zip = new JSZip(zipFile, {base64: false, checkCRC32: true});
-                       if (zip.files['MANIFEST.json']) {
-                               let manifestData = zip.files['MANIFEST.json']._data;
-                               manifestData = manifestData.replace(/\\n/g, '');
-                               context.responseData = JSON.parse(manifestData);
-                       }
-                       callback();
-               });
-
-};
-
-function _random() {
-       let d = new Date();
-       return d.getTime().toString().split('').reverse().join('');
-}
-
-function _getJSONFromFile(file) {
-       return JSON.parse(fs.readFileSync(file, 'utf8'));
-}
-
-
-module.exports = {
-       request: _request,
-       random : _random,
-       getJSONFromFile: _getJSONFromFile,
-       download: download
-};
index a24a90b..b753105 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 
 /**
@@ -37,7 +37,7 @@ Then('I want to create a VF for this Item', function () {
                this.context.inputData.tags[0] = result.data.name;
                this.context.inputData.vendorName = result.data.vendorName;
                this.context.inputData.csarUUID = this.context.item.id;
-               return util.request(this.context, 'POST', '/catalog/resources', this.context.inputData, false, 'catalog');
+               return util.request(this.context, 'POST', '/catalog/resources', this.context.inputData, 'catalog');
        });
 });
 
index 35e78b2..9990bf2 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When, Given} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 
 /**
  * @module VLM
index b9b928a..2feb29d 100644 (file)
@@ -15,7 +15,7 @@
  */
 const {Then, When} = require('cucumber');
 const assert = require('assert');
-const util = require('./Utils.js');
+const util = require('../cucumber-common/utils/Utils.js');
 const _ = require('lodash');
 
 
@@ -107,9 +107,9 @@ Then('I want to add a component', function () {
  * @exampleFile Example_VSP.feature
  * @step I want to get the package for this Item to path {string}
  **/
-When('I want to get the package for this Item to path {string}', function (string, callback) {
+When('I want to get the package for this Item to path {string}', function (string) {
        let path =  '/vendor-software-products/packages/' + this.context.item.id;
-       return [util.download(this.context, path, string, callback)];
+       return util.download(this.context, path, string);
 });