@testim/testim-cli 3.203.0 → 3.207.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli.js CHANGED
@@ -34,6 +34,15 @@ async function checkNodeVersion() {
34
34
  if (!semver.satisfies(process.version, version)) {
35
35
  throw new ArgError(`Required node version ${version} not satisfied with current version ${process.version}`);
36
36
  }
37
+
38
+ if (process.version.startsWith('v10.')) {
39
+ // give one day grace period.
40
+ const limitDate = new Date('2021-12-13T00:00:00.000z');
41
+ if (limitDate < new Date()) {
42
+ throw new ArgError('Node.js v10 is no longer supported, please upgrade to Node.js 12, 14 or 16.');
43
+ }
44
+ console.warn('Node.js v10 is no longer supported by the Testim CLI. Please upgrade to Node.js 12, 14 or 16.');
45
+ }
37
46
  }
38
47
 
39
48
  function main() {
@@ -48,13 +48,14 @@ class FeatureFlagsService {
48
48
  useJsInputCodeInSafari: new Rox.Flag(),
49
49
  autoSaveDownloadFileFireFox: new Rox.Flag(true),
50
50
  safariSelectOptionDispatchEventOnSelectElement: new Rox.Flag(true),
51
- experimentalPreCodeCompilation: new Rox.Flag(false),
51
+ experimentalPreCodeCompilation: new Rox.Flag(true),
52
52
  /** Enables using top level await inside custom actions for non-IE browsers */
53
53
  experimentalAsyncCustomCode: new Rox.Flag(),
54
54
  useSameBrowserForMultiTests: new LabFeatureFlag('labs'),
55
55
  highSpeedMode: new LabFeatureFlag(),
56
56
  usePortedHtml5DragDrop: new Rox.Flag(),
57
57
  applitoolsNewIntegration: new Rox.Flag(),
58
+ testNamesToBeforeSuiteHook: new Rox.Flag(),
58
59
  };
59
60
  Rox.register('default', this.flags);
60
61
  }
@@ -1,10 +1,30 @@
1
- "use strict";
1
+ 'use strict';
2
2
 
3
3
  const perf = require('./performance-logger');
4
4
 
5
5
  perf.log('getSessionPlayerRequire start');
6
6
  const getSessionPlayerFolder = require('./prepareRunnerAndTestimStartUtils').getSessionPlayerFolder;
7
+
7
8
  const testimAppDataFolder = getSessionPlayerFolder();
8
- const sessionPlayer = require(require('path').join(testimAppDataFolder, "sessionPlayer.js"));
9
+ /**
10
+ * @type {{
11
+ sessionPlayer: typeof import('../../../clickim/src/background/session/sessionPlayer').SessionPlayer;
12
+ utils: typeof import('../../../clickim/src/lib/utils').utils;
13
+ commonConstants: typeof import('../../../clickim/src/common/commonConstantsStrong');
14
+ locatorBuilderUtils: import('../../../clickim/src/locators/locatorBuilderUtils')['locatorBuilderUtils'];
15
+ assetService: import('../../../clickim/src/background/assetService')['assetService'];
16
+ localAssetService: import('../../../clickim/src/background/localAssetService');
17
+ urlUtils: import('../../../clickim/src/background/portMatch/urlUtils');
18
+ positionUtils: import('../../../clickim/src/lib/positionUtils');
19
+ visibilityUtils: import('../../../clickim/src/background/visibilityUtils');
20
+ apiCall: import('../../../clickim/src/common/playback/apiCall')['apiCall'];
21
+ stepParamBuilder: typeof import('../../../clickim/src/common/stepParamsBuilder').StepParamsBuilder;
22
+ stepParamExpressionEvaluator: import('../../../clickim/src/common/stepParamExpressionEvaluator');
23
+ manifestVersion: string | undefined;
24
+ EyeSdkBuilder: typeof import('../../../clickim/src/background/eyeSdkBuilder').EyeSdkBuilder
25
+ }}
26
+ */
27
+ const sessionPlayer = require(require('path').join(testimAppDataFolder, 'sessionPlayer.js')); // eslint-disable-line import/no-dynamic-require
28
+
9
29
  module.exports = sessionPlayer;
