Skip to content

Commit f6805ed

Browse files
Karan NagpalKaran Nagpal
authored andcommitted
add unit test cases for support of env vars
1 parent ddd446f commit f6805ed

File tree

2 files changed

+121
-31
lines changed

2 files changed

+121
-31
lines changed

bin/helpers/utils.js

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -267,42 +267,47 @@ exports.setUserSpecs = (bsConfig, args) => {
267267
}
268268

269269
exports.setTestEnvs = (bsConfig, args) => {
270-
// env option must be set only from command line args as a string
271-
if (!this.isUndefined(args.env)) {
272-
bsConfig.run_settings.env = this.fixCommaSeparatedString(args.env);
273-
} else {
274-
bsConfig.run_settings.env = null;
270+
let envKeys = {};
271+
272+
// set env vars which are defined in env key as a string
273+
if(!this.isUndefined(bsConfig.run_settings.env)) {
274+
let bstackJsonEnvVars = this.fixCommaSeparatedString(bsConfig.run_settings.env).split(',');
275+
bstackJsonEnvVars.forEach((envVar) => {
276+
let env = envVar.split("=");
277+
envKeys[env[0]] = env[1];
278+
});
279+
}
280+
281+
// set env vars which are defined in system_env_vars key
282+
if(!this.isUndefined(bsConfig.run_settings.system_env_vars) && Array.isArray(bsConfig.run_settings.system_env_vars) && bsConfig.run_settings.system_env_vars.length) {
283+
let systemEnvVars = bsConfig.run_settings.system_env_vars;
284+
systemEnvVars.forEach((envVar) => {
285+
envKeys[envVar] = process.env[envVar];
286+
});
275287
}
276288

277289
// set env vars which start with CYPRESS_ and cypress_
278290
let pattern = /^cypress_/i;
279291
let matchingKeys = this.getKeysMatchingPattern(process.env, pattern);
280292
if (matchingKeys && matchingKeys.length) {
281-
let envKeys = [];
282293
matchingKeys.forEach((envVar) => {
283-
envKeys.push(`${envVar}=${process.env[envVar]}`);
294+
envKeys[envVar] = process.env[envVar];
284295
});
285-
286-
if (bsConfig.run_settings.env !== null) {
287-
bsConfig.run_settings.env = `${bsConfig.run_settings.env},${envKeys.join(',')}`;
288-
} else {
289-
bsConfig.run_settings.env = envKeys.join(',');
290-
}
291296
}
292297

293-
// set env vars which are defined in system_env_vars key
294-
if(!this.isUndefined(bsConfig.run_settings.system_env_vars) && Array.isArray(bsConfig.run_settings.system_env_vars) && bsConfig.run_settings.system_env_vars.length) {
295-
let system_env_vars = bsConfig.run_settings.system_env_vars;
296-
let envKeys = [];
297-
system_env_vars.forEach((envVar) => {
298-
envKeys.push(`${envVar}=${process.env[envVar]}`);
298+
// set env vars passed from command line args as a string
299+
if (!this.isUndefined(args.env)) {
300+
let argsEnvVars = this.fixCommaSeparatedString(args.env).split(',');
301+
argsEnvVars.forEach((envVar) => {
302+
let env = envVar.split("=");
303+
envKeys[env[0]] = env[1];
299304
});
305+
}
300306

301-
if (bsConfig.run_settings.env !== null) {
302-
bsConfig.run_settings.env = `${bsConfig.run_settings.env},${envKeys.join(',')}`;
303-
} else {
304-
bsConfig.run_settings.env = envKeys.join(',');
305-
}
307+
if (Object.keys(envKeys).length === 0) {
308+
bsConfig.run_settings.env = null;
309+
} else {
310+
bsConfig.run_settings.env = Object.keys(envKeys).map(key => (`${key}=${envKeys[key]}`)).join(',');
306311
}
307312
}
308313

test/unit/bin/helpers/utils.js

Lines changed: 92 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ describe('utils', () => {
358358
let args = testObjects.initSampleArgs;
359359

360360
it('should call sendUsageReport', () => {
361-
sendUsageReportStub = sandbox
361+
let sendUsageReportStub = sandbox
362362
.stub(utils, 'sendUsageReport')
363363
.callsFake(function () {
364364
return 'end';
@@ -508,11 +508,10 @@ describe('utils', () => {
508508
});
509509

510510
describe('setTestEnvs', () => {
511-
it('sets env only from args', () => {
511+
it('set env only from args', () => {
512512
let argsEnv = 'env3=value3, env4=value4';
513513
let bsConfig = {
514514
run_settings: {
515-
env: 'env1=value1, env2=value2',
516515
},
517516
};
518517
let args = {
@@ -523,7 +522,51 @@ describe('utils', () => {
523522
expect(bsConfig.run_settings.env).to.be.eq('env3=value3,env4=value4');
524523
});
525524

526-
it('sets env from args without spaces in it', () => {
525+
it('set env only from browserstack.json env param', () => {
526+
let bsConfig = {
527+
run_settings: {
528+
env: 'env1=value1, env2=value2',
529+
},
530+
};
531+
let args = {
532+
env: null
533+
};
534+
535+
utils.setTestEnvs(bsConfig, args);
536+
expect(bsConfig.run_settings.env).to.be.eq('env1=value1,env2=value2');
537+
});
538+
539+
it('merges env from args and browserstack.json env param', () => {
540+
let argsEnv = 'env3=value3, env4=value4';
541+
let bsConfig = {
542+
run_settings: {
543+
env: 'env1=value1, env2=value2',
544+
},
545+
};
546+
let args = {
547+
env: argsEnv,
548+
};
549+
550+
utils.setTestEnvs(bsConfig, args);
551+
expect(bsConfig.run_settings.env).to.be.eq('env1=value1,env2=value2,env3=value3,env4=value4');
552+
});
553+
554+
it('merges env from args and browserstack.json env param but give preceedence to args', () => {
555+
let argsEnv = 'env1=value0, env4=value4';
556+
let bsConfig = {
557+
run_settings: {
558+
env: 'env1=value1, env2=value2',
559+
},
560+
};
561+
let args = {
562+
env: argsEnv,
563+
};
564+
565+
utils.setTestEnvs(bsConfig, args);
566+
expect(bsConfig.run_settings.env).to.be.eq('env1=value0,env2=value2,env4=value4');
567+
});
568+
569+
it('handle spaces passed while specifying env', () => {
527570
let argsEnv = 'env3=value3 , env4=value4';
528571
let bsConfig = {
529572
run_settings: {
@@ -535,22 +578,64 @@ describe('utils', () => {
535578
};
536579

537580
utils.setTestEnvs(bsConfig, args);
538-
expect(bsConfig.run_settings.env).to.be.eq('env3=value3,env4=value4');
581+
expect(bsConfig.run_settings.env).to.be.eq('env1=value1,env2=value2,env3=value3,env4=value4');
539582
});
540583

541-
it('does not set env if not specified in args', () => {
584+
it('set vars passed in system_env_vars', () => {
585+
process.env.ENV1 = 'env1';
586+
process.env.ENV2 = 'env2'
542587
let argsEnv = 'env3=value3 , env4=value4';
543588
let bsConfig = {
544589
run_settings: {
545590
env: 'env1=value1 , env2=value2',
591+
system_env_vars: ['ENV1', 'ENV2']
592+
},
593+
};
594+
let args = {
595+
env: argsEnv,
596+
};
597+
598+
utils.setTestEnvs(bsConfig, args);
599+
expect(bsConfig.run_settings.env).to.be.eq('env1=value1,env2=value2,ENV1=env1,ENV2=env2,env3=value3,env4=value4');
600+
delete process.env.ENV1;
601+
delete process.env.ENV2;
602+
});
603+
604+
it('set vars defined on machine as CYPRESS_ or cypress_', () => {
605+
process.env.CYPRESS_TEST_1 = 'env1';
606+
process.env.cypress_test_2 = 'env2'
607+
let bsConfig = {
608+
run_settings: {
609+
env: null
546610
},
547611
};
548612
let args = {
549613
env: null,
550614
};
551615

552616
utils.setTestEnvs(bsConfig, args);
553-
expect(bsConfig.run_settings.env).to.be.eq(null);
617+
expect(bsConfig.run_settings.env).to.be.eq('CYPRESS_TEST_1=env1,cypress_test_2=env2');
618+
delete process.env.CYPRESS_TEST_1;
619+
delete process.env.cypress_test_2;
620+
});
621+
622+
it('set vars defined on machine as CYPRESS_ or cypress_ with args and env set in browserstack.json', () => {
623+
process.env.CYPRESS_TEST_1 = 'env1';
624+
process.env.cypress_test_2 = 'env2'
625+
let argsEnv = 'env3=value3 , env4=value4';
626+
let bsConfig = {
627+
run_settings: {
628+
env: 'env1=value1 , env2=value2'
629+
},
630+
};
631+
let args = {
632+
env: argsEnv,
633+
};
634+
635+
utils.setTestEnvs(bsConfig, args);
636+
expect(bsConfig.run_settings.env).to.be.eq('env1=value1,env2=value2,CYPRESS_TEST_1=env1,cypress_test_2=env2,env3=value3,env4=value4');
637+
delete process.env.CYPRESS_TEST_1;
638+
delete process.env.cypress_test_2;
554639
});
555640
});
556641

0 commit comments

Comments
 (0)