@zohodesk/testinglibrary 0.1.9-exp-actors → 0.1.12-experimental

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.
Files changed (241) hide show
  1. package/.babelrc +4 -2
  2. package/.claude/settings.local.json +14 -0
  3. package/.gitlab-ci.yml +206 -0
  4. package/README.md +264 -1
  5. package/build/common/data-generator/steps/DataGenerator.spec.js +19 -0
  6. package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +21 -0
  7. package/build/common/multi-actor/steps/multiActorHandling.spec.js +26 -0
  8. package/build/common/searchFake/helpers/rpcRequestHelper.js +52 -0
  9. package/build/common/searchFake/steps/searchFake.spec.js +85 -0
  10. package/build/core/dataGenerator/DataGenerator.js +161 -0
  11. package/build/core/dataGenerator/DataGeneratorError.js +60 -0
  12. package/build/core/dataGenerator/DataGeneratorHelper.js +121 -0
  13. package/build/core/dataGenerator/authenticator/Authenticator.js +37 -0
  14. package/build/core/dataGenerator/authenticator/CookieAuthenticator.js +48 -0
  15. package/build/core/dataGenerator/authenticator/JWTauthenticator.js +59 -0
  16. package/build/core/dataGenerator/authenticator/OAuthAuthenticator.js +26 -0
  17. package/build/core/dataGenerator/authenticator/OrgOAuthAuthenticator.js +26 -0
  18. package/build/core/dataGenerator/authenticator/cookieAuthConfig.js +11 -0
  19. package/build/core/jest/preprocessor/jsPreprocessor.js +2 -7
  20. package/build/core/jest/setup/index.js +1 -7
  21. package/build/core/playwright/builtInFixtures/actorContext.js +78 -0
  22. package/build/core/playwright/builtInFixtures/caseTimeout.js +20 -0
  23. package/build/core/playwright/builtInFixtures/context.js +34 -16
  24. package/build/core/playwright/builtInFixtures/executionContext.js +17 -0
  25. package/build/core/playwright/builtInFixtures/i18N.js +8 -0
  26. package/build/core/playwright/builtInFixtures/index.js +7 -1
  27. package/build/core/playwright/builtInFixtures/page.js +22 -84
  28. package/build/core/playwright/clear-caches.js +17 -5
  29. package/build/core/playwright/codegen.js +4 -21
  30. package/build/core/playwright/configuration/Configuration.js +25 -0
  31. package/build/core/playwright/configuration/ConfigurationHelper.js +45 -0
  32. package/build/core/playwright/configuration/UserArgs.js +12 -0
  33. package/build/core/playwright/constants/configConstants.js +17 -0
  34. package/build/core/playwright/constants/failureTagConstants.js +17 -0
  35. package/build/core/playwright/constants/fileMutexConfig.js +9 -0
  36. package/build/core/playwright/constants/reporterConstants.js +20 -0
  37. package/build/core/playwright/constants/retryConstants.js +8 -0
  38. package/build/core/playwright/custom-commands.js +1 -1
  39. package/build/core/playwright/env-initializer.js +26 -7
  40. package/build/core/playwright/fixtures.js +24 -0
  41. package/build/core/playwright/helpers/additionalProfiles.js +25 -0
  42. package/build/core/playwright/helpers/auth/accountLogin.js +4 -1
  43. package/build/core/playwright/helpers/auth/checkAuthCookies.js +20 -19
  44. package/build/core/playwright/helpers/auth/getUsers.js +57 -49
  45. package/build/core/playwright/helpers/auth/index.js +14 -1
  46. package/build/core/playwright/helpers/auth/loginDefaultStepsHelper.js +62 -0
  47. package/build/core/playwright/helpers/auth/loginSteps.js +40 -22
  48. package/build/core/playwright/helpers/browserTimeoutFactor.js +16 -0
  49. package/build/core/playwright/helpers/caseTimeoutResolver.js +37 -0
  50. package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
  51. package/build/core/playwright/helpers/configFileNameProvider.js +21 -7
  52. package/build/core/playwright/helpers/configPathResolver.js +38 -0
  53. package/build/core/playwright/helpers/contextFailureHandler.js +81 -0
  54. package/build/core/playwright/helpers/customFixturesHelper.js +58 -0
  55. package/build/core/playwright/helpers/failureTagClassifier.js +197 -0
  56. package/build/core/playwright/helpers/fileMutex.js +71 -0
  57. package/build/core/playwright/helpers/logCollector.js +147 -0
  58. package/build/core/playwright/helpers/parseUserArgs.js +2 -3
  59. package/build/core/playwright/helpers/runtimeLogAnnotator.js +140 -0
  60. package/build/core/playwright/helpers/runtimeLogPath.js +61 -0
  61. package/build/core/playwright/helpers/runtimeLogReader.js +54 -0
  62. package/build/core/playwright/helpers/thirdPartyLib.js +13 -0
  63. package/build/core/playwright/index.js +8 -88
  64. package/build/core/playwright/patterns/casePatterns.js +9 -0
  65. package/build/core/playwright/patterns/codePatterns.js +9 -0
  66. package/build/core/playwright/patterns/environmentPatterns.js +15 -0
  67. package/build/core/playwright/patterns/index.js +33 -0
  68. package/build/core/playwright/patterns/logCollectorIgnorePatterns.js +15 -0
  69. package/build/core/playwright/patterns/toolPatterns.js +26 -0
  70. package/build/core/playwright/readConfigFile.js +49 -16
  71. package/build/core/playwright/reporter/PlaywrightReporter.js +58 -0
  72. package/build/core/playwright/reporter/Reporter.js +65 -0
  73. package/build/core/playwright/reporter/ShardReporter.js +58 -0
  74. package/build/core/playwright/reporter/UnitReporter.js +27 -0
  75. package/build/core/playwright/reporter/helpers/mergeAbortedTests.js +78 -0
  76. package/build/core/playwright/runner/Runner.js +22 -0
  77. package/build/core/playwright/runner/RunnerHelper.js +43 -0
  78. package/build/core/playwright/runner/RunnerTypes.js +17 -0
  79. package/build/core/playwright/runner/SpawnRunner.js +93 -0
  80. package/build/core/playwright/setup/Project.js +35 -0
  81. package/build/core/playwright/setup/ProjectConfiguration.js +66 -0
  82. package/build/core/playwright/setup/config-creator.js +58 -40
  83. package/build/core/playwright/setup/config-utils.js +68 -37
  84. package/build/core/playwright/setup/custom-reporter.js +137 -14
  85. package/build/core/playwright/setup/merge-config.js +32 -0
  86. package/build/core/playwright/setup/qc-custom-reporter.js +342 -0
  87. package/build/core/playwright/spawnInheritChild.js +71 -0
  88. package/build/core/playwright/tagProcessor.js +69 -0
  89. package/build/core/playwright/test-runner.js +44 -97
  90. package/build/core/playwright/types.js +4 -1
  91. package/build/core/playwright/validateFeature.js +28 -0
  92. package/build/decorators.d.ts +1 -1
  93. package/build/decorators.js +1 -1
  94. package/build/index.d.ts +2 -22
  95. package/build/index.js +12 -2
  96. package/build/lib/cli.js +42 -7
  97. package/build/setup-folder-structure/helper.js +2 -0
  98. package/build/setup-folder-structure/samples/accountLogin-sample.js +19 -0
  99. package/build/setup-folder-structure/samples/actors-index.js +2 -0
  100. package/build/setup-folder-structure/samples/auth-setup-sample.js +10 -66
  101. package/build/setup-folder-structure/samples/editions-index.js +3 -0
  102. package/build/setup-folder-structure/samples/free-sample.json +25 -0
  103. package/build/setup-folder-structure/samples/settings.json +7 -0
  104. package/build/setup-folder-structure/samples/testSetup-sample.js +14 -0
  105. package/build/setup-folder-structure/samples/uat-config-sample.js +7 -2
  106. package/build/setup-folder-structure/setupProject.js +23 -5
  107. package/build/test/core/dataGenerator/__tests__/DataGenerator.test.js +311 -0
  108. package/build/test/core/dataGenerator/__tests__/DataGeneratorHelper.test.js +204 -0
  109. package/build/test/core/dataGenerator/__tests__/DataGeneratorResolution.test.js +126 -0
  110. package/build/test/core/dataGenerator/authenticator/__tests__/Authenticator.test.js +88 -0
  111. package/build/test/core/dataGenerator/authenticator/__tests__/JWTauthenticator.test.js +136 -0
  112. package/build/test/core/dataGenerator/authenticator/__tests__/OAuthAuthenticator.test.js +39 -0
  113. package/build/test/core/dataGenerator/authenticator/__tests__/OrgOAuthAuthenticator.test.js +39 -0
  114. package/build/test/core/playwright/__tests__/spawnInheritChild.test.js +148 -0
  115. package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
  116. package/build/test/core/playwright/__tests__/validateFeature.test.js +72 -0
  117. package/build/test/core/playwright/buildInFixtures/__tests__/caseTimeout.test.js +96 -0
  118. package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +27 -0
  119. package/build/test/core/playwright/configuration/__tests__/Configuration.test.js +53 -0
  120. package/build/test/core/playwright/helpers/__tests__/additionalProfiles.test.js +45 -0
  121. package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +75 -0
  122. package/build/test/core/playwright/helpers/__tests__/configPathResolver.test.js +55 -0
  123. package/build/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js +51 -0
  124. package/build/test/core/playwright/helpers/__tests__/failureTagClassifier.test.js +604 -0
  125. package/build/test/core/playwright/helpers/__tests__/fileMutex.test.js +79 -0
  126. package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +83 -0
  127. package/build/test/core/playwright/helpers/__tests__/logCollector.test.js +163 -0
  128. package/build/test/core/playwright/helpers/__tests__/runtimeLogReader.test.js +112 -0
  129. package/build/test/core/playwright/helpers/auth/__tests__/checkAuthCookies.test.js +92 -0
  130. package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +19 -0
  131. package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +30 -0
  132. package/build/utils/cliArgsToObject.js +3 -0
  133. package/build/utils/commonUtils.js +20 -0
  134. package/build/utils/fileUtils.js +43 -1
  135. package/build/utils/logger.js +1 -30
  136. package/changelog.md +23 -0
  137. package/docs/CODE-REVIEW-AGENT.md +399 -0
  138. package/docs/code-review-instructions.md +157 -0
  139. package/jest.config.js +29 -11
  140. package/npm-shrinkwrap.json +14994 -4793
  141. package/package.json +39 -28
  142. package/playwright.config.js +13 -57
  143. package/unit_reports/unit-report.html +277 -0
  144. package/build/bdd-framework/cli/commands/env.js +0 -42
  145. package/build/bdd-framework/cli/commands/export.js +0 -47
  146. package/build/bdd-framework/cli/commands/test.js +0 -64
  147. package/build/bdd-framework/cli/index.js +0 -11
  148. package/build/bdd-framework/cli/options.js +0 -19
  149. package/build/bdd-framework/cli/worker.js +0 -13
  150. package/build/bdd-framework/config/configDir.js +0 -35
  151. package/build/bdd-framework/config/enrichReporterData.js +0 -23
  152. package/build/bdd-framework/config/env.js +0 -50
  153. package/build/bdd-framework/config/index.js +0 -94
  154. package/build/bdd-framework/config/lang.js +0 -14
  155. package/build/bdd-framework/cucumber/buildStepDefinition.js +0 -43
  156. package/build/bdd-framework/cucumber/createTestStep.js +0 -43
  157. package/build/bdd-framework/cucumber/formatter/EventDataCollector.js +0 -126
  158. package/build/bdd-framework/cucumber/formatter/GherkinDocumentParser.js +0 -72
  159. package/build/bdd-framework/cucumber/formatter/PickleParser.js +0 -25
  160. package/build/bdd-framework/cucumber/formatter/durationHelpers.js +0 -13
  161. package/build/bdd-framework/cucumber/formatter/getColorFns.js +0 -57
  162. package/build/bdd-framework/cucumber/formatter/index.js +0 -16
  163. package/build/bdd-framework/cucumber/formatter/locationHelpers.js +0 -16
  164. package/build/bdd-framework/cucumber/loadConfig.js +0 -17
  165. package/build/bdd-framework/cucumber/loadFeatures.js +0 -70
  166. package/build/bdd-framework/cucumber/loadSnippetBuilder.js +0 -20
  167. package/build/bdd-framework/cucumber/loadSteps.js +0 -47
  168. package/build/bdd-framework/cucumber/resolveFeaturePaths.js +0 -62
  169. package/build/bdd-framework/cucumber/stepArguments.js +0 -21
  170. package/build/bdd-framework/cucumber/types.js +0 -5
  171. package/build/bdd-framework/cucumber/valueChecker.js +0 -23
  172. package/build/bdd-framework/decorators.js +0 -18
  173. package/build/bdd-framework/gen/fixtures.js +0 -48
  174. package/build/bdd-framework/gen/formatter.js +0 -123
  175. package/build/bdd-framework/gen/i18n.js +0 -39
  176. package/build/bdd-framework/gen/index.js +0 -185
  177. package/build/bdd-framework/gen/testFile.js +0 -465
  178. package/build/bdd-framework/gen/testMeta.js +0 -60
  179. package/build/bdd-framework/gen/testNode.js +0 -60
  180. package/build/bdd-framework/gen/testPoms.js +0 -133
  181. package/build/bdd-framework/hooks/scenario.js +0 -130
  182. package/build/bdd-framework/hooks/worker.js +0 -89
  183. package/build/bdd-framework/index.js +0 -52
  184. package/build/bdd-framework/playwright/fixtureParameterNames.js +0 -93
  185. package/build/bdd-framework/playwright/getLocationInFile.js +0 -79
  186. package/build/bdd-framework/playwright/loadConfig.js +0 -42
  187. package/build/bdd-framework/playwright/loadUtils.js +0 -33
  188. package/build/bdd-framework/playwright/testTypeImpl.js +0 -61
  189. package/build/bdd-framework/playwright/transform.js +0 -88
  190. package/build/bdd-framework/playwright/types.js +0 -5
  191. package/build/bdd-framework/playwright/utils.js +0 -34
  192. package/build/bdd-framework/reporter/cucumber/base.js +0 -57
  193. package/build/bdd-framework/reporter/cucumber/custom.js +0 -73
  194. package/build/bdd-framework/reporter/cucumber/helper.js +0 -12
  195. package/build/bdd-framework/reporter/cucumber/html.js +0 -35
  196. package/build/bdd-framework/reporter/cucumber/index.js +0 -74
  197. package/build/bdd-framework/reporter/cucumber/json.js +0 -312
  198. package/build/bdd-framework/reporter/cucumber/junit.js +0 -205
  199. package/build/bdd-framework/reporter/cucumber/message.js +0 -20
  200. package/build/bdd-framework/reporter/cucumber/messagesBuilder/AttachmentMapper.js +0 -64
  201. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Builder.js +0 -196
  202. package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocument.js +0 -43
  203. package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocumentClone.js +0 -52
  204. package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocuments.js +0 -105
  205. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Hook.js +0 -70
  206. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Meta.js +0 -45
  207. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Pickles.js +0 -27
  208. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Projects.js +0 -38
  209. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCase.js +0 -128
  210. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRun.js +0 -126
  211. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRunHooks.js +0 -102
  212. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepAttachments.js +0 -50
  213. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepRun.js +0 -88
  214. package/build/bdd-framework/reporter/cucumber/messagesBuilder/index.js +0 -30
  215. package/build/bdd-framework/reporter/cucumber/messagesBuilder/pwUtils.js +0 -51
  216. package/build/bdd-framework/reporter/cucumber/messagesBuilder/timing.js +0 -35
  217. package/build/bdd-framework/reporter/cucumber/messagesBuilder/types.js +0 -5
  218. package/build/bdd-framework/run/StepInvoker.js +0 -68
  219. package/build/bdd-framework/run/bddDataAttachment.js +0 -46
  220. package/build/bdd-framework/run/bddFixtures.js +0 -191
  221. package/build/bdd-framework/run/bddWorld.js +0 -79
  222. package/build/bdd-framework/run/bddWorldInternal.js +0 -15
  223. package/build/bdd-framework/snippets/index.js +0 -132
  224. package/build/bdd-framework/snippets/snippetSyntax.js +0 -43
  225. package/build/bdd-framework/snippets/snippetSyntaxDecorators.js +0 -26
  226. package/build/bdd-framework/snippets/snippetSyntaxTs.js +0 -18
  227. package/build/bdd-framework/stepDefinitions/createBdd.js +0 -66
  228. package/build/bdd-framework/stepDefinitions/decorators/class.js +0 -68
  229. package/build/bdd-framework/stepDefinitions/decorators/steps.js +0 -99
  230. package/build/bdd-framework/stepDefinitions/defineStep.js +0 -62
  231. package/build/bdd-framework/stepDefinitions/stepConfig.js +0 -24
  232. package/build/bdd-framework/utils/AutofillMap.js +0 -20
  233. package/build/bdd-framework/utils/exit.js +0 -62
  234. package/build/bdd-framework/utils/index.js +0 -93
  235. package/build/bdd-framework/utils/jsStringWrap.js +0 -44
  236. package/build/bdd-framework/utils/logger.js +0 -30
  237. package/build/bdd-framework/utils/stripAnsiEscapes.js +0 -20
  238. package/build/core/playwright/report-generator.js +0 -42
  239. package/build/core/playwright/tag-processor.js +0 -68
  240. package/build/setup-folder-structure/samples/authUsers-sample.json +0 -9
  241. package/build/setup-folder-structure/samples/env-config-sample.json +0 -21
