Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for env variables using different ways #147

Merged
merged 12 commits into from
Aug 27, 2021
3 changes: 3 additions & 0 deletions bin/commands/runs.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,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 @@ -129,7 +129,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) {
nagpalkaran95 marked this conversation as resolved.
Show resolved Hide resolved
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) => {
nagpalkaran95 marked this conversation as resolved.
Show resolved Hide resolved
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);
sendUsageReportStub = sandbox.stub().callsFake(function () {
Expand Down Expand Up @@ -256,7 +260,8 @@ describe("runs", () => {
deleteResults: deleteResultsStub,
setDefaults: setDefaultsStub,
getNumberOfSpecFiles: getNumberOfSpecFilesStub,
setLocalConfigFile: setLocalConfigFileStub
setLocalConfigFile: setLocalConfigFileStub,
setSystemEnvs: setSystemEnvsStub
},
'../helpers/capabilityHelper': {
validate: capabilityValidatorStub,
Expand Down Expand Up @@ -301,6 +306,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 @@ -327,6 +333,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
sendUsageReportStub = sandbox.stub().callsFake(function () {
Expand Down Expand Up @@ -370,6 +377,7 @@ describe("runs", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
setUserSpecs: setUserSpecsStub,
setTestEnvs: setTestEnvsStub,
setSystemEnvs: setSystemEnvsStub,
setUsageReportingFlag: setUsageReportingFlagStub,
getConfigPath: getConfigPathStub,
setLocal: setLocalStub,
Expand Down Expand Up @@ -426,6 +434,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 @@ -455,6 +464,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
sendUsageReportStub = sandbox.stub().callsFake(function () {
Expand Down Expand Up @@ -500,6 +510,7 @@ describe("runs", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
setUserSpecs: setUserSpecsStub,
setTestEnvs: setTestEnvsStub,
setSystemEnvs: setSystemEnvsStub,
setUsageReportingFlag: setUsageReportingFlagStub,
getConfigPath: getConfigPathStub,
setLocal: setLocalStub,
Expand Down Expand Up @@ -568,6 +579,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 @@ -596,6 +608,7 @@ describe("runs", () => {
setCypressConfigFilenameStub = sandbox.stub();
setUserSpecsStub = sandbox.stub();
setTestEnvsStub = sandbox.stub();
setSystemEnvsStub = sandbox.stub();
getConfigPathStub = sandbox.stub();
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
sendUsageReportStub = sandbox.stub().callsFake(function () {
Expand Down Expand Up @@ -647,6 +660,7 @@ describe("runs", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
setUserSpecs: setUserSpecsStub,
setTestEnvs: setTestEnvsStub,
setSystemEnvs: setSystemEnvsStub,
setUsageReportingFlag: setUsageReportingFlagStub,
setParallels: setParallelsStub,
warnSpecLimit: warnSpecLimitStub,
Expand Down Expand Up @@ -725,6 +739,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