Skip to content

Commit

Permalink
Merge pull request #147 from browserstack/ACE_2714_env
Browse files Browse the repository at this point in the history
Support for env variables using different ways
  • Loading branch information
karanshah-browserstack committed Aug 27, 2021
2 parents 0040ad8 + a2e8a4f commit d6a6a01
Show file tree
Hide file tree
Showing 7 changed files with 173 additions and 43 deletions.
3 changes: 3 additions & 0 deletions bin/commands/runs.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ module.exports = function run(args) {
// accept the env list from command line and set it
utils.setTestEnvs(bsConfig, args);

// accept the system env list from bsconf and set it
utils.setSystemEnvs(bsConfig);

//accept the local from env variable if provided
utils.setLocal(bsConfig, args);

Expand Down
26 changes: 6 additions & 20 deletions bin/helpers/capabilityHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,32 +93,18 @@ const caps = (bsConfig, zip) => {
obj.projectNotifyURL = null;

if (bsConfig.run_settings) {
obj.project = bsConfig.run_settings.project || bsConfig.run_settings.project_name;
obj.customBuildName = bsConfig.run_settings.build_name || bsConfig.run_settings.customBuildName;
obj.project = bsConfig.run_settings.project || bsConfig.run_settings.project_name || obj.project;
obj.customBuildName = bsConfig.run_settings.build_name || bsConfig.run_settings.customBuildName || obj.customBuildName;
obj.callbackURL = bsConfig.run_settings.callback_url;
obj.projectNotifyURL = bsConfig.run_settings.project_notify_URL;
obj.parallels = bsConfig.run_settings.parallels;

if (!Utils.isUndefined(bsConfig.run_settings.cypress_config_filename)) {
obj.cypress_config_filename = bsConfig.run_settings.cypress_config_filename;
}

if (!Utils.isUndefined(bsConfig.run_settings.specs)){
obj.specs = bsConfig.run_settings.specs;
}

if (!Utils.isUndefined(bsConfig.run_settings.env)){
obj.env = bsConfig.run_settings.env;
}
if (!Utils.isUndefined(bsConfig.run_settings.cypress_version)){
obj.cypress_version = bsConfig.run_settings.cypress_version;
}

if (!Utils.isUndefined(bsConfig.run_settings.headless) && String(bsConfig.run_settings.headless) === "false"){
obj.headless = bsConfig.run_settings.headless;
} else {
if (!(!Utils.isUndefined(bsConfig.run_settings.headless) && String(bsConfig.run_settings.headless) === "false")) {
logger.info(`Running your tests in headless mode. Use --headed arg to run in headful mode.`);
}

// send run_settings as is for other capabilities
obj.run_settings = JSON.stringify(bsConfig.run_settings);
}

if(obj.parallels === Constants.cliMessages.RUN.DEFAULT_PARALLEL_MESSAGE) obj.parallels = undefined
Expand Down
2 changes: 1 addition & 1 deletion bin/helpers/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ const messageTypes = {
NULL: null
}

const allowedFileTypes = ['js', 'json', 'txt', 'ts', 'feature', 'features', 'pdf', 'jpg', 'jpeg', 'png', 'zip', 'npmrc', 'xml', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'jsx', 'coffee', 'cjsx', 'csv', 'tsv', 'yml', 'yaml'];
const allowedFileTypes = ['js', 'json', 'txt', 'ts', 'feature', 'features', 'pdf', 'jpg', 'jpeg', 'png', 'zip', 'npmrc', 'xml', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'jsx', 'coffee', 'cjsx', 'csv', 'tsv', 'yml', 'yaml', 'env'];

const filesToIgnoreWhileUploading = [
'**/node_modules/**',
Expand Down
54 changes: 51 additions & 3 deletions bin/helpers/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,61 @@ exports.setUserSpecs = (bsConfig, args) => {
}
}

// env option must be set only from command line args as a string
exports.setTestEnvs = (bsConfig, args) => {
let envKeys = {};

if(bsConfig.run_settings.env && Object.keys(bsConfig.run_settings.env).length !== 0) {
envKeys = bsConfig.run_settings.env;
}

// set env vars passed from command line args as a string
if (!this.isUndefined(args.env)) {
bsConfig.run_settings.env = this.fixCommaSeparatedString(args.env);
} else {
let argsEnvVars = this.fixCommaSeparatedString(args.env).split(',');
argsEnvVars.forEach((envVar) => {
let env = envVar.split("=");
envKeys[env[0]] = env.slice(1,).join('=');
});
}

if (Object.keys(envKeys).length === 0) {
bsConfig.run_settings.env = null;
} else {
bsConfig.run_settings.env = Object.keys(envKeys).map(key => (`${key}=${envKeys[key]}`)).join(',');
}
}

exports.setSystemEnvs = (bsConfig) => {
let envKeys = {};

// set env vars which are defined in system_env_vars key
if(!this.isUndefined(bsConfig.run_settings.system_env_vars) && Array.isArray(bsConfig.run_settings.system_env_vars) && bsConfig.run_settings.system_env_vars.length) {
let systemEnvVars = bsConfig.run_settings.system_env_vars;
systemEnvVars.forEach((envVar) => {
envKeys[envVar] = process.env[envVar];
});
}

// set env vars which start with CYPRESS_ and cypress_
let pattern = /^cypress_/i;
let matchingKeys = this.getKeysMatchingPattern(process.env, pattern);
if (matchingKeys && matchingKeys.length) {
matchingKeys.forEach((envVar) => {
envKeys[envVar] = process.env[envVar];
});
}

if (Object.keys(envKeys).length === 0) {
bsConfig.run_settings.system_env_vars = null;
} else {
bsConfig.run_settings.system_env_vars = Object.keys(envKeys).map(key => (`${key}=${envKeys[key]}`));
}
}

exports.getKeysMatchingPattern = (obj, pattern) => {
let matchingKeys = Object.keys(obj).filter(function(key) {
return pattern.test(key);
});
return matchingKeys;
}

exports.fixCommaSeparatedString = (string) => {
Expand Down
19 changes: 17 additions & 2 deletions test/unit/bin/commands/runs.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setupLocalTestingStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
Expand Down Expand Up @@ -141,7 +142,8 @@ describe("runs", () => {
setupLocalTesting: setupLocalTestingStub,
isJSONInvalid: isJSONInvalidStub,
setLocalMode: setLocalModeStub,
setLocalConfigFile: setLocalConfigFileStub
setLocalConfigFile: setLocalConfigFileStub,
setSystemEnvs: setSystemEnvsStub
},
'../helpers/capabilityHelper': {
validate: capabilityValidatorStub
Expand All @@ -168,6 +170,7 @@ describe("runs", () => {
sinon.assert.calledOnce(setCypressConfigFilenameStub);
sinon.assert.calledOnce(setUserSpecsStub);
sinon.assert.calledOnce(setTestEnvsStub);
sinon.assert.calledOnce(setSystemEnvsStub);
sinon.assert.calledOnce(setLocalStub);
sinon.assert.calledOnce(setLocalModeStub);
sinon.assert.calledOnce(setLocalConfigFileStub);
Expand Down Expand Up @@ -203,6 +206,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
validateBstackJsonStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
checkUploadedStub = sandbox.stub();
Expand Down Expand Up @@ -257,7 +261,8 @@ describe("runs", () => {
deleteResults: deleteResultsStub,
setDefaults: setDefaultsStub,
getNumberOfSpecFiles: getNumberOfSpecFilesStub,
setLocalConfigFile: setLocalConfigFileStub
setLocalConfigFile: setLocalConfigFileStub,
setSystemEnvs: setSystemEnvsStub
},
'../helpers/capabilityHelper': {
validate: capabilityValidatorStub,
Expand Down Expand Up @@ -306,6 +311,7 @@ describe("runs", () => {
sinon.assert.calledOnce(deleteZipStub);
sinon.assert.calledOnce(deleteResultsStub);
sinon.assert.calledOnce(setDefaultsStub);
sinon.assert.calledOnce(setSystemEnvsStub);
sinon.assert.calledOnceWithExactly(
sendUsageReportStub,
bsConfig,
Expand All @@ -332,6 +338,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
checkUploadedStub = sandbox.stub();
Expand Down Expand Up @@ -376,6 +383,7 @@ describe("runs", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
setUserSpecs: setUserSpecsStub,
setTestEnvs: setTestEnvsStub,
setSystemEnvs: setSystemEnvsStub,
setUsageReportingFlag: setUsageReportingFlagStub,
getConfigPath: getConfigPathStub,
setLocal: setLocalStub,
Expand Down Expand Up @@ -436,6 +444,7 @@ describe("runs", () => {
sinon.assert.calledOnce(zipUploadStub);
sinon.assert.calledOnce(deleteResultsStub);
sinon.assert.calledOnce(setDefaultsStub);
sinon.assert.calledOnce(setSystemEnvsStub);
sinon.assert.calledOnceWithExactly(
sendUsageReportStub,
bsConfig,
Expand Down Expand Up @@ -465,6 +474,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
checkUploadedStub = sandbox.stub();
Expand Down Expand Up @@ -511,6 +521,7 @@ describe("runs", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
setUserSpecs: setUserSpecsStub,
setTestEnvs: setTestEnvsStub,
setSystemEnvs: setSystemEnvsStub,
setUsageReportingFlag: setUsageReportingFlagStub,
getConfigPath: getConfigPathStub,
setLocal: setLocalStub,
Expand Down Expand Up @@ -583,6 +594,7 @@ describe("runs", () => {
sinon.assert.calledOnce(sendUsageReportStub);
sinon.assert.calledOnce(deleteResultsStub);
sinon.assert.calledOnce(setDefaultsStub);
sinon.assert.calledOnce(setSystemEnvsStub);

sinon.assert.calledOnceWithExactly(
sendUsageReportStub,
Expand Down Expand Up @@ -611,6 +623,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
checkUploadedStub = sandbox.stub();
Expand Down Expand Up @@ -663,6 +676,7 @@ describe("runs", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
setUserSpecs: setUserSpecsStub,
setTestEnvs: setTestEnvsStub,
setSystemEnvs: setSystemEnvsStub,
setUsageReportingFlag: setUsageReportingFlagStub,
setParallels: setParallelsStub,
warnSpecLimit: warnSpecLimitStub,
Expand Down Expand Up @@ -745,6 +759,7 @@ describe("runs", () => {
sinon.assert.calledOnce(exportResultsStub);
sinon.assert.calledOnce(deleteResultsStub);
sinon.assert.calledOnce(setDefaultsStub);
sinon.assert.calledOnce(setSystemEnvsStub);
sinon.assert.match(
sendUsageReportStub.getCall(0).args,
[
Expand Down
14 changes: 7 additions & 7 deletions test/unit/bin/helpers/capabilityHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
chai.assert.equal(JSON.parse(data).cypress_version, cypress_version);
chai.assert.equal(JSON.parse(JSON.parse(data).run_settings).cypress_version, cypress_version);
})
.catch((error) => {
chai.assert.fail("Promise error");
Expand Down Expand Up @@ -309,7 +309,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
let parsed_data = JSON.parse(data);
let parsed_data = JSON.parse(JSON.parse(data).run_settings);
chai.assert.equal(parsed_data.specs, specsList);
chai.assert.equal(parsed_data.env, undefined);
})
Expand Down Expand Up @@ -341,7 +341,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
let parsed_data = JSON.parse(data);
let parsed_data = JSON.parse(JSON.parse(data).run_settings);
chai.assert.equal(parsed_data.env, envList);
chai.assert.equal(parsed_data.specs, undefined);
})
Expand Down Expand Up @@ -375,7 +375,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
let parsed_data = JSON.parse(data);
let parsed_data = JSON.parse(JSON.parse(data).run_settings);
chai.assert.equal(parsed_data.specs, specsList);
chai.assert.equal(parsed_data.env, envList);
})
Expand Down Expand Up @@ -405,7 +405,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
let parsed_data = JSON.parse(data);
let parsed_data = JSON.parse(JSON.parse(data).run_settings);
chai.assert.equal(parsed_data.specs, undefined);
chai.assert.equal(parsed_data.env, undefined);
})
Expand Down Expand Up @@ -439,7 +439,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
let parsed_data = JSON.parse(data);
let parsed_data = JSON.parse(JSON.parse(data).run_settings);
chai.assert.equal(parsed_data.headless, headless);
chai.assert.equal(parsed_data.env, undefined);
})
Expand Down Expand Up @@ -471,7 +471,7 @@ describe("capabilityHelper.js", () => {
return capabilityHelper
.caps(bsConfig, { zip_url: zip_url })
.then(function (data) {
let parsed_data = JSON.parse(data);
let parsed_data = JSON.parse(JSON.parse(data).run_settings);
chai.assert.equal(parsed_data.headless, headless);
chai.assert.equal(parsed_data.env, undefined);
})
Expand Down
Loading

0 comments on commit d6a6a01

Please sign in to comment.