@@ -9,76 +9,94 @@ var _test = require("@playwright/test");
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
  var _readConfigFile = require("../readConfigFile");
11
11
  var _configUtils = require("./config-utils");
12
- var _bddFramework = require("../../../bdd-framework");
13
- const defaultCIBrowsers = ['Chrome', 'Firefox', 'Edge', 'Safari'];
12
+ var _ProjectConfiguration = require("./ProjectConfiguration");
13
+ var _Reporter = _interopRequireDefault(require("../reporter/Reporter"));
14
+ var _ConfigurationHelper = require("../configuration/ConfigurationHelper");
15
+ var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
16
+ const uatConfig = (0, _readConfigFile.generateConfigFromFile)();
17
+ const stage = (0, _ConfigurationHelper.getRunStage)();
18
+ const proxyConfig = (0, _configUtils.getProxyConfig)();
14
19
  const {
20
+ bddMode,
15
21
  browsers,
16
- trace,
17
- video,
22
+ isSmokeTest,
18
23
  isAuthMode,
19
24
  openReportOn,
20
25
  reportPath,
21
- bddMode,
22
26
  expectTimeout,
23
27
  testTimeout,
24
28
  authFilePath,
25
29
  viewport,
26
- featureFilesFolder,
30
+ globalTimeout,
31
+ customReporter,
32
+ trace,
33
+ video,
34
+ testIdAttribute,
27
35
  stepDefinitionsFolder,
28
- testIdAttribute
29
- } = (0, _readConfigFile.generateConfigFromFile)();
30
- const browserList = process.env.mode === 'ci' ? defaultCIBrowsers : browsers;
36
+ shard
37
+ } = uatConfig;
31
38
  const projects = (0, _configUtils.getProjects)({
32
- browsers: browserList,
39
+ browsers,
33
40
  isAuthMode,
41
+ isSmokeTest,
34
42
  authFilePath,
35
43
  expectTimeout,
36
44
  testTimeout,
37
45
  viewport
38
46
  });