10
30
  perf.log('getSessionPlayerRequire end');
@@ -15,8 +15,9 @@ const severityMap = {
15
15
  debug: Severity.debug,
16
16
  };
17
17
 
18
+ const errorProps = ['err', 'error', 'reason', 'e'];
19
+
18
20
  class CoralogixTransport extends TransportStream {
19
- static options;
20
21
  constructor(options) {
21
22
  options = Object.assign({}, CoralogixTransport.options, options);
22
23
  super(options);
@@ -59,26 +60,18 @@ class CoralogixTransport extends TransportStream {
59
60
  meta.msg = `${msg}\n${meta.msg}`;
60
61
  }
61
62
  }
62
- if (infoMeta.err instanceof Error) {
63
- meta.err = {
64
- message: infoMeta.err.message,
65
- stack: infoMeta.err.stack,
66
- name: infoMeta.err.name,
67
- type: infoMeta.err.type,
68
- cause: infoMeta.err.cause,
69
- ...infoMeta.err,
70
- };
71
- }
72
63
 
73
- if (infoMeta.reason instanceof Error) {
74
- meta.reason = {
75
- message: infoMeta.reason.message,
76
- stack: infoMeta.reason.stack,
77
- name: infoMeta.reason.name,
78
- type: infoMeta.reason.type,
79
- cause: infoMeta.reason.cause,
80
- ...infoMeta.reason,
81
- };
64
+ for (const prop of errorProps) {
65
+ if (infoMeta[prop] instanceof Error) {
66
+ meta[prop] = {
67
+ message: infoMeta[prop].message,
68
+ stack: infoMeta[prop].stack,
69
+ name: infoMeta[prop].name,
70
+ type: infoMeta[prop].type,
71
+ cause: infoMeta[prop].cause,
72
+ ...infoMeta[prop],
73
+ };
74
+ }
82
75
  }
83
76
 
84
77
  // still have keys after deleting the above
@@ -1167,9 +1167,9 @@
1167
1167
  }
1168
1168
  },
