@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
@@ -0,0 +1,58 @@
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 _path = _interopRequireDefault(require("path"));
9
+ var _rootPath = require("../../../utils/rootPath");
10
+ var _readConfigFile = require("../readConfigFile");
11
+ var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
12
+ var _spawnInheritChild = require("../spawnInheritChild");
13
+ var _Reporter = _interopRequireDefault(require("./Reporter"));
14
+ // The framework reporters live next to the playwright configs, they are resolved
15
+ // from here because this module no longer sits in the same folder as them.
16
+ const SETUP_DIR = _path.default.resolve(__dirname, '..', 'setup');
17
+ class PlaywrightReporter extends _Reporter.default {
18
+ static getType() {
19
+ return _Reporter.default.TYPES.PLAYWRIGHT;
20
+ }
21
+
22
+ /**
23
+ * Reporters used by a full run and by the merge of the shard blob reports.
24
+ *
25
+ * @returns {import('@playwright/test').PlaywrightTestConfig['reporter']}
26
+ */
27
+ static getReporter({
28
+ stage,
29
+ reportPath,
30
+ openReportOn,
31
+ customReporter
32
+ }) {
33
+ const reporter = [['html', {
34
+ outputFolder: reportPath,
35
+ open: openReportOn
36
+ }], ['list'], ['json', {
37
+ outputFile: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'test-results', 'playwright-test-results.json')
38
+ }], [_path.default.join(SETUP_DIR, 'custom-reporter.js')], [_path.default.join(SETUP_DIR, 'qc-custom-reporter.js')]];
39
+ if (customReporter) {
40
+ return [customReporter, ...reporter];
41
+ }
42
+ return reporter;
43
+ }
44
+ static generate() {
45
+ const userArgs = process.argv.slice(3);
46
+ const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
47
+ const command = playwrightPath;
48
+ const {
49
+ reportPath: htmlPath
50
+ } = (0, _readConfigFile.generateConfigFromFile)();
51
+ const args = ['show-report', htmlPath].concat(userArgs);
52
+ (0, _spawnInheritChild.spawnInheritChild)(command, args, {
53
+ exitOnSuccess: true,
54
+ killOnParentExit: true
55
+ });
56
+ }
57
+ }
58
+ exports.default = PlaywrightReporter;
@@ -0,0 +1,65 @@
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 _path = _interopRequireDefault(require("path"));
9
+ var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
10
+ // Playwright accepts the shard as `current/total`. Anything else (a bare `--shard`
11
+ // flag, for instance) is not a shard run and must keep the default reporters.
12
+ const SHARD_PATTERN = /^\d+\/\d+$/;
13
+ const REPORTER_TYPES = {
14
+ PLAYWRIGHT: 'playwright',
15
+ SHARD: 'shard'
16
+ };
17
+
18
+ /**
19
+ * Base of the report modes. Every mode exposes `getType()` and `getReporter(config)`,
20
+ * `merge()` is implemented by the shard mode alone.
21
+ */
22
+ class Reporter {
23
+ static get TYPES() {
24
+ return REPORTER_TYPES;
25
+ }
26
+ static isShardedRun(shard) {
27
+ return typeof shard === 'string' && SHARD_PATTERN.test(shard);
28
+ }
29
+ static getBlobReportDir(stage) {
30
+ return _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'blob-report');
31
+ }
32
+
33
+ /**
34
+ * Resolves the report mode to use for a run.
35
+ *
36
+ * @returns {string} one of {@link REPORTER_TYPES}
37
+ */
38
+ static resolveType(shard) {
39
+ return Reporter.isShardedRun(shard) ? REPORTER_TYPES.SHARD : REPORTER_TYPES.PLAYWRIGHT;
40
+ }
41
+
42
+ /**
43
+ * Factory of the report modes. The modes are required lazily because they
44
+ * extend this class, a top level import would leave the class undefined.
45
+ *
46
+ * @returns {typeof Reporter}
47
+ */
48
+ static getReporterClass(type) {
49
+ switch (type) {
50
+ case REPORTER_TYPES.PLAYWRIGHT:
51
+ return require('./PlaywrightReporter').default;
52
+ case REPORTER_TYPES.SHARD:
53
+ return require('./ShardReporter').default;
54
+ default:
55
+ throw new Error(`Unknown reporter type "${type}"`);
56
+ }
57
+ }
58
+ static getType() {
59
+ throw new Error('getType() has to be implemented by the reporter');
60
+ }
61
+ static merge() {
62
+ throw new Error('merge() is supported by the shard reporter alone');
63
+ }
64
+ }
65
+ exports.default = Reporter;
@@ -0,0 +1,58 @@
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 _fs = require("fs");
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _logger = require("../../../utils/logger");
11
+ var _rootPath = require("../../../utils/rootPath");
12
+ var _ConfigurationHelper = require("../configuration/ConfigurationHelper");
13
+ var _UserArgs = _interopRequireDefault(require("../configuration/UserArgs"));
14
+ var _spawnInheritChild = require("../spawnInheritChild");
15
+ var _Reporter = _interopRequireDefault(require("./Reporter"));
16
+ class ShardReporter extends _Reporter.default {
17
+ static getType() {
18
+ return _Reporter.default.TYPES.SHARD;
19
+ }
20
+
21
+ /**
22
+ * A shard only records its results as a blob. The report files are written once
23
+ * by `ZDTestingFramework merge-reports`, so the shards do not overwrite them.
24
+ *
25
+ * @returns {import('@playwright/test').PlaywrightTestConfig['reporter']}
26
+ */
27
+ static getReporter({
28
+ stage,
29
+ shard
30
+ }) {
31
+ return [['blob', {
32
+ outputDir: _Reporter.default.getBlobReportDir(stage),
33
+ fileName: `report-${shard.replace('/', '-')}.zip`
34
+ }], ['list']];
35
+ }
36
+ static merge() {
37
+ // `merge-reports` is its own CLI command, so nothing has resolved the stage yet.
38
+ // It is resolved once here and exported before the spawn, because the playwright
39
+ // child reads it back through getRunStage() while loading merge-config.js.
40
+ const stage = _UserArgs.default.parseToObject(process.argv.slice(2)).stage || (0, _ConfigurationHelper.getRunStage)();
41
+ process.env.stage = stage;
42
+ const blobReportDir = _Reporter.default.getBlobReportDir(stage);
43
+ if (!(0, _fs.existsSync)(blobReportDir)) {
44
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `No blob reports found at ${blobReportDir} for stage "${stage}". Run the tests with --shard first (Usage: -- --shard=1/4)`);
45
+ process.exit(1);
46
+ }
47
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Merging blob reports from ${blobReportDir}`);
48
+ const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
49
+ const command = playwrightPath;
50
+ const configPath = _path.default.resolve(__dirname, '../', 'setup', 'merge-config.js');
51
+ const args = ['merge-reports', blobReportDir, '--config', require.resolve(configPath)];
52
+ (0, _spawnInheritChild.spawnInheritChild)(command, args, {
53
+ successMessage: 'Blob Reports Merged Successfully',
54
+ exitOnSuccess: true
55
+ });
56
+ }
57
+ }
58
+ exports.default = ShardReporter;
@@ -0,0 +1,27 @@
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 _child_process = require("child_process");
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _os = require("os");
11
+ var _logger = require("../../../utils/logger");
12
+ var _reporterConstants = _interopRequireDefault(require("../constants/reporterConstants"));
13
+ class UnitReporter {
14
+ static generate() {
15
+ const reportPath = _path.default.resolve(process.cwd(), _reporterConstants.default.DEFAULT_UNIT_TEST_REPORTER_PATH);
16
+ _logger.Logger.log(_logger.Logger.SUCCESS_TYPE, `Opening unit test report: ${reportPath}`);
17
+ const os = (0, _os.platform)();
18
+ const openCommand = os === 'darwin' ? 'open' : os === 'win32' ? 'start' : 'xdg-open';
19
+ (0, _child_process.execFile)(openCommand, [reportPath], error => {
20
+ if (error) {
21
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to open report: ${error.message}`);
22
+ }
23
+ process.exit();
24
+ });
25
+ }
26
+ }
27
+ exports.default = UnitReporter;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = mergeAbortedTestsIntoLastRun;
8
+ var _fs = _interopRequireDefault(require("fs"));
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _logger = require("../../../../utils/logger");
11
+ var _fileUtils = require("../../../../utils/fileUtils");
12
+ var _reporterConstants = _interopRequireDefault(require("../../constants/reporterConstants"));
13
+ function mergeAbortedTestsIntoLastRun() {
14
+ let resultsFile = _path.default.resolve(process.cwd(), _reporterConstants.default.DEFAULT_REPORTER_PATH),
15
+ lastRunFile = _path.default.resolve(process.cwd(), _reporterConstants.default.LAST_RUN_REPORTER_PATH);
16
+ try {
17
+ let report;
18
+ try {
19
+ report = JSON.parse(_fs.default.readFileSync(resultsFile, 'utf-8'));
20
+ } catch (e) {
21
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to parse results file: ${resultsFile}`, e);
22
+ return;
23
+ }
24
+ const abortedTests = collectAbortedSpecIds(report);
25
+ let lastRunData = {
26
+ status: 'passed',
27
+ failedTests: []
28
+ };
29
+ if (_fs.default.existsSync(lastRunFile)) {
30
+ try {
31
+ const parsed = JSON.parse(_fs.default.readFileSync(lastRunFile, 'utf-8'));
32
+ lastRunData.status = parsed.status || lastRunData.status;
33
+ lastRunData.failedTests = Array.isArray(parsed.failedTests) ? parsed.failedTests : [];
34
+ } catch (e) {
35
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to parse existing last-run file: ${lastRunFile}`, e);
36
+ }
37
+ }
38
+
39
+ // Merge existing failed tests + aborted tests
40
+ const failedSet = new Set(lastRunData.failedTests);
41
+ for (const id of abortedTests) {
42
+ failedSet.add(id);
43
+ }
44
+ lastRunData.failedTests = [...failedSet];
45
+ lastRunData.status = failedSet.size > 0 ? 'failed' : lastRunData.status;
46
+ (0, _fileUtils.writeFileContents)(lastRunFile, JSON.stringify(lastRunData, null, 2));
47
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Updated ${abortedTests.size} aborted tests in .last-run.json file \n`);
48
+ return lastRunData;
49
+ } catch (err) {
50
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Error updating .last-run.json: ${err.message}`);
51
+ }
52
+ }
53
+ function collectAbortedSpecIds(report) {
54
+ const aborted = new Set();
55
+ if (!Array.isArray(report.suites)) {
56
+ return aborted;
57
+ }
58
+ const isAbortedSpec = spec => {
59
+ var _spec$tests;
60
+ const tags = Array.isArray(spec.tags) ? spec.tags : [];
61
+ return (_spec$tests = spec.tests) === null || _spec$tests === void 0 ? void 0 : _spec$tests.some(t => !tags.includes('skip') && t.projectName === 'chromium' && t.status === 'skipped');
62
+ };
63
+ const testResultsObj = report.suites;
64
+ while (testResultsObj.length > 0) {
65
+ const suite = testResultsObj.pop();
66
+ if (Array.isArray(suite.specs)) {
67
+ for (const spec of suite.specs) {
68
+ if (spec && isAbortedSpec(spec)) {
69
+ aborted.add(spec.id);
70
+ }
71
+ }
72
+ }
73
+ if (Array.isArray(suite.suites)) {
74
+ for (const child of suite.suites) testResultsObj.push(child);
75
+ }
76
+ }
77
+ return aborted;
78
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ class Runner {
4
+ constructor(config) {
5
+ this.tagArgs = "";
6
+ this.userArgs = "";
7
+ this.config = config;
8
+ }
9
+ setUserArgs(userArgs) {
10
+ this.userArgs = userArgs;
11
+ }
12
+ setTagArgs(tagArgs) {
13
+ this.tagArgs = tagArgs;
14
+ }
15
+ setConfig(config) {
16
+ this.config = config;
17
+ }
18
+ run() {
19
+ throw new Error("Method 'run()' must be implemented.");
20
+ }
21
+ }
22
+ module.exports = Runner;
@@ -0,0 +1,43 @@
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 _RunnerTypes = _interopRequireDefault(require("./RunnerTypes"));
9
+ var _configUtils = require("../setup/config-utils");
10
+ var _cliArgsToObject = require("../../../utils/cliArgsToObject");
11
+ var _browserTypes = require("../constants/browserTypes");
12
+ var _customCommands = require("../custom-commands");
13
+ class RunnerHelper {
14
+ static createRunner(type, runnerObj) {
15
+ const runnerClass = _RunnerTypes.default.getRunnerClass(type, runnerObj);
16
+ if (!runnerClass) {
17
+ throw new Error("Invalid runner type");
18
+ }
19
+ return runnerClass;
20
+ }
21
+ static getPlaywrightArgs(userArgsObject, debug, bddMode, tagArgs, headless) {
22
+ const {
23
+ browsers = null
24
+ } = userArgsObject;
25
+ let browserList = (0, _configUtils.getBrowsersList)(browsers);
26
+ const playwrightArgs = (0, _cliArgsToObject.objectToCliArgs)(userArgsObject, key => !_customCommands.CUSTOM_COMMANDS.includes(key));
27
+ if (debug) {
28
+ playwrightArgs.push('--debug');
29
+ }
30
+ if (!bddMode && tagArgs) {
31
+ playwrightArgs.push('--grep');
32
+ playwrightArgs.push(tagArgs);
33
+ }
34
+ if (!headless && !userArgsObject.headed) {
35
+ playwrightArgs.push('--headed');
36
+ }
37
+ if (browserList && browserList.length > 0) {
38
+ browserList.map(browser => playwrightArgs.push(`--project=${_browserTypes.BROWSER_PROJECT_MAPPING[browser.toUpperCase()]}`));
39
+ }
40
+ return playwrightArgs;
41
+ }
42
+ }
43
+ var _default = exports.default = RunnerHelper;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _SpawnRunner = _interopRequireDefault(require("./SpawnRunner"));
5
+ class RunnerTypes {
6
+ static getRunnerClass(type, runnerObj) {
7
+ const RunnerClass = this.runnerTypes[type];
8
+ if (!RunnerClass) {
9
+ throw new Error("Invalid runner type");
10
+ }
11
+ return new RunnerClass(runnerObj);
12
+ }
13
+ static runnerTypes = {
14
+ spawn: _SpawnRunner.default //require("./SpawnRunner"), // used lazy loading to reduce circular dependencies
15
+ };
16
+ }
17
+ module.exports = RunnerTypes;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _readConfigFile = require("../readConfigFile");
5
+ var _rootPath = require("../../../utils/rootPath");
6
+ var _path = _interopRequireDefault(require("path"));
7
+ var _logger = require("../../../utils/logger");
8
+ var _spawnInheritChild = require("../spawnInheritChild");
9
+ var _RunnerHelper = _interopRequireDefault(require("./RunnerHelper"));
10
+ var _Runner = _interopRequireDefault(require("./Runner"));
11
+ var _commonUtils = require("../../../utils/commonUtils");
12
+ var _retryConstants = require("../../playwright/constants/retryConstants");
13
+ class SpawnRunner extends _Runner.default {
14
+ constructor(runnerObj) {
15
+ super(runnerObj);
16
+ this.runnerObj = runnerObj;
17
+ }
18
+ run() {
19
+ const {
20
+ config
21
+ } = this.runnerObj;
22
+ let promises = [];
23
+ const {
24
+ bddMode
25
+ } = config.getAll();
26
+ if (bddMode) {
27
+ promises.push(this.runPreprocessingWithRetry());
28
+ }
29
+ Promise.all(promises).then(() => this.runPlaywright()).catch(err => {
30
+ _logger.Logger.error(err);
31
+ process.exit(1);
32
+ });
33
+ }
34
+
35
+ // This below Retry wrapper function for preprocessing the feature files Missing Step Definitions Issue
36
+
37
+ async runPreprocessingWithRetry(maxRetries = _retryConstants.PREPROCESSING_RETRY_MAX_ATTEMPTS, delayMs = _retryConstants.PREPROCESSING_RETRY_DELAY_MS) {
38
+ for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {
39
+ try {
40
+ await this.runPreprocessing();
41
+ return;
42
+ } catch (err) {
43
+ if (attempt > maxRetries) {
44
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Preprocessing failed after ${attempt} attempts`);
45
+ throw err;
46
+ }
47
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Preprocessing failed (attempt ${attempt} of ${maxRetries + 1}). Retrying in ${delayMs}ms...`);
48
+ await new Promise(resolve => setTimeout(resolve, delayMs));
49
+ }
50
+ }
51
+ }
52
+ runPreprocessing() {
53
+ //This below functoin is called to copy the data generator spec files to the current project
54
+ (0, _commonUtils.copyCommonSpecs)();
55
+ const {
56
+ tagArgs
57
+ } = this.runnerObj;
58
+ const configPath = (0, _readConfigFile.isUserConfigFileAvailable)() ? _path.default.resolve(__dirname, '../', 'setup', 'config-creator.js') : _path.default.resolve(__dirname, '../', '../', '../', '../', 'playwrightConfig.js');
59
+ const beforeCommand = 'node';
60
+ const bddGenPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('bddgen'));
61
+ const beforeArgs = [bddGenPath, '-c', require.resolve(configPath)];
62
+ if (tagArgs) {
63
+ beforeArgs.push('--tags');
64
+ beforeArgs.push(tagArgs);
65
+ }
66
+ return (0, _spawnInheritChild.spawnInheritChild)(beforeCommand, beforeArgs, {
67
+ successMessage: 'Feature Files Processed Successfully',
68
+ failureMessage: code => `BddGen exited with code ${code}`
69
+ });
70
+ }
71
+ runPlaywright() {
72
+ const {
73
+ tagArgs,
74
+ config,
75
+ userArgs
76
+ } = this.runnerObj;
77
+ const {
78
+ debug,
79
+ bddMode = false,
80
+ headless = false
81
+ } = config.getAll();
82
+ const playwrightArgs = _RunnerHelper.default.getPlaywrightArgs(userArgs, debug, bddMode, tagArgs, headless);
83
+ const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
84
+ const command = playwrightPath;
85
+ const configPath = (0, _readConfigFile.isUserConfigFileAvailable)() ? _path.default.resolve(__dirname, '../', 'setup', 'config-creator.js') : _path.default.resolve('../', '../', '../', '../', 'playwrightConfig.js');
86
+ const args = ['test', '--config', require.resolve(configPath)].concat(playwrightArgs);
87
+ return (0, _spawnInheritChild.spawnInheritChild)(command, args, {
88
+ successMessage: 'Test Ran Successfully',
89
+ killOnParentExit: true
90
+ });
91
+ }
92
+ }
93
+ module.exports = SpawnRunner;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ class Project {
4
+ constructor(name) {
5
+ this.properties = {};
6
+ this.properties.name = name;
7
+ }
8
+ setTestDir(value) {
9
+ this.properties.testDir = value;
10
+ }
11
+ setTestMatch(value) {
12
+ this.properties.testMatch = value;
13
+ }
14
+ setRetries(value) {
15
+ this.properties.retries = value;
16
+ }
17
+ setUse(value) {
18
+ this.properties.use = value;
19
+ }
20
+ setTearDown(value) {
21
+ this.properties.teardown = value;
22
+ }
23
+ setDependencies(value) {
24
+ this.properties.dependencies = value;
25
+ }
26
+ setProperty(key, value) {
27
+ this.properties[key] = value;
28
+ }
29
+ getProperties() {
30
+ return this.properties;
31
+ }
32
+ }
33
+ module.exports = {
34
+ Project
35
+ };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.cleanupConfig = cleanupConfig;
8
+ exports.setupConfig = setupConfig;
9
+ exports.smokeTestConfig = smokeTestConfig;
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _Project = require("./Project");
12
+ var _configUtils = require("./config-utils");
13
+ var _readConfigFile = require("../readConfigFile");
14
+ var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
15
+ var _ConfigurationHelper = require("../configuration/ConfigurationHelper");
16
+ const stage = (0, _ConfigurationHelper.getRunStage)();
17
+ const uatConfig = (0, _readConfigFile.generateConfigFromFile)();
18
+ const {
19
+ isAuthMode,
20
+ isSmokeTest,
21
+ bddMode,
22
+ authFilePath,
23
+ trace,
24
+ smokeTestTrace,
25
+ video,
26
+ testIdAttribute,
27
+ viewport,
28
+ stepDefinitionsFolder
29
+ } = uatConfig;
30
+ function setupConfig() {
31
+ const setupProject = new _Project.Project('setup');
32
+ setupProject.setTestMatch(/.*\.setup\.js/);
33
+ setupProject.setTestDir(_path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER));
34
+ const isTearDown = JSON.parse(process.env.tearDown);
35
+ setupProject.setTearDown(isTearDown ? 'cleanup' : '');
36
+ const setupProjectConfig = [setupProject.getProperties()];
37
+ return setupProjectConfig;
38
+ }
39
+ function smokeTestConfig() {
40
+ const smokeTestProject = new _Project.Project('smokeTest');
41
+ const smokeTestDir = (0, _configUtils.getTestDir)(bddMode, {
42
+ featureFilesFolder: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'smokeTest', '**', '*.feature'),
43
+ stepDefinitionsFolder: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, '**', '**', stepDefinitionsFolder, '*.spec.js'),
44
+ outputDir: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, _configConstants.default.FEATURES_SMOKE_GEN_DIR),
45
+ uatPath: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'smokeTest')
46
+ });
47
+ const commonConfig = {
48
+ storageState: isAuthMode ? (0, _readConfigFile.getAuthFilePath)(_path.default.resolve(process.cwd(), authFilePath)) : {},
49
+ trace: smokeTestTrace
50
+ };
51
+ smokeTestProject.setTestDir(smokeTestDir);
52
+ smokeTestProject.setRetries(0);
53
+ smokeTestProject.setUse({
54
+ ...commonConfig
55
+ });
56
+ smokeTestProject.setDependencies(isAuthMode ? ['setup'] : []);
57
+ const smokeTestProjectConfig = [smokeTestProject.getProperties()];
58
+ return smokeTestProjectConfig;
59
+ }
60
+ function cleanupConfig() {
61
+ const cleanupProject = new _Project.Project('cleanup');
62
+ cleanupProject.setTestMatch(/.*\.teardown\.js/);
63
+ cleanupProject.setTestDir(_path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER));
64
+ const cleanupProjectConfig = [cleanupProject.getProperties()];
65
+ return cleanupProjectConfig;
66
+ }