Skip to content

Commit 4e0174f

Browse files
committed
Merge branch 'master' of github.com:browserstack/browserstack-cypress-cli into CYP_403_exclude
2 parents 44bfd5d + 8c30b5e commit 4e0174f

File tree

8 files changed

+409
-1
lines changed

8 files changed

+409
-1
lines changed

bin/commands/runs.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ module.exports = function run(args) {
2626
// accept the build name from command line if provided
2727
utils.setBuildName(bsConfig, args);
2828

29+
// accept the specs list from command line if provided
30+
utils.setUserSpecs(bsConfig, args);
31+
32+
// accept the env list from command line and set it
33+
utils.setTestEnvs(bsConfig, args);
34+
2935
//accept the local from env variable if provided
3036
utils.setLocal(bsConfig);
3137

bin/helpers/capabilityHelper.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ const caps = (bsConfig, zip) => {
6767
obj.callbackURL = bsConfig.run_settings.callback_url;
6868
obj.projectNotifyURL = bsConfig.run_settings.project_notify_URL;
6969
obj.parallels = bsConfig.run_settings.parallels;
70+
71+
if (!Utils.isUndefined(bsConfig.run_settings.specs)){
72+
obj.specs = bsConfig.run_settings.specs;
73+
}
74+
75+
if (!Utils.isUndefined(bsConfig.run_settings.env)){
76+
obj.env = bsConfig.run_settings.env;
77+
}
7078
}
7179

7280
if(obj.parallels === Constants.cliMessages.RUN.DEFAULT_PARALLEL_MESSAGE) obj.parallels = undefined

bin/helpers/constants.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ const cliMessages = {
6262
CONFIG_DEMAND: "config file is required",
6363
BUILD_NAME: "The build name you want to use to name your test runs",
6464
EXCLUDE: "Exclude files matching a pattern from zipping and uploading",
65-
DEFAULT_PARALLEL_MESSAGE: "Here goes the number of parallels you want to run"
65+
DEFAULT_PARALLEL_MESSAGE: "Here goes the number of parallels you want to run",
66+
SPECS_DESCRIPTION: 'Specify the spec files to run',
67+
ENV_DESCRIPTION: "Specify the environment variables for your spec files"
6668
},
6769
COMMON: {
6870
DISABLE_USAGE_REPORTING: "Disable usage reporting",

bin/helpers/utils.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,32 @@ exports.setBuildName = (bsConfig, args) => {
117117
}
118118
}
119119

120+
// specs can be passed from bstack configuration file
121+
// specs can be passed via command line args as a string
122+
// command line args takes precedence over config
123+
exports.setUserSpecs = (bsConfig, args) => {
124+
let bsConfigSpecs = bsConfig.run_settings.specs;
125+
126+
if (!this.isUndefined(args.specs)) {
127+
bsConfig.run_settings.specs = this.fixCommaSeparatedString(args.specs);
128+
} else if (!this.isUndefined(bsConfigSpecs) && Array.isArray(bsConfigSpecs)) {
129+
bsConfig.run_settings.specs = bsConfigSpecs.join(',');
130+
} else if (!this.isUndefined(bsConfigSpecs) && typeof(bsConfigSpecs) == "string") {
131+
bsConfig.run_settings.specs = this.fixCommaSeparatedString(bsConfigSpecs);
132+
} else {
133+
bsConfig.run_settings.specs = null;
134+
}
135+
}
136+
137+
// env option must be set only from command line args as a string
138+
exports.setTestEnvs = (bsConfig, args) => {
139+
if (!this.isUndefined(args.env)) {
140+
bsConfig.run_settings.env = this.fixCommaSeparatedString(args.env);
141+
} else {
142+
bsConfig.run_settings.env = null;
143+
}
144+
}
145+
120146
exports.fixCommaSeparatedString = (string) => {
121147
return string.split(/\s{0,},\s+/).join(',');
122148
}

bin/runner.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,17 @@ var argv = yargs
171171
type: "string",
172172
default: undefined
173173
},
174+
's': {
175+
alias: ['specs', 'spec'],
176+
describe: Constants.cliMessages.RUN.SPECS_DESCRIPTION,
177+
type: "string",
178+
default: undefined
179+
},
180+
'env': {
181+
describe: Constants.cliMessages.RUN.ENV_DESCRIPTION,
182+
type: "string",
183+
default: undefined
184+
},
174185
'disable-npm-warning': {
175186
default: false,
176187
description: Constants.cliMessages.COMMON.NO_NPM_WARNING,

test/unit/bin/commands/runs.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ describe("runs", () => {
8585
setUsernameStub = sandbox.stub();
8686
setAccessKeyStub = sandbox.stub();
8787
setBuildNameStub = sandbox.stub();
88+
setUserSpecsStub = sandbox.stub();
89+
setTestEnvsStub = sandbox.stub();
8890
getConfigPathStub = sandbox.stub();
8991
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
9092
sendUsageReportStub = sandbox.stub().callsFake(function () {
@@ -116,6 +118,8 @@ describe("runs", () => {
116118
setUsername: setUsernameStub,
117119
setAccessKey: setAccessKeyStub,
118120
setBuildName: setBuildNameStub,
121+
setUserSpecs: setUserSpecsStub,
122+
setTestEnvs: setTestEnvsStub,
119123
getConfigPath: getConfigPathStub,
120124
setLocal: setLocalStub,
121125
setLocalIdentifier: setLocalIdentifierStub,
@@ -165,6 +169,8 @@ describe("runs", () => {
165169
setAccessKeyStub = sandbox.stub();
166170
getConfigPathStub = sandbox.stub();
167171
setBuildNameStub = sandbox.stub();
172+
setUserSpecsStub = sandbox.stub();
173+
setTestEnvsStub = sandbox.stub();
168174
validateBstackJsonStub = sandbox.stub();
169175
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
170176
sendUsageReportStub = sandbox.stub().callsFake(function () {
@@ -196,6 +202,8 @@ describe("runs", () => {
196202
setUsername: setUsernameStub,
197203
setAccessKey: setAccessKeyStub,
198204
setBuildName: setBuildNameStub,
205+
setUserSpecs: setUserSpecsStub,
206+
setTestEnvs: setTestEnvsStub,
199207
setUsageReportingFlag: setUsageReportingFlagStub,
200208
getConfigPath: getConfigPathStub,
201209
setLocal: setLocalStub,
@@ -255,6 +263,8 @@ describe("runs", () => {
255263
setUsernameStub = sandbox.stub();
256264
setAccessKeyStub = sandbox.stub();
257265
setBuildNameStub = sandbox.stub();
266+
setUserSpecsStub = sandbox.stub();
267+
setTestEnvsStub = sandbox.stub();
258268
getConfigPathStub = sandbox.stub();
259269
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
260270
sendUsageReportStub = sandbox.stub().callsFake(function () {
@@ -287,6 +297,8 @@ describe("runs", () => {
287297
setUsername: setUsernameStub,
288298
setAccessKey: setAccessKeyStub,
289299
setBuildName: setBuildNameStub,
300+
setUserSpecs: setUserSpecsStub,
301+
setTestEnvs: setTestEnvsStub,
290302
setUsageReportingFlag: setUsageReportingFlagStub,
291303
getConfigPath: getConfigPathStub,
292304
setLocal: setLocalStub,
@@ -353,6 +365,8 @@ describe("runs", () => {
353365
setUsernameStub = sandbox.stub();
354366
setAccessKeyStub = sandbox.stub();
355367
setBuildNameStub = sandbox.stub();
368+
setUserSpecsStub = sandbox.stub();
369+
setTestEnvsStub = sandbox.stub();
356370
getConfigPathStub = sandbox.stub();
357371
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
358372
sendUsageReportStub = sandbox.stub().callsFake(function () {
@@ -386,6 +400,8 @@ describe("runs", () => {
386400
setUsername: setUsernameStub,
387401
setAccessKey: setAccessKeyStub,
388402
setBuildName: setBuildNameStub,
403+
setUserSpecs: setUserSpecsStub,
404+
setTestEnvs: setTestEnvsStub,
389405
setUsageReportingFlag: setUsageReportingFlagStub,
390406
getConfigPath: getConfigPathStub,
391407
setLocal: setLocalStub,
@@ -463,6 +479,8 @@ describe("runs", () => {
463479
setUsernameStub = sandbox.stub();
464480
setAccessKeyStub = sandbox.stub();
465481
setBuildNameStub = sandbox.stub();
482+
setUserSpecsStub = sandbox.stub();
483+
setTestEnvsStub = sandbox.stub();
466484
getConfigPathStub = sandbox.stub();
467485
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
468486
sendUsageReportStub = sandbox.stub().callsFake(function () {
@@ -499,6 +517,8 @@ describe("runs", () => {
499517
setUsername: setUsernameStub,
500518
setAccessKey: setAccessKeyStub,
501519
setBuildName: setBuildNameStub,
520+
setUserSpecs: setUserSpecsStub,
521+
setTestEnvs: setTestEnvsStub,
502522
setUsageReportingFlag: setUsageReportingFlagStub,
503523
setParallels: setParallelsStub,
504524
getConfigPath: getConfigPathStub,

test/unit/bin/helpers/capabilityHelper.js

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,136 @@ describe("capabilityHelper.js", () => {
249249
chai.assert.fail("Promise error");
250250
});
251251
});
252+
253+
context("specs and env from run_setting", () => {
254+
it("sets specs list is present", () => {
255+
let specsList = "spec1,spec2";
256+
let zip_url = "bs://<random>";
257+
let bsConfig = {
258+
auth: {
259+
username: "random",
260+
access_key: "random",
261+
},
262+
browsers: [
263+
{
264+
browser: "chrome",
265+
os: "Windows 10",
266+
versions: ["78", "77"],
267+
},
268+
],
269+
run_settings: {
270+
specs: specsList
271+
},
272+
};
273+
274+
return capabilityHelper
275+
.caps(bsConfig, { zip_url: zip_url })
276+
.then(function (data) {
277+
let parsed_data = JSON.parse(data);
278+
chai.assert.equal(parsed_data.specs, specsList);
279+
chai.assert.equal(parsed_data.env, undefined);
280+
})
281+
.catch((error) => {
282+
chai.assert.fail("Promise error");
283+
});
284+
});
285+
286+
it("sets env list is present", () => {
287+
let envList = "env1=value1,env2=value2";
288+
let zip_url = "bs://<random>";
289+
let bsConfig = {
290+
auth: {
291+
username: "random",
292+
access_key: "random",
293+
},
294+
browsers: [
295+
{
296+
browser: "chrome",
297+
os: "Windows 10",
298+
versions: ["78", "77"],
299+
},
300+
],
301+
run_settings: {
302+
env: envList
303+
},
304+
};
305+
306+
return capabilityHelper
307+
.caps(bsConfig, { zip_url: zip_url })
308+
.then(function (data) {
309+
let parsed_data = JSON.parse(data);
310+
chai.assert.equal(parsed_data.env, envList);
311+
chai.assert.equal(parsed_data.specs, undefined);
312+
})
313+
.catch((error) => {
314+
chai.assert.fail("Promise error");
315+
});
316+
});
317+
318+
it("sets both specs and env list is present", () => {
319+
let specsList = "spec1,spec2";
320+
let envList = "env1=value1,env2=value2";
321+
let zip_url = "bs://<random>";
322+
let bsConfig = {
323+
auth: {
324+
username: "random",
325+
access_key: "random",
326+
},
327+
browsers: [
328+
{
329+
browser: "chrome",
330+
os: "Windows 10",
331+
versions: ["78", "77"],
332+
},
333+
],
334+
run_settings: {
335+
specs: specsList,
336+
env: envList
337+
},
338+
};
339+
340+
return capabilityHelper
341+
.caps(bsConfig, { zip_url: zip_url })
342+
.then(function (data) {
343+
let parsed_data = JSON.parse(data);
344+
chai.assert.equal(parsed_data.specs, specsList);
345+
chai.assert.equal(parsed_data.env, envList);
346+
})
347+
.catch((error) => {
348+
chai.assert.fail("Promise error");
349+
});
350+
});
351+
352+
it("both specs and env list is not present", () => {
353+
let zip_url = "bs://<random>";
354+
let bsConfig = {
355+
auth: {
356+
username: "random",
357+
access_key: "random",
358+
},
359+
browsers: [
360+
{
361+
browser: "chrome",
362+
os: "Windows 10",
363+
versions: ["78", "77"],
364+
},
365+
],
366+
run_settings: {
367+
},
368+
};
369+
370+
return capabilityHelper
371+
.caps(bsConfig, { zip_url: zip_url })
372+
.then(function (data) {
373+
let parsed_data = JSON.parse(data);
374+
chai.assert.equal(parsed_data.specs, undefined);
375+
chai.assert.equal(parsed_data.env, undefined);
376+
})
377+
.catch((error) => {
378+
chai.assert.fail("Promise error");
379+
});
380+
});
381+
});
252382
});
253383

254384
describe("validate", () => {

0 commit comments

Comments
 (0)