39
- const testDir = (0, _configUtils.getTestDir)(bddMode, process.cwd(), {
40
- featureFilesFolder,
41
- stepDefinitionsFolder
42
- });
43
- const testOptions = (0, _configUtils.getTestUseOptions)({
44
- trace,
45
- video,
46
- viewport,
47
- testIdAttribute
47
+ const reporter = _Reporter.default.getReporterClass(_Reporter.default.resolveType(shard)).getReporter({
48
+ stage,
49
+ shard,
50
+ reportPath,
51
+ openReportOn,
52
+ customReporter
48
53
  });
49
54
 
50
55
  /**
51
56
  * Playwright configuration object
52
57
  *
53
58
  * @returns {import('@playwright/test').PlaywrightTestConfig}
54
- */
59
+ */
60
+
61
+ const use = {
62
+ trace,
63
+ video,
64
+ viewport,
65
+ testIdAttribute,
66
+ ...(proxyConfig ? {
67
+ proxy: proxyConfig
68
+ } : {})
69
+ };
70
+ const testDir = (0, _configUtils.getTestDir)(bddMode, {
71
+ featureFilesFolder: (0, _configUtils.getPathsForFeatureFiles)(process.cwd()),
72
+ stepDefinitionsFolder: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, '**', '**', stepDefinitionsFolder, '*.spec.js'),
73
+ outputDir: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, _configConstants.default.FEATURES_GEN_DIR),
74
+ uatPath: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage)
75
+ });
55
76
  function getPlaywrightConfig() {
56
- return {
77
+ const smokeTestProject = isSmokeTest ? (0, _ProjectConfiguration.smokeTestConfig)() : [];
78
+ const setupProject = isAuthMode ? (0, _ProjectConfiguration.setupConfig)() : [];
79
+ const isTearDown = JSON.parse(process.env.tearDown);
80
+ const cleanupProject = isTearDown ? (0, _ProjectConfiguration.cleanupConfig)() : [];
81
+ const {
82
+ shard: _shard,
83
+ reporter: _reporter,
84
+ ...uatConfigForPlaywright
85
+ } = uatConfig;
86
+ const playwrightConfig = {
57
87
  testDir,
58
- outputDir: _path.default.join(process.cwd(), 'uat', 'test-results'),
88
+ globalTimeout: globalTimeout || 3600000,
89
+ outputDir: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'test-results'),
59
90
  fullyParallel: true,
60
- forbidOnly: !!process.env.CI,
61
- retries: process.env.CI ? 2 : 0,
62
- workers: process.env.CI ? 1 : 1,
63
- reporter: [['html', {
64
- outputFolder: reportPath,
65
- open: openReportOn
66
- }], ['list'], ['./custom-reporter.js']],
67
91
  timeout: testTimeout,
68
92
  expect: {
69
93
  timeout: expectTimeout
70
94
  },
71
- use: testOptions,
72
- projects: isAuthMode ? [{
73
- name: 'setup',
74
- testMatch: /.*\.setup\.js/,
75
- testDir: _path.default.join(process.cwd(), 'uat'),
76
- teardown: 'cleanup'
77
- }, {
78
- name: 'cleanup',
79
- testMatch: /.*\.teardown\.js/,
80
- testDir: _path.default.join(process.cwd(), 'uat')
81
- }, ...projects] : [...projects]
95
+ use,
96
+ projects: [...setupProject, ...smokeTestProject, ...projects, ...cleanupProject],
97
+ ...uatConfigForPlaywright,
98
+ reporter
82
99
  };
100
+ return playwrightConfig;
83
101
  }
