Skip to content

Commit 2b0afa0

Browse files
Merge pull request #25 from browserstack/CYP_105_unit_tests
[CYP-105] Unit tests
2 parents dedbd95 + ec25da4 commit 2b0afa0

27 files changed

+2777
-140
lines changed

.nycrc.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
3+
# cover all files (even if a file isn't touched by any test)
4+
all: true
5+
6+
# check coverage percentage and fail test if below threshold
7+
check-coverage: true
8+
9+
# thresholds
10+
branches: 80
11+
lines: 80
12+
functions: 75
13+
statements: 80

bin/commands/info.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,28 @@ const request = require('request');
44
const config = require("../helpers/config"),
55
logger = require("../helpers/logger").winstonLogger,
66
Constants = require("../helpers/constants"),
7-
util = require("../helpers/util");
7+
utils = require("../helpers/utils");
88

99
module.exports = function info(args) {
10-
return buildInfo(args)
11-
}
12-
13-
function buildInfo(args) {
1410
let bsConfigPath = process.cwd() + args.cf;
1511

16-
util.validateBstackJson(bsConfigPath).then(function (bsConfig) {
17-
util.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
12+
return utils.validateBstackJson(bsConfigPath).then(function (bsConfig) {
13+
utils.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
1814

1915
let buildId = args._[1];
2016

2117
let options = {
2218
url: config.buildUrl + buildId,
23-
method: "GET",
2419
auth: {
2520
user: bsConfig.auth.username,
2621
password: bsConfig.auth.access_key,
2722
},
2823
headers: {
29-
"User-Agent": util.getUserAgent(),
24+
"User-Agent": utils.getUserAgent(),
3025
},
3126
};
3227

33-
request(options, function (err, resp, body) {
28+
request.get(options, function (err, resp, body) {
3429
let message = null;
3530
let messageType = null;
3631
let errorCode = null;
@@ -84,11 +79,11 @@ function buildInfo(args) {
8479
logger.info(message);
8580
}
8681
}
87-
util.sendUsageReport(bsConfig, args, message, messageType, errorCode);
82+
utils.sendUsageReport(bsConfig, args, message, messageType, errorCode);
8883
})
8984
}).catch(function (err) {
9085
logger.error(err);
91-
util.setUsageReportingFlag(null, args.disableUsageReporting);
92-
util.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, util.getErrorCodeFromErr(err));
86+
utils.setUsageReportingFlag(null, args.disableUsageReporting);
87+
utils.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, utils.getErrorCodeFromErr(err));
9388
})
9489
}

bin/commands/init.js

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,9 @@
22
const fileHelpers = require("../helpers/fileHelpers"),
33
Constants = require("../helpers/constants"),
44
logger = require("../helpers/logger").winstonLogger,
5-
util = require("../helpers/util");
5+
utils = require("../helpers/utils");
66

77
module.exports = function init(args) {
8-
return createBrowserStackConfig(args)
9-
}
10-
11-
function createBrowserStackConfig(args) {
12-
138
if (args.p) {
149
var path_to_bsconf = args.p + "/browserstack.json";
1510
} else {
@@ -24,16 +19,16 @@ function createBrowserStackConfig(args) {
2419
function allDone() {
2520
let message = Constants.userMessages.CONFIG_FILE_CREATED
2621
logger.info(message);
27-
util.sendUsageReport(null, args, message, Constants.messageTypes.SUCCESS, null);
22+
utils.sendUsageReport(null, args, message, Constants.messageTypes.SUCCESS, null);
2823
}
2924

3025
return fileHelpers.fileExists(config.path, function(exists){
3126
if (exists) {
3227
let message = Constants.userMessages.CONFIG_FILE_EXISTS;
3328
logger.error(message);
34-
util.sendUsageReport(null, args, message, Constants.messageTypes.ERROR, 'bstack_json_already_exists');
29+
utils.sendUsageReport(null, args, message, Constants.messageTypes.ERROR, 'bstack_json_already_exists');
3530
} else {
3631
fileHelpers.write(config, null, allDone);
3732
}
38-
})
33+
});
3934
}

bin/commands/runs.js

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,70 @@
11
'use strict';
2-
const fs = require('fs');
3-
42
const archiver = require("../helpers/archiver"),
53
zipUploader = require("../helpers/zipUpload"),
64
build = require("../helpers/build"),
75
logger = require("../helpers/logger").winstonLogger,
86
config = require("../helpers/config"),
97
capabilityHelper = require("../helpers/capabilityHelper"),
108
Constants = require("../helpers/constants"),
11-
util = require("../helpers/util");
9+
utils = require("../helpers/utils"),
10+
fileHelpers = require("../helpers/fileHelpers");
1211

1312
module.exports = function run(args) {
14-
return runCypress(args);
15-
}
16-
17-
function deleteZip() {
18-
fs.unlink(config.fileName, function (err) {
19-
if(err) {
20-
logger.info(Constants.userMessages.ZIP_DELETE_FAILED);
21-
} else {
22-
logger.info(Constants.userMessages.ZIP_DELETED);
23-
}
24-
});
25-
}
26-
27-
function runCypress(args) {
2813
let bsConfigPath = process.cwd() + args.cf;
2914

30-
util.validateBstackJson(bsConfigPath).then(function (bsConfig) {
31-
util.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
15+
return utils.validateBstackJson(bsConfigPath).then(function (bsConfig) {
16+
utils.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
3217

3318
// Validate browserstack.json values
34-
capabilityHelper.validate(bsConfig).then(function (validated) {
19+
return capabilityHelper.validate(bsConfig).then(function (validated) {
3520
logger.info(validated);
3621

3722
// Archive the spec files
38-
archiver.archive(bsConfig.run_settings, config.fileName).then(function (data) {
23+
return archiver.archive(bsConfig.run_settings, config.fileName).then(function (data) {
3924

4025
// Uploaded zip file
41-
zipUploader.zipUpload(bsConfig, config.fileName).then(function (zip) {
26+
return zipUploader.zipUpload(bsConfig, config.fileName).then(function (zip) {
4227

4328
// Create build
44-
build.createBuild(bsConfig, zip).then(function (message) {
29+
return build.createBuild(bsConfig, zip).then(function (message) {
4530
logger.info(message);
46-
util.sendUsageReport(bsConfig, args, message, Constants.messageTypes.SUCCESS, null);
31+
utils.sendUsageReport(bsConfig, args, message, Constants.messageTypes.SUCCESS, null);
4732
return;
4833
}).catch(function (err) {
4934
// Build creation failed
5035
logger.error(err);
51-
util.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'build_failed');
36+
utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'build_failed');
5237
});
5338
}).catch(function (err) {
5439
// Zip Upload failed
55-
logger.error(err)
56-
logger.error(Constants.userMessages.ZIP_UPLOAD_FAILED)
57-
util.sendUsageReport(bsConfig, args, `${err}\n${Constants.userMessages.ZIP_UPLOAD_FAILED}`, Constants.messageTypes.ERROR, 'zip_upload_failed');
40+
logger.error(err);
41+
logger.error(Constants.userMessages.ZIP_UPLOAD_FAILED);
42+
utils.sendUsageReport(bsConfig, args, `${err}\n${Constants.userMessages.ZIP_UPLOAD_FAILED}`, Constants.messageTypes.ERROR, 'zip_upload_failed');
5843
}).finally(function () {
59-
deleteZip();
44+
fileHelpers.deleteZip();
6045
});
6146
}).catch(function (err) {
6247
// Zipping failed
6348
logger.error(err);
6449
logger.error(Constants.userMessages.FAILED_TO_ZIP);
65-
util.sendUsageReport(bsConfig, args, `${err}\n${Constants.userMessages.FAILED_TO_ZIP}`, Constants.messageTypes.ERROR, 'zip_creation_failed');
50+
utils.sendUsageReport(bsConfig, args, `${err}\n${Constants.userMessages.FAILED_TO_ZIP}`, Constants.messageTypes.ERROR, 'zip_creation_failed');
6651
try {
67-
deleteZip();
52+
fileHelpers.deleteZip();
6853
} catch (err) {
69-
util.sendUsageReport(bsConfig, args, Constants.userMessages.ZIP_DELETE_FAILED, Constants.messageTypes.ERROR, 'zip_deletion_failed');
54+
utils.sendUsageReport(bsConfig, args, Constants.userMessages.ZIP_DELETE_FAILED, Constants.messageTypes.ERROR, 'zip_deletion_failed');
7055
}
7156
});
7257
}).catch(function (err) {
7358
// browerstack.json is not valid
7459
logger.error(err);
7560
logger.error(Constants.validationMessages.NOT_VALID);
7661

77-
let error_code = util.getErrorCodeFromMsg(err);
78-
util.sendUsageReport(bsConfig, args, `${err}\n${Constants.validationMessages.NOT_VALID}`, Constants.messageTypes.ERROR, error_code);
62+
let error_code = utils.getErrorCodeFromMsg(err);
63+
utils.sendUsageReport(bsConfig, args, `${err}\n${Constants.validationMessages.NOT_VALID}`, Constants.messageTypes.ERROR, error_code);
7964
});
8065
}).catch(function (err) {
8166
logger.error(err);
82-
util.setUsageReportingFlag(null, args.disableUsageReporting);
83-
util.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, util.getErrorCodeFromErr(err));
84-
})
67+
utils.setUsageReportingFlag(null, args.disableUsageReporting);
68+
utils.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, utils.getErrorCodeFromErr(err));
69+
});
8570
}

bin/commands/stop.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,28 @@ const request = require('request');
44
const config = require("../helpers/config"),
55
logger = require("../helpers/logger").winstonLogger,
66
Constants = require("../helpers/constants"),
7-
util = require("../helpers/util");
7+
utils = require("../helpers/utils");
88

99
module.exports = function stop(args) {
10-
return buildStop(args)
11-
}
12-
13-
function buildStop(args) {
1410
let bsConfigPath = process.cwd() + args.cf;
1511

16-
util.validateBstackJson(bsConfigPath).then(function (bsConfig) {
17-
util.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
12+
return utils.validateBstackJson(bsConfigPath).then(function (bsConfig) {
13+
utils.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
1814

1915
let buildId = args._[1];
2016

2117
let options = {
2218
url: config.buildStopUrl + buildId,
23-
method: "POST",
2419
auth: {
2520
user: bsConfig.auth.username,
2621
password: bsConfig.auth.access_key,
2722
},
2823
headers: {
29-
"User-Agent": util.getUserAgent(),
24+
"User-Agent": utils.getUserAgent(),
3025
},
3126
};
3227

33-
request(options, function (err, resp, body) {
28+
request.post(options, function (err, resp, body) {
3429
let message = null;
3530
let messageType = null;
3631
let errorCode = null;
@@ -80,11 +75,11 @@ function buildStop(args) {
8075
logger.info(message);
8176
}
8277
}
83-
util.sendUsageReport(bsConfig, args, message, messageType, errorCode);
78+
utils.sendUsageReport(bsConfig, args, message, messageType, errorCode);
8479
})
8580
}).catch(function (err) {
8681
logger.error(err);
87-
util.setUsageReportingFlag(null, args.disableUsageReporting);
88-
util.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, util.getErrorCodeFromErr(err));
82+
utils.setUsageReportingFlag(null, args.disableUsageReporting);
83+
utils.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, utils.getErrorCodeFromErr(err));
8984
})
9085
}

bin/helpers/archiver.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ const archiveSpecs = (runSettings, filePath) => {
3636

3737
archive.pipe(output);
3838

39-
40-
let allowedFileTypes = [ 'js', 'json', 'txt', 'ts' ]
39+
let allowedFileTypes = [ 'js', 'json', 'txt', 'ts' ];
4140
allowedFileTypes.forEach(fileType => {
4241
archive.glob(`**/*.${fileType}`, { cwd: cypressFolderPath, matchBase: true, ignore: ['node_modules/**', 'package-lock.json', 'package.json', 'browserstack-package.json'] });
4342
});

bin/helpers/build.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const request = require('request');
44
const config = require('./config'),
55
capabilityHelper = require("../helpers/capabilityHelper"),
66
Constants = require('../helpers/constants'),
7-
util =require('../helpers/util');
7+
utils =require('../helpers/utils');
88

99
const createBuild = (bsConfig, zip) => {
1010
return new Promise(function (resolve, reject) {
@@ -17,11 +17,11 @@ const createBuild = (bsConfig, zip) => {
1717
},
1818
headers: {
1919
'Content-Type': 'application/json',
20-
"User-Agent": util.getUserAgent(),
20+
"User-Agent": utils.getUserAgent(),
2121
},
2222
body: data
2323
}
24-
24+
2525
request.post(options, function (err, resp, body) {
2626
if (err) {
2727
reject(err);

bin/helpers/capabilityHelper.js

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,43 @@ const logger = require("./logger").winstonLogger,
33

44
const caps = (bsConfig, zip) => {
55
return new Promise(function (resolve, reject) {
6-
let user = bsConfig.auth.username
7-
let password = bsConfig.auth.access_key
6+
let user = undefined;
7+
let password = undefined;
8+
9+
if (bsConfig.auth) {
10+
user = bsConfig.auth.username;
11+
password = bsConfig.auth.access_key;
12+
}
813

914
if (!user || !password) reject(Constants.validationMessages.INCORRECT_AUTH_PARAMS);
1015

1116
var obj = new Object();
1217

1318
// Browser list
1419
let osBrowserArray = [];
15-
bsConfig.browsers.forEach(element => {
16-
osBrowser = element.os + "-" + element.browser
17-
element.versions.forEach(version => {
18-
osBrowserArray.push(osBrowser + version);
20+
if (bsConfig.browsers) {
21+
bsConfig.browsers.forEach((element) => {
22+
osBrowser = element.os + "-" + element.browser;
23+
element.versions.forEach((version) => {
24+
osBrowserArray.push(osBrowser + version);
25+
});
1926
});
20-
});
21-
obj.devices = osBrowserArray
27+
}
28+
obj.devices = osBrowserArray;
2229
if (obj.devices.length == 0) reject(Constants.validationMessages.EMPTY_BROWSER_LIST);
2330
logger.info(`Browser list: ${osBrowserArray.toString()}`);
2431

2532
// Test suite
26-
obj.test_suite = zip.zip_url.split("://")[1]
27-
if (!obj.test_suite || 0 === obj.test_suite.length) reject("Test suite is empty");
33+
if (zip.zip_url && zip.zip_url.split("://")[1].length !== 0) {
34+
obj.test_suite = zip.zip_url.split("://")[1];
35+
} else {
36+
reject("Test suite is empty");
37+
}
2838
logger.info(`Test suite: bs://${obj.test_suite}`);
2939

3040
// Local
3141
obj.local = false;
32-
if (bsConfig.connection_settings.local === true) obj.local = true;
42+
if (bsConfig.connection_settings && bsConfig.connection_settings.local === true) obj.local = true;
3343
logger.info(`Local is set to: ${obj.local}`);
3444

3545
// Local Identifier
@@ -41,19 +51,27 @@ const caps = (bsConfig, zip) => {
4151
}
4252

4353
// Project name
44-
obj.project = bsConfig.run_settings.project || bsConfig.run_settings.project_name;
45-
if (!obj.project) logger.log(`Project name is: ${obj.project}`);
46-
54+
obj.project = "project-name";
4755
// Build name
48-
obj.customBuildName = bsConfig.run_settings.customBuildName || bsConfig.run_settings.build_name;
56+
obj.customBuildName = "build-name";
57+
//callback url
58+
obj.callbackURL = null;
59+
//projectNotifyURL
60+
obj.projectNotifyURL = null;
61+
62+
if (bsConfig.run_settings) {
63+
obj.project = bsConfig.run_settings.project || bsConfig.run_settings.project_name;
64+
obj.customBuildName = bsConfig.run_settings.customBuildName || bsConfig.run_settings.build_name;
65+
obj.callbackURL = bsConfig.run_settings.callback_url;
66+
obj.projectNotifyURL = bsConfig.run_settings.project_notify_URL;
67+
}
68+
69+
if (obj.project) logger.log(`Project name is: ${obj.project}`);
70+
4971
if (obj.customBuildName) logger.log(`Build name is: ${obj.customBuildName}`);
5072

51-
//callback url
52-
obj.callbackURL = bsConfig.run_settings.callback_url
5373
if (obj.callbackURL) logger.info(`callback url is : ${obj.callbackURL}`);
5474

55-
//projectNotifyURL
56-
obj.projectNotifyURL = bsConfig.run_settings.project_notify_URL
5775
if (obj.projectNotifyURL) logger.info(`Project notify URL is: ${obj.projectNotifyURL}`);
5876

5977
var data = JSON.stringify(obj);

0 commit comments

Comments
 (0)