Skip to content

Commit d890a4e

Browse files
authored
Merge pull request #3 from browserstack/declutter-messages
Declutter CLI for release (#9)
2 parents 7d6024b + cc52645 commit d890a4e

File tree

11 files changed

+163
-115
lines changed

11 files changed

+163
-115
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ node_modules
33
browserstack.json
44
specs
55
tests.zip
6+
package-lock.json

bin/commands/delete.js

Lines changed: 0 additions & 38 deletions
This file was deleted.

bin/commands/info.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
var config = require('../helpers/config');
33
var request = require('request')
44
var logger = require("../helpers/logger");
5+
var Constant = require("../helpers/constants")
56

67
module.exports = function info(args) {
78
return buildInfo(args)
89
}
910

1011
function buildInfo(args) {
1112
let bsConfigPath = process.cwd() + args.cf;
12-
logger.log(`Reading browserstack.json from ${args.cf}`);
13+
logger.log(`Reading config from ${args.cf}`);
1314
var bsConfig = require(bsConfigPath);
1415

1516
let buildId = args._[1]
@@ -25,11 +26,27 @@ function buildInfo(args) {
2526

2627
request(options, function (err, resp, body) {
2728
if (err) {
28-
logger.log("Failed to get build info");
29+
logger.log(Constant.userMessages.BUILD_INFO_FAILED);
2930
} else {
30-
let build = JSON.parse(body)
31+
let build = null
32+
try {
33+
build = JSON.parse(body)
34+
} catch (error) {
35+
build = null
36+
}
37+
3138
if (resp.statusCode != 200) {
32-
logger.log(`Build info failed with error: \n ${JSON.stringify(build, null, 2)}`);
39+
if (build) {
40+
logger.error(`${Constant.userMessages.BUILD_INFO_FAILED} with error: \n${JSON.stringify(build, null, 2)}`);
41+
} else {
42+
logger.error(Constant.userMessages.BUILD_INFO_FAILED);
43+
}
44+
} else if(resp.statusCode == 299) {
45+
if(build) {
46+
logger.log(build.message);
47+
} else {
48+
logger.log(Constants.userMessages.API_DEPRECATED);
49+
}
3350
} else {
3451
logger.log(`Build info for build id: \n ${JSON.stringify(build, null, 2)}`)
3552
}

bin/commands/init.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict';
22
var fileHelpers = require('../helpers/fileHelpers');
3+
const Constants = require('../helpers/constants');
4+
var logger = require("../helpers/logger");
35

46
module.exports = function init(args) {
57
return createBrowserStackConfig(args)
@@ -19,15 +21,12 @@ function createBrowserStackConfig(args) {
1921
};
2022

2123
function allDone() {
22-
console.log('\n' +
23-
'BrowserStack Config File created, you can now run \n' +
24-
'browserstack-cypress --config-file run\n'
25-
);
24+
logger.log(Constants.userMessages.CONFIG_FILE_CREATED);
2625
}
2726

2827
return fileHelpers.fileExists(config.path, function(exists){
2928
if (exists) {
30-
console.log('file already exists, delete the browserstack.json file manually. skipping...');
29+
logger.error(Constants.userMessages.CONFIG_FILE_EXISTS);
3130
} else {
3231
fileHelpers.write(config, null, allDone);
3332
}

bin/commands/runs.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ var build = require("../helpers/build");
55
var logger = require("../helpers/logger");
66
var config = require('../helpers/config');
77
var capabilityHelper = require("../helpers/capabilityHelper");
8+
var fs = require('fs');
9+
const Constants = require('../helpers/constants');
810

911
module.exports = function run(args) {
1012
return runCypress(args);
1113
}
1214

1315
function runCypress(args) {
1416
let bsConfigPath = process.cwd() + args.cf;
15-
logger.log(`Reading browserstack.json from ${args.cf}`);
17+
logger.log(`Reading config from ${args.cf}`);
1618
var bsConfig = require(bsConfigPath);
1719

1820
// Validate browserstack.json
@@ -27,18 +29,30 @@ function runCypress(args) {
2729
return;
2830
}).catch(function (err) {
2931
// Build creation failed
30-
logger.error("Build creation failed. Please contact Browserstack support")
32+
logger.error(Constants.userMessages.BUILD_FAILED)
33+
}).finally(function() {
34+
// Delete zip file from local storage
35+
fs.unlink(config.fileName, function (err) {
36+
if(err) {
37+
logger.log(Constants.userMessages.ZIP_DELETE_FAILED);
38+
} else {
39+
logger.log(Constants.userMessages.ZIP_DELETED);
40+
}
41+
});
3142
});
3243
}).catch(function (err) {
3344
// Zip Upload failed
34-
logger.error("Zip Upload failed. Please contact Browserstack support")
45+
logger.error(err)
46+
logger.error(Constants.userMessages.ZIP_UPLOAD_FAILED)
3547
});
3648
}).catch(function (err) {
3749
// Zipping failed
38-
logger.error("Failed to zip files. Please contact Browserstack support")
50+
logger.error(err)
51+
logger.error(Constants.userMessages.FAILED_TO_ZIP)
3952
});
4053
}).catch(function (err) {
41-
// Browerstack.json is not valid
42-
logger.error("browerstack.json is not valid. Please contact Browserstack support")
54+
// browerstack.json is not valid
55+
logger.error(err)
56+
logger.error(Constants.validationMessages.NOT_VALID)
4357
});
4458
}

bin/helpers/build.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var request = require('request')
22
var logger = require("./logger")
33
var config = require('./config');
44
var capabilityHelper = require("../helpers/capabilityHelper");
5+
const Constants = require('../helpers/constants');
56

67
const createBuild = (bsConfig, zip) => {
78
return new Promise(function (resolve, reject) {
@@ -20,14 +21,29 @@ const createBuild = (bsConfig, zip) => {
2021

2122
request.post(options, function (err, resp, body) {
2223
if (err) {
23-
logger.log("Failed to create the build");
2424
reject(err)
2525
} else {
26-
build = JSON.parse(body)
26+
let build = null
27+
try {
28+
build = JSON.parse(body)
29+
} catch (error) {
30+
build = null
31+
}
2732
if (resp.statusCode != 201) {
28-
logger.log(`Build creation failed with build error: ${build.message}`);
33+
if (build) {
34+
logger.error(`${Constants.userMessages.BUILD_FAILED} Error: ${build.message}`);
35+
} else {
36+
logger.error(Constants.userMessages.BUILD_FAILED);
37+
}
38+
} else if(resp.statusCode == 299){
39+
if(build) {
40+
logger.log(build.message);
41+
} else {
42+
logger.log(Constants.userMessages.API_DEPRECATED);
43+
}
2944
} else {
30-
logger.log(`Build created with build id: ${build.build_id}`);
45+
logger.log(build.message)
46+
logger.log(`${Constants.userMessages.BUILD_CREATED} with build id: ${build.build_id}`);
3147
}
3248
resolve(build);
3349
}

bin/helpers/capabilityHelper.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
var logger = require("./logger");
2+
const Constants = require('./constants');
23

34
const caps = (bsConfig, zip) => {
45
return new Promise(function (resolve, reject) {
56
let user = bsConfig.auth.username
67
let password = bsConfig.auth.access_key
78

8-
if (!user || !password) reject("Incorrect auth params.");
9+
if (!user || !password) reject(Constants.validationMessages.INCORRECT_AUTH_PARAMS);
910

1011
var obj = new Object();
1112

@@ -18,7 +19,7 @@ const caps = (bsConfig, zip) => {
1819
});
1920
});
2021
obj.devices = osBrowserArray
21-
if (obj.devices.length == 0) reject("Browser list is empty");
22+
if (obj.devices.length == 0) reject(Constants.validationMessages.EMPTY_BROWSER_LIST);
2223
logger.log(`Browser list: ${osBrowserArray.toString()}`);
2324

2425
// Test suite
@@ -27,8 +28,8 @@ const caps = (bsConfig, zip) => {
2728
logger.log(`Test suite: bs://${obj.test_suite}`);
2829

2930
// Local
30-
obj.local = bsConfig.connection_settings.local;
31-
if (!obj.local) obj.local = false;
31+
obj.local = false;
32+
if (bsConfig.connection_settings.local === true) obj.local = true;
3233
logger.log(`Local is set to: ${obj.local}`);
3334

3435
// Project name
@@ -45,7 +46,7 @@ const caps = (bsConfig, zip) => {
4546

4647
//callback url
4748
obj.callbackURL = bsConfig.run_settings.callback_url
48-
if (obj.callbackURL) logger.log(`callback url is : ${obj.callbackUrl}`);
49+
if (obj.callbackURL) logger.log(`callback url is : ${obj.callbackURL}`);
4950

5051
//projectNotifyURL
5152
obj.projectNotifyURL = bsConfig.run_settings.project_notify_URL
@@ -58,17 +59,17 @@ const caps = (bsConfig, zip) => {
5859

5960
const validate = (bsConfig) => {
6061
return new Promise(function(resolve, reject){
61-
if (!bsConfig) reject("Empty browserstack.json");
62+
if (!bsConfig) reject(Constants.validationMessages.EMPTY_BROWSERSTACK_JSON);
6263

63-
if (!bsConfig.auth) reject("Invalid auth in browserstack.json");
64+
if (!bsConfig.auth) reject(Constants.validationMessages.INCORRECT_AUTH_PARAMS);
6465

65-
if (!bsConfig.browsers || bsConfig.browsers.length === 0) reject("No browsers specified");
66+
if (!bsConfig.browsers || bsConfig.browsers.length === 0) reject(Constants.validationMessages.EMPTY_BROWSER_LIST);
6667

67-
if (!bsConfig.run_settings) reject("Empty run_settings");
68+
if (!bsConfig.run_settings) reject(Constants.validationMessages.EMPTY_RUN_SETTINGS);
6869

69-
if(!bsConfig.run_settings.specs) reject("No spec files specified in run_settings");
70+
if(!bsConfig.run_settings.specs || bsConfig.run_settings.specs.length === 0) reject(Constants.validationMessages.EMPTY_SPEC_FILES);
7071

71-
resolve("browserstack.json file is validated");
72+
resolve(Constants.validationMessages.VALIDATED);
7273
});
7374
}
7475

bin/helpers/constants.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const userMessages = {
2+
BUILD_FAILED: "Build creation failed.",
3+
BUILD_CREATED: "Build created",
4+
BUILD_INFO_FAILED: "Failed to get build info.",
5+
ZIP_UPLOADER_NOT_REACHABLE: "Could not reach to zip uploader.",
6+
ZIP_UPLOAD_FAILED: "Zip Upload failed.",
7+
CONFIG_FILE_CREATED: "BrowserStack Config File created, you can now run browserstack-cypress --config-file run",
8+
CONFIG_FILE_EXISTS: "File already exists, delete the browserstack.json file manually. skipping...",
9+
ZIP_DELETE_FAILED: "Could not delete local file.",
10+
ZIP_DELETED: "File deleted successfully.",
11+
API_DEPRECATED: "This version of API is deprecated, please use latest version of API.",
12+
FAILED_TO_ZIP: "Failed to zip files."
13+
};
14+
15+
const validationMessages = {
16+
INCORRECT_AUTH_PARAMS: "Incorrect auth params.",
17+
EMPTY_BROWSER_LIST: "Browser list is empty",
18+
EMPTY_TEST_SUITE: "Test suite is empty",
19+
EMPTY_BROWSERSTACK_JSON: "Empty browserstack.json",
20+
EMPTY_RUN_SETTINGS: "Empty run settings",
21+
EMPTY_SPEC_FILES: "No spec files specified in run_settings",
22+
VALIDATED: "browserstack.json file is validated",
23+
NOT_VALID: "browerstack.json is not valid"
24+
};
25+
const cliMessages = {
26+
VERSION: {
27+
INFO: "shows version information",
28+
HELP: "Specify --help for available options",
29+
DEMAND: "Requires init, run or poll argument"
30+
},
31+
INIT: {
32+
INFO: "create a browserstack.json file in the folder specified with the default configuration options.",
33+
DESC: "Init in a specified folder"
34+
},
35+
BUILD: {
36+
INFO: "Check status of your build.",
37+
DEMAND: "Requires a build id.",
38+
DESC: "Path to BrowserStack config",
39+
CONFIG_DEMAND: "config file is required",
40+
DISPLAY: "Getting information for buildId "
41+
},
42+
RUN: {
43+
INFO: "Run your tests on BrowserStack.",
44+
DESC: "Path to BrowserStack config",
45+
CONFIG_DEMAND: "config file is required"
46+
}
47+
}
48+
49+
module.exports = Object.freeze({
50+
userMessages,
51+
cliMessages,
52+
validationMessages
53+
})

bin/helpers/zipUpload.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var config = require('./config');
22
var request = require('request')
33
var fs = require('fs');
44
var logger = require("./logger")
5+
const Constants = require("./constants")
56

67
const uploadCypressZip = (bsConfig, filePath) => {
78
return new Promise(function (resolve, reject) {
@@ -19,20 +20,24 @@ const uploadCypressZip = (bsConfig, filePath) => {
1920
}
2021

2122
request.post(options, function (err, resp, body) {
22-
let responseData = JSON.parse(body);
23-
if (err || responseData["error"]) {
24-
reject(err || responseData["error"]);
23+
if (err) {
24+
reject(err);
2525
} else {
26-
logger.log(`Zip uploaded with url: ${responseData.zip_url}`)
27-
// Delete zip file from local storage
28-
fs.unlink(filePath, function (err) {
29-
if(err) {
30-
logger.log("Could not delete local file");
26+
try {
27+
responseData = JSON.parse(body);
28+
} catch (e) {
29+
responseData = null
30+
}
31+
if (resp.statusCode != 200) {
32+
if (responseData && responseData["error"]) {
33+
reject(responseData["error"]);
3134
} else {
32-
logger.log('File deleted successfully');
35+
reject(Constants.userMessages.ZIP_UPLOADER_NOT_REACHABLE);
3336
}
34-
resolve(responseData)
35-
});
37+
} else {
38+
logger.log(`Zip uploaded with url: ${responseData.zip_url}`);
39+
resolve(responseData);
40+
}
3641
}
3742
});
3843
});

0 commit comments

Comments
 (0)