1169
1169
  "@testim/webdriverio": {
1170
- "version": "0.0.3",
1171
- "resolved": "https://registry.npmjs.org/@testim/webdriverio/-/webdriverio-0.0.3.tgz",
1172
- "integrity": "sha512-EyajBTIA8YeGC0SfsUwLAB05pqErSOz8hxv1OO/G5cm93gTLPWYU9P30Ds0skLayO7rjxs4npvAzO+rFiYSpeg==",
1170
+ "version": "0.0.4",
1171
+ "resolved": "https://registry.npmjs.org/@testim/webdriverio/-/webdriverio-0.0.4.tgz",
1172
+ "integrity": "sha512-FkuPaDHxg/42MhQ/PSAurx4IroEQaWOGH8BVmIcGFjAz7BpYVNQhX7txppDTiHUGGxpeOQiqM3VvxawBfW6Qcg==",
1173
1173
  "requires": {
1174
1174
  "archiver": "~2.1.0",
1175
1175
  "babel-runtime": "^6.26.0",
@@ -1182,7 +1182,7 @@
1182
1182
  "grapheme-splitter": "^1.0.2",
1183
1183
  "inquirer": "~3.3.0",
1184
1184
  "json-stringify-safe": "~5.0.1",
1185
- "mkdirp": "~0.5.1",
1185
+ "mkdirp": "1.0.4",
1186
1186
  "npm-install-package": "~2.1.0",
1187
1187
  "optimist": "~0.6.1",
1188
1188
  "q": "~1.5.0",
@@ -1220,14 +1220,6 @@
1220
1220
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
1221
1221
  "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
1222
1222
  },
1223
- "mkdirp": {
1224
- "version": "0.5.5",
1225
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1226
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1227
- "requires": {
1228
- "minimist": "^1.2.5"
1229
- }
1230
- },
1231
1223
  "safe-buffer": {
1232
1224
  "version": "5.1.2",
1233
1225
  "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -2380,9 +2372,9 @@
2380
2372
  "dev": true
2381
2373
  },
2382
2374
  "caniuse-lite": {
2383
- "version": "1.0.30001283",
2384
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz",
2385
- "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==",
2375
+ "version": "1.0.30001285",
2376
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz",
2377
+ "integrity": "sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q==",
2386
2378
  "dev": true
2387
2379
  },
2388
2380
  "caseless": {
@@ -2552,9 +2544,9 @@
2552
2544
  },
2553
2545
  "dependencies": {
2554
2546
  "@types/node": {
2555
- "version": "16.11.10",
2556
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz",
2557
- "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA=="
2547
+ "version": "16.11.12",
2548
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
2549
+ "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
2558
2550
  },
2559
2551
  "mkdirp": {
2560
2552
  "version": "0.5.5",
@@ -2758,9 +2750,9 @@
2758
2750
  "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
2759
2751
  },
2760
2752
  "color-string": {
2761
- "version": "1.6.0",
2762
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
2763
- "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
2753
+ "version": "1.9.0",
2754
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz",
2755
+ "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
2764
2756
  "requires": {
2765
2757
  "color-name": "^1.0.0",
2766
2758
  "simple-swizzle": "^0.2.2"
@@ -3554,9 +3546,9 @@
3554
3546
  "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ=="
3555
3547
  },
3556
3548
  "electron-to-chromium": {
3557
- "version": "1.4.1",
3558
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz",
3559
- "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==",
3549
+ "version": "1.4.13",
3550
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.13.tgz",
3551
+ "integrity": "sha512-ih5tIhzEuf78pBY70FXLo+Pw73R5MPPPcXb4CGBMJaCQt/qo/IGIesKXmswpemVCKSE2Bulr5FslUv7gAWJoOw==",
3560
3552
  "dev": true
3561
3553
  },
3562
3554
  "emoji-regex": {
@@ -6116,9 +6108,9 @@
6116
6108
  "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
6117
6109
  },
6118
6110
  "json-schema": {
6119
- "version": "0.2.3",
6120
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
6121
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
6111
+ "version": "0.4.0",
6112
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
6113
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
6122
6114
  },
6123
6115
  "json-schema-traverse": {
6124
6116
  "version": "0.4.1",
@@ -6178,13 +6170,13 @@
6178
6170
  }
6179
6171
  },
6180
6172
  "jsprim": {
6181
- "version": "1.4.1",
6182
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
6183
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
6173
+ "version": "1.4.2",
6174
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
6175
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
6184
6176
  "requires": {
6185
6177
  "assert-plus": "1.0.0",
6186
6178
  "extsprintf": "1.3.0",
6187
- "json-schema": "0.2.3",
6179
+ "json-schema": "0.4.0",
6188
6180
  "verror": "1.10.0"
6189
6181
  }
6190
6182
  },
@@ -10844,9 +10836,9 @@
10844
10836
  "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg=="
10845
10837
  },
10846
10838
  "object-inspect": {
10847
- "version": "1.11.0",
10848
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
10849
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
10839
+ "version": "1.11.1",
10840
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
10841
+ "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==",
10850
10842
  "dev": true
10851
10843
  },
10852
10844
  "object-keys": {
@@ -12949,9 +12941,9 @@
12949
12941
  },
12950
12942
  "dependencies": {
12951
12943
  "debug": {
12952
- "version": "4.3.2",
12953
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
12954
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
12944
+ "version": "4.3.3",
12945
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
12946
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
12955
12947
  "requires": {
12956
12948
  "ms": "2.1.2"
12957
12949
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.203.0",
3
+ "version": "3.207.0",
4
4
  "description": "Command line interface for running Testing on your CI",
5
5
  "author": "Oren Rubin",
6
6
  "contributors": [{
@@ -51,7 +51,7 @@
51
51
  "@applitools/eyes-sdk-core": "12.23.12",
52
52
  "@applitools/visual-grid-client": "15.8.31",
53
53
  "@testim/coralogix-logger": "1.1.27-beta",
54
- "@testim/webdriverio": "0.0.3",
54
+ "@testim/webdriverio": "0.0.4",
55
55
  "abort-controller": "3.0.0",
56
56
  "ajv": "6.12.2",
57
57
  "analytics-node": "5.0.0",
@@ -12,17 +12,19 @@ class PixelValidationStepAction extends StepAction {
12
12
  const batchId = (config.batch && config.batch.id) || testResultId;
13
13
  const eyeManager = await eyeSdkService.getManager(shouldUseVisualGrid, this.context.config.applitoolsConcurrency || 5, batchId, this.runContext.applitoolsIntegrationData);
14
14
  const targetElementData = this.getTarget() || {};
15
+ let result;
15
16
  try {
16
17
  const openedEye = await eyeManager.openEyes({ driver: this.driver.client, config });
17
18
  const region = (this.step.action === 'element' && targetElementData.seleniumElement) || undefined;
18
19
  await openedEye.check({ settings: { region, fully: this.step.action === 'stitched' } });
19
20
  const eyesResults = await openedEye.close();
20
21
 
21
- return { isApplitoolsSdkResult: true, success: true, eyesResults };
22
+ result = { isApplitoolsSdkResult: true, success: true, eyesResults };
22
23
  } catch (err) {
23
24
  logger.error('Applitools SDK step failed', { err, info: err.info });
24
- return { isApplitoolsSdkResult: true, success: false, err };
25
+ result = { isApplitoolsSdkResult: true, success: false, err };
25
26
  }
27
+ return await eyeSdkService.handleApplitoolsSdkResult(this.context, result);
26
28
  }
27
29
  }
28
30
 
@@ -1,9 +1,10 @@
1
- // https://github.com/applitools/eyes.sdk.javascript1/blob/master/packages/eyes-webdriverio-4/src/spec-driver.ts
2
-
3
1
  /**
4
- * @type {{ EyeSdkBuilder: typeof import('../../../../clickim/src/background/eyeSdkBuilder').EyeSdkBuilder }}
2
+ * @typedef {typeof import('../../../../clickim/src/background/eyeSdkBuilder').EyeSdkBuilder} EyeSdkBuilder
3
+ * @typedef {import('@applitools/types').SpecDriver} SpecDriver
4
+ * @typedef {import('@applitools/types').Core} Core
5
5
  */
6
- const sessionPlayer = require('../../commons/getSessionPlayerRequire');
6
+
7
+ const { EyeSdkBuilder } = require('../../commons/getSessionPlayerRequire');
7
8
  const { makeSDK } = require('@applitools/eyes-sdk-core');
8
9
  const { W3C_ELEMENT_ID } = require('../constants');
9
10
  const _ = require('lodash');
@@ -31,7 +32,8 @@ function getValueOrFallbackIfNullOrUndefined(value, fallback) {
31
32
  }
32
33
 
33
34
  /**
34
- * @typedef {import('@applitools/types').SpecDriver} SpecDriver
35
+ * Applitools Spec Driver for webdriverIO 4.
36
+ * @see https://github.com/applitools/eyes.sdk.javascript1/blob/master/packages/eyes-webdriverio-4/src/spec-driver.ts
35
37
  * @implements {SpecDriver}
36
38
  */
37
39
  class EyesSpec {
@@ -215,20 +217,19 @@ class EyesSpec {
215
217
 
216
218
  class EyeSdkService {
217
219
  constructor() {
218
- /**
219
- * @typedef {import('@applitools/types').Core} Core
220
- * @type {Core}
221
- */
220
+ /** @type {Core} */
222
221
  this.sdk = makeSDK({
223
222
  name: 'Testim.io',
224
223
  version: '4.0.0',
225
224
  spec: new EyesSpec(),
226
225
  VisualGridClient: require('@applitools/visual-grid-client'),
227
226
  });
227
+ /** @type {EyeSdkBuilder['handleApplitoolsSdkResult']} */
228
+ this.handleApplitoolsSdkResult = EyeSdkBuilder.handleApplitoolsSdkResult;
228
229
  }
229
230
  async getManager(useVisualGrid, concurrency, batchId, applitoolsIntegrationData) {
230
231
  const manager = await this.sdk.makeManager({ type: useVisualGrid ? 'vg' : 'classic', concurrency });
231
- sessionPlayer.EyeSdkBuilder.rememberCreatedBatch(batchId, applitoolsIntegrationData);
232
+ EyeSdkBuilder.rememberCreatedBatch(batchId, applitoolsIntegrationData);
232
233
  return manager;
233
234
  }
234
235
  }
@@ -83,15 +83,8 @@ class TestPlanRunner {
83
83
  }
84
84
  // When sessionPlayer is available, use it - as it only attempts to close batches that exist.
85
85
  if (tpOptions.mode === constants.CLI_MODE.SELENIUM) {
86
- /**
87
- * @type {{ EyeSdkBuilder: typeof import('../../../clickim/src/background/eyeSdkBuilder').EyeSdkBuilder }}
88
- */
89
- const sessionPlayerInit = require('../commons/getSessionPlayerRequire');
90
- // TODO: remove once session player released.
91
- if (typeof sessionPlayerInit.EyeSdkBuilder.closeBatch !== 'function') {
92
- return;
93
- }
94
- await sessionPlayerInit.EyeSdkBuilder.closeBatch(executionId);
86
+ const { EyeSdkBuilder } = require('../commons/getSessionPlayerRequire');
87
+ await EyeSdkBuilder.closeBatch(executionId);
95
88
  return;
96
89
  }
97
90
  try {
@@ -185,10 +178,11 @@ class TestPlanRunner {
185
178
  const configName = configs && configs.length === 1 ? configs[0] : null;
186
179
 
187
180
  const isCodeMode = tpOptions.files.length > 0;
181
+ const testNames = tpOptions.lightweightMode && tpOptions.lightweightMode.onlyTestIdsNoSuite ? [] : _.concat(beforeTests, tests, afterTests).map(test => test.name);
188
182
 
189
183
  const testListInfoPromise = tpOptions.lightweightMode && tpOptions.lightweightMode.onlyTestIdsNoSuite ?
190
184
  { beforeTests, tests, afterTests } :
191
- testStatus.executionStart(executionId, projectId, this.startTime, testPlanName);
185
+ testStatus.executionStart(executionId, projectId, this.startTime, testPlanName, testNames);
192
186
  let childTestResults;
193
187
  if (isCodeMode) {
194
188
  childTestResults = Bluebird.try(async () => {
package/testRunStatus.js CHANGED
@@ -15,6 +15,7 @@ const _ = require('lodash');
15
15
  const { registerExitHook } = require('./processHandler');
16
16
  const { calculateCoverage } = require('./coverage/jsCoverage');
17
17
  const featureAvailabilityService = require('./commons/featureAvailabilityService');
18
+ const featureFlags = require('./commons/featureFlags');
18
19
  const { mapFilesToLocalDrive } = require('./services/localRCASaver');
19
20
 
20
21
  const gitBranch = utils.getEnvironmentGitBranch();
@@ -333,7 +334,7 @@ RunStatus.prototype.calcTestRunStatus = function () {
333
334
  }, {});
334
335
  };
335
336
 
336
- RunStatus.prototype.executionStart = function (executionId, projectId, startTime, testPlanName) {
337
+ RunStatus.prototype.executionStart = function (executionId, projectId, startTime, testPlanName, testNames) {
337
338
  logger.info('execution started', { executionId });
338
339
  const { options } = this;
339
340
  const { remoteRunId, projectData } = options;
@@ -352,8 +353,11 @@ RunStatus.prototype.executionStart = function (executionId, projectId, startTime
352
353
  ]));
353
354
 
354
355
  this.startTime = startTime || Date.now();
355
-
356
- return runHook(options.beforeSuite, { projectId, executionId })
356
+ const runHooksProps = { projectId, executionId };
357
+ if (featureFlags.flags.testNamesToBeforeSuiteHook.isEnabled()) {
358
+ runHooksProps.testNames = testNames;
359
+ }
360
+ return runHook(options.beforeSuite, runHooksProps)
357
361
  .then(params => {
358
362
  const overrideTestDataBuilder = new OverrideTestDataBuilder(params, _.cloneDeep(this.testInfoList), projectId);
359
363
  this.testInfoList = overrideTestDataBuilder.overrideTestData();