From 992a1bff34c4fee2a83c26110fd807d731e363c8 Mon Sep 17 00:00:00 2001 From: Popov Aleksey Date: Wed, 22 Jun 2022 10:17:48 +0400 Subject: [PATCH] fix: fixed merging dashboard options (#7099) * test: added test Config options should recover storage options and Should merge options from storage, config, and environment with the right priority. * fix: fixed merging dashboard options --- src/runner/index.js | 21 +++++------------- test/server/runner-test.js | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/runner/index.js b/src/runner/index.js index 2e64719045..e9b4c4815f 100644 --- a/src/runner/index.js +++ b/src/runner/index.js @@ -10,6 +10,7 @@ import { isFunction, uniq, castArray, + merge, } from 'lodash'; import Bootstrapper from './bootstrapper'; @@ -543,14 +544,11 @@ export default class Runner extends EventEmitter { } async _getDashboardOptions () { - let options = this.configuration.getOption(OPTION_NAMES.dashboard); + const storageOptions = await this._loadDashboardOptionsFromStorage(); + const configOptions = this.configuration.getOption(OPTION_NAMES.dashboard); + const envOptions = getEnvOptions(); - if (!options) - options = await this._loadDashboardOptionsFromStorage(); - - this._mergeEnvDashboardOptions(options); - - return options; + return merge({}, storageOptions, configOptions, envOptions); } async _loadDashboardOptionsFromStorage () { @@ -561,15 +559,6 @@ export default class Runner extends EventEmitter { return storage.options; } - _mergeEnvDashboardOptions (options) { - const envDashboardOptions = getEnvOptions(); - - for (const key in envDashboardOptions) { - if (envDashboardOptions[key]) - options[key] = envDashboardOptions[key]; - } - } - async _prepareClientScripts (tests, clientScripts) { return Promise.all(tests.map(async test => { if (test.isLegacy) diff --git a/test/server/runner-test.js b/test/server/runner-test.js index 9159b13e15..a2b2ab0c07 100644 --- a/test/server/runner-test.js +++ b/test/server/runner-test.js @@ -222,6 +222,21 @@ describe('Runner', () => { sendReport: true, }; + it('Config options should recover storage options', async () => { + runner._loadDashboardOptionsFromStorage = () => TEST_DASHBOARD_SETTINGS; + + runner.configuration.mergeOptions({ dashboard: { token: 'config-token' } }); + + await runner._addDashboardReporterIfNeeded(); + + const reporter = runner.configuration.getOption('reporter')[0]; + + expect(reporter.name).to.equal('dashboard'); + expect(reporter.options).to.contains({ + token: 'config-token', + }); + }); + describe('Environment options', () => { before(() => { process.env.TESTCAFE_DASHBOARD_URL = 'test-url'; @@ -232,6 +247,8 @@ describe('Runner', () => { process.env.TESTCAFE_DASHBOARD_NO_VIDEO_UPLOAD = '1'; process.env.TESTCAFE_DASHBOARD_RESPONSE_TIMEOUT = '1000'; process.env.TESTCAFE_DASHBOARD_REQUEST_RETRY_COUNT = '5'; + + runner._loadDashboardOptionsFromStorage = () => ({}); }); after(() => { @@ -278,6 +295,33 @@ describe('Runner', () => { }); }); + + it('Should merge options from storage, config, and environment with the right priority.', async () => { + runner._loadDashboardOptionsFromStorage = () => TEST_DASHBOARD_SETTINGS; + + runner.configuration.mergeOptions({ + dashboard: { + sendReport: false, + url: 'config-dashboard-url', + }, + }); + + process.env.TESTCAFE_DASHBOARD_URL = 'env-dashboard-url'; + process.env.TESTCAFE_DASHBOARD_BUILD_ID = 'env-test-id'; + + const dashboardOptions = await runner._getDashboardOptions(); + + expect(dashboardOptions).to.contains({ + token: 'test-token', + sendReport: false, + url: 'env-dashboard-url', + buildId: 'env-test-id', + }); + + delete process.env.TESTCAFE_DASHBOARD_URL; + delete process.env.TESTCAFE_DASHBOARD_BUILD_ID; + }); + it('Should turn on screenshots flags autoTakeOnFails and takeOnFails', async () => { runner._loadDashboardOptionsFromStorage = () => { return TEST_DASHBOARD_SETTINGS;