84
102
  var _default = exports.default = (0, _test.defineConfig)(getPlaywrightConfig());
@@ -5,24 +5,31 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.getBrowsersList = getBrowsersList;
8
+ exports.getModulePathForFeatureFiles = getModulePathForFeatureFiles;
9
+ exports.getPathsForFeatureFiles = getPathsForFeatureFiles;
8
10
  exports.getProjects = getProjects;
11
+ exports.getProxyConfig = getProxyConfig;
9
12
  exports.getTestDir = getTestDir;
10
- exports.getTestUseOptions = getTestUseOptions;
11
13
  var _test = require("@playwright/test");
12
14
  var _path = _interopRequireDefault(require("path"));
13
15
  var _readConfigFile = require("../readConfigFile");
14
- var _bddFramework = require("../../../bdd-framework");
16
+ var _playwrightBdd = require("playwright-bdd");
15
17
  var _logger = require("../../../utils/logger");
16
18
  var _browserTypes = require("../constants/browserTypes");
17
- var _configFileNameProvider = require("../helpers/configFileNameProvider");
19
+ var _browserTimeoutFactor = require("../helpers/browserTimeoutFactor");
18
20
  var _fileUtils = require("../../../utils/fileUtils");
21
+ var _ConfigurationHelper = require("../configuration/ConfigurationHelper");
22
+ var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
19
23
  /**
20
24
  ** Playwright project configuration
21
25
  * @returns {import('@playwright/test').Project}
22
26
  */
27
+
28
+ const stage = (0, _ConfigurationHelper.getRunStage)();
23
29
  function getBrowserConfig({
24
30
  browserName,
25
31
  isAuthMode,
32
+ isSmokeTest,
26
33
  authFilePath,
27
34
  expectTimeout,
28
35
  testTimeout,
@@ -33,7 +40,9 @@ function getBrowserConfig({
33
40
  viewport,
34
41
  storageState: isAuthMode ? (0, _readConfigFile.getAuthFilePath)(_path.default.resolve(process.cwd(), authFilePath)) : {}
35
42
  };
36
- const dependencies = isAuthMode ? ['setup'] : [];
43
+ // Determine dependencies based on the mode and smoke test status
44
+ let dependencies = isAuthMode ? ['setup'] : [];
45
+ dependencies = isSmokeTest ? [...dependencies, 'smokeTest'] : dependencies;
37
46
  if (browser === 'chrome') {
38
47
  return {
39
48
  name: _browserTypes.BROWSER_PROJECT_MAPPING.CHROME,
@@ -62,11 +71,12 @@ function getBrowserConfig({
62
71
  dependencies
63
72
  };
64
73
  } else if (browser === 'firefox') {
74
+ const factor = (0, _browserTimeoutFactor.getBrowserTimeoutFactor)(_browserTypes.BROWSER_PROJECT_MAPPING.FIREFOX);
65
75
  return {
66
76
  name: _browserTypes.BROWSER_PROJECT_MAPPING.FIREFOX,
67
- timeout: 2 * testTimeout,
77
+ timeout: factor * testTimeout,
68
78
  expect: {
69
- timeout: 2 * expectTimeout
79
+ timeout: factor * expectTimeout
70
80
  },
71
81
  use: {
72
82
  ..._test.devices['Desktop Firefox'],
@@ -75,11 +85,12 @@ function getBrowserConfig({
75
85
  dependencies
76
86
  };
77
87
  } else if (browser === 'safari') {
88
+ const factor = (0, _browserTimeoutFactor.getBrowserTimeoutFactor)(_browserTypes.BROWSER_PROJECT_MAPPING.SAFARI);
78
89
  return {
79
90
  name: _browserTypes.BROWSER_PROJECT_MAPPING.SAFARI,
80
- timeout: 4 * testTimeout,
91
+ timeout: factor * testTimeout,
81
92
  expect: {
82
- timeout: 4 * expectTimeout
93
+ timeout: factor * expectTimeout
83
94
  },
84
95
  use: {
85
96
  ..._test.devices['Desktop Safari'],
@@ -100,6 +111,7 @@ function getBrowserConfig({
100
111
  function getProjects({
101
112
  browsers,
102
113
  isAuthMode,
114
+ isSmokeTest,
103
115
  authFilePath,
104
116
  expectTimeout,
105
117
  testTimeout,
@@ -108,6 +120,7 @@ function getProjects({
108
120
  return browsers.map(browserName => getBrowserConfig({
109
121
  browserName,
110
122
  isAuthMode,
123
+ isSmokeTest,
111
124
  authFilePath,
112
125
  expectTimeout,
113
126
  testTimeout,
@@ -136,42 +149,60 @@ function getPathsForFeatureFiles(cwd) {
136
149
  const {
137
150
  failed = []
138
151
  } = JSON.parse(testSummary);
139
- const casesToRun = failed.map(filePath => _path.default.join(cwd, 'uat', filePath.replace(/\.spec\.js$|\.js$/, '')));
152
+ const casesToRun = failed.map(filePath => _path.default.join(cwd, _configConstants.default.TEST_SLICE_FOLDER, filePath.replace(/\.spec\.js$|\.js$/, '')));
153
+ ;
140
154
  return casesToRun;
141
155
  } else {
142
156
  _logger.Logger.log(_logger.Logger.INFO_TYPE, `Unable to read test summary from the ${reportPath}. Verify If File Exists in the path`);
143
157
  _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Going to run all test cases');
144
158
  }
159
+ } else if (process.env.modules !== 'undefined' && process.env.modules.length > 0) {
160
+ let modules = process.env.modules;
161
+ let moduleList = modules.split(',');
162
+ return getModulePathForFeatureFiles(moduleList);
145
163
  }
146
- return [_path.default.join(cwd, 'uat', '**', '*.feature')];
164
+ return [_path.default.join(cwd, _configConstants.default.TEST_SLICE_FOLDER, stage, 'modules', '**', 'feature-files', '*.feature')];
147
165
  }
148
- function getTestDir(bddMode, cwd, {
149
- stepDefinitionsFolder
150
- }) {
151
- return bddMode ? (0, _bddFramework.defineBddConfig)({
152
- paths: getPathsForFeatureFiles(cwd),
153
- import: [_path.default.join(cwd, 'uat', '**', stepDefinitionsFolder, '*.spec.js')],
154
- featuresRoot: _path.default.join(cwd, 'uat'),
155
- outputDir: _path.default.join(cwd, 'uat', '.features-gen'),
156
- publish: true
157
- }) : _path.default.join(cwd, 'uat');
166
+ function getModulePathForFeatureFiles(moduleList) {
167
+ let validModuleList = [];
168
+ moduleList.forEach(moduleName => {
169
+ let modulePath = _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, '**', 'modules', '**', `${moduleName}`);
170
+ if ((0, _fileUtils.checkIfFolderExistsWithPattern)(modulePath)) {
171
+ validModuleList.push(_path.default.join(modulePath, '**', '*.feature'));
172
+ } else {
173
+ validModuleList = [];
174
+ throw new Error(`Module ${moduleName} does not exist. We have not triggered the execution for this module`);
175
+ }
176
+ });
177
+ return validModuleList;
158
178
  }
159
- function getTestUseOptions({
160
- viewport,
161
- trace,
162
- video,
163
- testIdAttribute
179
+
180
+ // Node's fetch (undici) does not honor HTTP_PROXY/HTTPS_PROXY, which breaks calls to internal
181
+ // hosts only reachable through the corporate proxy. Reading it here lets callers pass it into
182
+ // Playwright's browser contexts and their `request`/`page.request` API contexts.
183
+ function getProxyConfig() {
184
+ const proxyServer = process.env.HTTPS_PROXY || process.env.https_proxy || process.env.HTTP_PROXY || process.env.http_proxy;
185
+ const noProxy = process.env.NO_PROXY || process.env.no_proxy;
186
+ return proxyServer ? {
187
+ server: proxyServer,
188
+ bypass: noProxy
189
+ } : undefined;
190
+ }
191
+ function getTestDir(bddMode, {
192
+ featureFilesFolder,
193
+ stepDefinitionsFolder,
194
+ outputDir,
195
+ uatPath
164
196
  }) {
165
- let defaultTestuseOptions = {
166
- viewport,
167
- testIdAttribute,
168
- trace: trace ? 'on' : 'off',
169
- video: video ? {
170
- mode: 'on',
171
- size: {
172
- ...viewport
173
- }
174
- } : 'off'
175
- };
176
- return defaultTestuseOptions;
197
+ return bddMode ? (0, _playwrightBdd.defineBddConfig)({
198
+ features: featureFilesFolder,
199
+ steps: [stepDefinitionsFolder, require.resolve('../fixtures.js')],
200
+ importTestFrom: require.resolve('../fixtures.js'),
201
+ featuresRoot: uatPath,
202
+ outputDir: outputDir,
203
+ disableWarnings: {
204
+ importTestFrom: true
205
+ },
206
+ publish: true
207
+ }) : uatPath;
177
208
  }
@@ -11,6 +11,35 @@ var _fileUtils = require("../../../utils/fileUtils");
11
11
  var _readConfigFile = require("../readConfigFile");
12
12
  var _logger = require("../../../utils/logger");
13
13
  var _configFileNameProvider = require("../helpers/configFileNameProvider");
14
+ var _mergeAbortedTests = _interopRequireDefault(require("../reporter/helpers/mergeAbortedTests"));
15
+ var _reporterConstants = _interopRequireDefault(require("../constants/reporterConstants"));
16
+ // Traverse the suite tree upward until we reach the project-level suite
17
+ function getProjectName(test) {
18
+ let suite = test.parent;
19
+ while (suite) {
20
+ var _suite$project, _suite;
21
+ const name = (_suite$project = (_suite = suite).project) === null || _suite$project === void 0 || (_suite$project = _suite$project.call(_suite)) === null || _suite$project === void 0 ? void 0 : _suite$project.name;
22
+ if (name) return name;
23
+ suite = suite.parent;
24
+ }
25
+ return '';
26
+ }
27
+ function formatTime(date) {
28
+ return date.toLocaleTimeString('en-US', {
29
+ hour: 'numeric',
30
+ minute: '2-digit',
31
+ second: '2-digit',
32
+ hour12: true
33
+ });
34
+ }
35
+ function formatDuration(ms) {
36
+ if (ms < 1000) return `${ms}ms`;
37
+ const totalSeconds = ms / 1000;
38
+ if (totalSeconds < 60) return `${totalSeconds.toFixed(2)}s`;
39
+ const minutes = Math.floor(totalSeconds / 60);
40
+ const seconds = (totalSeconds - minutes * 60).toFixed(2);
41
+ return `${minutes}m ${seconds}s`;
42
+ }
14
43
  class JSONSummaryReporter {
15
44
  constructor() {
16
45
  this.durationInMS = -1;
@@ -18,18 +47,31 @@ class JSONSummaryReporter {
18
47
  this.skipped = [];
19
48
  this.failed = [];
20
49
  this.warned = [];
50
+ this.errored = [];
21
51
  this.interrupted = [];
22
52
  this.timedOut = [];
23
53
  this.flakey = [];
24
54
  this.failedSteps = [];
25
55
  this.status = 'unknown';
26
56
  this.startedAt = 0;
27
- this._open = (0, _readConfigFile.generateConfigFromFile)().openReportOn;
57
+ const config = (0, _readConfigFile.generateConfigFromFile)();
58
+ this._open = config.openReportOn;
59
+ this._showCaseTimings = config.showCaseTimings !== false;
60
+ this._caseTimings = [];
61
+ this.failedProject = null;
28
62
  }
29
63
  onBegin() {
30
64
  this.startedAt = Date.now();
31
65
  }
32
- onTestEnd(test, result) {
66
+ onTestBegin(test) {
67
+ if (!this._showCaseTimings) return;
68
+ const {
69
+ fullTitle
70
+ } = this.getTitle(test);
71
+ const startedAtLabel = formatTime(new Date());
72
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `▶ ${fullTitle} — started at ${startedAtLabel}`);
73
+ }
74
+ getTitle(test) {
33
75
  const title = [];
34
76
  const fileName = [];
35
77
  let clean = true;
@@ -39,35 +81,93 @@ class JSONSummaryReporter {
39
81
  }
40
82
  clean = false;
41
83
  title.push(s);
42
- if (s.includes('.ts') || s.includes('.js')) {
84
+ if (s.endsWith('.ts') || s.endsWith('.js')) {
43
85
  fileName.push(s);
44
86
  }
45
87
  }
46
- // This will publish the file name + line number test begins on
47
- const z = `${fileName[0]}`;
48
- // Using the t variable in the push will push a full test name + test description
49
- const t = title.join(' > ');
88
+
89
+ //Using the fullTitle variable in the push will push a full test name + test description
90
+
91
+ return {
92
+ fullTitle: title.join(' > '),
93
+ fileName: fileName[0] || ''
94
+ };
95
+ }
96
+ onTestEnd(test, result) {
97
+ const {
98
+ fullTitle,
99
+ fileName
100
+ } = this.getTitle(test);
101
+
50
102
  // Set the status
51
- const stepTitleList = result.steps.map(step => ({
103
+ const stepTitleList = result.steps.filter(step => step.error).map(step => ({
52
104
  title: step.title,
53
105
  error: step.error,
54
- testTitle: t
55
- })).filter(step => step.error !== undefined);
106
+ testTitle: fullTitle
107
+ }));
56
108
  if (stepTitleList.length > 0) {
57
109
  this.failedSteps = [...this.failedSteps, ...stepTitleList];
58
110
  }
59
- const status = !['passed', 'skipped'].includes(result.status) && t.includes('@warn') ? 'warned' : result.status;
111
+ const status = !['passed', 'skipped'].includes(result.status) && fullTitle.includes('@warn') ? 'warned' : result.status;
60
112
  // Logic to push the results into the correct array
61
113
  if (result.status === 'passed' && result.retry >= 1) {
62
- this.flakey.push(z);
114
+ this.flakey.push(fileName);
63
115
  } else {
64
- this[status].push(z);
116
+ this[status].push(fileName);
117
+ }
118
+ this[status].push(fileName);
119
+ if (this._showCaseTimings && result.startTime) {
120
+ const startDate = new Date(result.startTime);
121
+ const endDate = new Date(startDate.getTime() + (result.duration || 0));
122
+ const startLabel = formatTime(startDate);
123
+ const endLabel = formatTime(endDate);
124
+ const durationLabel = formatDuration(result.duration || 0);
125
+ const statusGlyph = result.status === 'passed' ? '✓' : result.status === 'skipped' ? '○' : '✗';
126
+ const logType = result.status === 'passed' ? _logger.Logger.SUCCESS_TYPE : result.status === 'skipped' ? _logger.Logger.INFO_TYPE : _logger.Logger.FAILURE_TYPE;
127
+ _logger.Logger.log(logType, `${statusGlyph} ${fullTitle} — ended at ${endLabel} (started ${startLabel}, took ${durationLabel})`);
128
+ const isFailure = result.status !== 'passed' && result.status !== 'skipped';
129
+ if (isFailure) {
130
+ var _result$error;
131
+ this._caseTimings.push({
132
+ title: fullTitle,
133
+ fileName,
134
+ status: result.status,
135
+ retry: result.retry,
136
+ startTime: startDate.toISOString(),
137
+ endTime: endDate.toISOString(),
138
+ startTimeFormatted: startLabel,
139
+ endTimeFormatted: endLabel,
140
+ duration: result.duration || 0,
141
+ durationFormatted: durationLabel,
142
+ errorMessage: (_result$error = result.error) === null || _result$error === void 0 ? void 0 : _result$error.message,
143
+ failedSteps: (result.steps || []).filter(step => step.error).map(step => {
144
+ var _step$error;
145
+ return {
146
+ title: step.title,
147
+ error: (_step$error = step.error) === null || _step$error === void 0 ? void 0 : _step$error.message
148
+ };
149
+ })
150
+ });
151
+ }
152
+ }
153
+ const isFailure = result.status !== 'passed' && result.status !== 'skipped';
154
+ if (isFailure && !this.failedProject) {
155
+ const projectName = getProjectName(test);
156
+ if (projectName) {
157
+ this.failedProject = projectName;
158
+ }
65
159
  }
66
- this[status].push(z);
160
+ }
161
+ onError(error) {
162
+ this.errored.push({
163
+ error: error.message,
164
+ stack: error.stack
165
+ });
67
166
  }
68
167
  onEnd(result) {
69
168
  this.durationInMS = Date.now() - this.startedAt;
70
169
  this.status = result.status;
170
+
71
171
  // removing duplicate tests from passed array
72
172
  this.passed = this.passed.filter((element, index) => {
73
173
  return this.passed.indexOf(element) === index;
@@ -90,13 +190,36 @@ class JSONSummaryReporter {
90
190
  this.interrupted = this.interrupted.filter((element, index) => {
91
191
  return this.interrupted.indexOf(element) === index;
92
192
  });
193
+ this.errored = this.errored.filter((element, index) => {
194
+ return this.errored.indexOf(element) === index;
195
+ });
196
+ if (this.errored.length > 0) {
197
+ // Reflect setup failures in the final report status
198
+ this.status = "failed";
199
+ }
200
+ if (this.failedProject && _reporterConstants.default.PROJECT_FAILURE_REASON_MAP[this.failedProject]) {
201
+ this.failureReason = _reporterConstants.default.PROJECT_FAILURE_REASON_MAP[this.failedProject];
202
+ }
203
+
93
204
  // fs.writeFileSync('./summary.json', JSON.stringify(this, null, ' '));
94
205
  let {
95
206
  reportPath
96
207
  } = (0, _readConfigFile.generateConfigFromFile)();
97
208
  (0, _fileUtils.writeFileContents)(_path.default.join(reportPath, './', (0, _configFileNameProvider.getReportFileName)()), JSON.stringify(this, null, ' '));
209
+ if (this._showCaseTimings && this._caseTimings.length > 0) {
210
+ const timingsPayload = {
211
+ suiteStartedAt: new Date(this.startedAt).toISOString(),
212
+ suiteEndedAt: new Date(this.startedAt + this.durationInMS).toISOString(),
213
+ suiteDurationMs: this.durationInMS,
214
+ failedCount: this._caseTimings.length,
215
+ cases: this._caseTimings
216
+ };
217
+ (0, _fileUtils.writeFileContents)(_path.default.join(reportPath, 'case-timings.json'), JSON.stringify(timingsPayload, null, ' '));
218
+ }
98
219
  }
99
220
  onExit() {
221
+ // Update .last-run.json with aborted tests due to timing out or interruption
222
+ (0, _mergeAbortedTests.default)();
100
223
  const shouldClearLastLine = this._open !== 'always' || this._open !== 'on-failure';
101
224
  if (shouldClearLastLine) {
102
225
  /**Below code is to replace the playwright default report commond with abstraction tool command */
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _test = require("@playwright/test");
9
+ var _readConfigFile = require("../readConfigFile");
10
+ var _PlaywrightReporter = _interopRequireDefault(require("../reporter/PlaywrightReporter"));
11
+ var _ConfigurationHelper = require("../configuration/ConfigurationHelper");
12
+ const {
13
+ openReportOn,
14
+ reportPath,
15
+ customReporter
16
+ } = (0, _readConfigFile.generateConfigFromFile)();
17
+ const stage = (0, _ConfigurationHelper.getRunStage)();
18
+
19
+ /**
20
+ * Configuration used by `playwright merge-reports`. Only the reporters are read
21
+ * from here, the shard blob reports already carry the test results.
22
+ *
23
+ * @returns {import('@playwright/test').PlaywrightTestConfig}
24
+ */
25
+ var _default = exports.default = (0, _test.defineConfig)({
26
+ reporter: _PlaywrightReporter.default.getReporter({
27
+ stage,
28
+ reportPath,
29
+ openReportOn,
30
+ customReporter
31
+ })
32
+ });