@zohodesk/testinglibrary 0.1.9 → 0.1.16-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 -66
  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 +28 -9
  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 +27 -23
  44. package/build/core/playwright/helpers/auth/getUsers.js +92 -45
  45. package/build/core/playwright/helpers/auth/index.js +30 -5
  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 +26 -5
  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 -76
  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 +60 -0
  73. package/build/core/playwright/reporter/ShardReporter.js +62 -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/runCommand.js +71 -0
  77. package/build/core/playwright/runner/Runner.js +22 -0
  78. package/build/core/playwright/runner/RunnerHelper.js +43 -0
  79. package/build/core/playwright/runner/RunnerTypes.js +17 -0
  80. package/build/core/playwright/runner/SpawnRunner.js +93 -0
  81. package/build/core/playwright/setup/Project.js +35 -0
  82. package/build/core/playwright/setup/ProjectConfiguration.js +66 -0
  83. package/build/core/playwright/setup/config-creator.js +58 -40
  84. package/build/core/playwright/setup/config-utils.js +68 -37
  85. package/build/core/playwright/setup/custom-reporter.js +137 -14
  86. package/build/core/playwright/setup/merge-config.js +32 -0
  87. package/build/core/playwright/setup/qc-custom-reporter.js +342 -0
  88. package/build/core/playwright/tagProcessor.js +69 -0
  89. package/build/core/playwright/test-runner.js +44 -98
  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 +17 -19
  95. package/build/index.js +28 -6
  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 -67
  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__/runCommand.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 +120 -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 +13478 -4778
  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,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _logger = require("../../../utils/logger");
8
+ var _additionalProfiles = require("../helpers/additionalProfiles");
9
+ var _loginDefaultStepsHelper = require("../helpers/auth/loginDefaultStepsHelper");
10
+ class ActorContext {
11
+ constructor() {
12
+ this.actorsObj = {};
13
+ }
14
+ async setup(browser, $tags, testInfo, context, page, executionContext) {
15
+ try {
16
+ const {
17
+ profile
18
+ } = executionContext.actorInfo;
19
+ this.actorsObj[profile] = {
20
+ role: profile,
21
+ browser,
22
+ context,
23
+ page,
24
+ executionContext
25
+ };
26
+ const additionalActors = (0, _additionalProfiles.additionProfiles)($tags);
27
+ await Promise.all(Object.entries(additionalActors).map(async ([role, actorInfo]) => {
28
+ const additionalContext = await browser.newContext();
29
+ const additionalPage = await additionalContext.newPage();
30
+ const ctxTestDetails = {
31
+ page: additionalPage,
32
+ $tags,
33
+ context: additionalContext,
34
+ ...actorInfo
35
+ };
36
+ await (0, _loginDefaultStepsHelper.executeDefaultLoginSteps)(additionalContext, testInfo, ctxTestDetails, actorInfo);
37
+ this.actorsObj[role] = {
38
+ role,
39
+ browser,
40
+ context: additionalContext,
41
+ page: additionalPage,
42
+ executionContext: {
43
+ actorInfo
44
+ }
45
+ };
46
+ }));
47
+ } catch (error) {
48
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to setup additional actors:`, error);
49
+ throw error;
50
+ }
51
+ }
52
+ async cleanup() {
53
+ for (const actor of Object.values(this.actorsObj)) {
54
+ try {
55
+ await actor.context.close();
56
+ } catch (error) {
57
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to close context for actor ${actor.role}:`, error);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ var _default = exports.default = {
63
+ actorContext: async ({
64
+ page,
65
+ context,
66
+ executionContext,
67
+ $tags,
68
+ browser
69
+ }, use, testInfo) => {
70
+ const ctxObject = new ActorContext();
71
+ await ctxObject.setup(browser, $tags, testInfo, context, page, executionContext);
72
+ try {
73
+ await use(ctxObject);
74
+ } finally {
75
+ await ctxObject.cleanup();
76
+ }
77
+ }
78
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _caseTimeoutResolver = require("../helpers/caseTimeoutResolver");
8
+ var _default = exports.default = {
9
+ caseTimeout: [async ({
10
+ $tags
11
+ }, use, testInfo) => {
12
+ const timeoutMs = (0, _caseTimeoutResolver.resolveCaseTimeoutMs)($tags, testInfo.project.name);
13
+ if (timeoutMs !== null) {
14
+ testInfo.setTimeout(timeoutMs);
15
+ }
16
+ await use();
17
+ }, {
18
+ auto: true
19
+ }]
20
+ };
@@ -1,32 +1,50 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = void 0;
8
+ var _path = _interopRequireDefault(require("path"));
7
9
  var _readConfigFile = require("../readConfigFile");
8
- const {
9
- testSetup
10
- } = (0, _readConfigFile.generateConfigFromFile)();
11
- async function performDefaultContextSteps({
12
- context
13
- }) {
14
- if (testSetup.context && typeof testSetup.context === 'function') {
15
- await testSetup.context({
16
- context
17
- });
18
- }
19
- }
10
+ var _logCollector = require("../helpers/logCollector");
11
+ var _contextFailureHandler = require("../helpers/contextFailureHandler");
20
12
  var _default = exports.default = {
21
13
  context: async ({
22
14
  context
23
- }, use) => {
15
+ }, use, testInfo) => {
16
+ const {
17
+ testSetup = {},
18
+ reportPath,
19
+ failureSegregation = true
20
+ } = (0, _readConfigFile.generateConfigFromFile)();
24
21
  await context.addInitScript(() =>
25
22
  // eslint-disable-next-line no-undef
26
23
  window.localStorage.setItem('isDnBannerHide', true));
27
- await performDefaultContextSteps({
28
- context
24
+ await (0, _contextFailureHandler.performDefaultContextSteps)({
25
+ context,
26
+ testSetup
29
27
  });
30
- await use(context);
28
+
29
+ // Master switch: when off, skip collect, disk flush, and failure metadata.
30
+ if (!failureSegregation) {
31
+ await use(context);
32
+ return;
33
+ }
34
+
35
+ // Store runtime logs inside playwright-report so they ship with the report.
36
+ const logsDir = _path.default.join(reportPath, 'runtime-logs');
37
+ const collector = new _logCollector.LogCollector();
38
+ collector.attachToContext(context);
39
+ try {
40
+ await use(context);
41
+ } finally {
42
+ collector.detach();
43
+ await (0, _contextFailureHandler.handleContextFailureSegregation)({
44
+ collector,
45
+ testInfo,
46
+ logsDir
47
+ });
48
+ }
31
49
  }
32
50
  };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _customFixturesHelper = require("../helpers/customFixturesHelper");
8
+ var _default = exports.default = {
9
+ executionContext: async ({
10
+ $tags
11
+ }, use) => {
12
+ const actorInfo = (0, _customFixturesHelper.getCustomAccountDetails)($tags);
13
+ await use({
14
+ actorInfo
15
+ });
16
+ }
17
+ };
@@ -20,11 +20,19 @@ function replaceI18NValuesWithRegex(i18nStr, values) {
20
20
  }
21
21
  return i18nStr;
22
22
  }
23
+ async function isI18NKeyDefined(key) {
24
+ return new Promise(resolve => {
25
+ if (typeof window.i18n[key] !== 'undefined') {
26
+ resolve();
27
+ }
28
+ });
29
+ }
23
30
  var _default = exports.default = {
24
31
  i18N: async ({
25
32
  page
26
33
  }, use) => {
27
34
  await use(async (key, values) => {
35
+ await page.waitForFunction(isI18NKeyDefined(key));
28
36
  const i18nValue = await page.evaluate(i18nKey => window.i18n[i18nKey], key);
29
37
  const i18nStr = replaceI18NValuesWithRegex(i18nValue, values);
30
38
  return i18nStr;
@@ -9,18 +9,24 @@ var _page = _interopRequireDefault(require("./page"));
9
9
  var _context = _interopRequireDefault(require("./context"));
10
10
  var _cacheLayer = _interopRequireDefault(require("./cacheLayer"));
11
11
  var _addTags = _interopRequireDefault(require("./addTags"));
12
+ var _caseTimeout = _interopRequireDefault(require("./caseTimeout"));
12
13
  var _i18N = _interopRequireDefault(require("./i18N"));
13
14
  var _unauthenticatedPage = _interopRequireDefault(require("./unauthenticatedPage"));
15
+ var _executionContext = _interopRequireDefault(require("./executionContext"));
16
+ var _actorContext = _interopRequireDefault(require("./actorContext"));
14
17
  function extractTagsFromTitle(text) {
15
18
  return text.match(/@\w+/g) || [];
16
19
  }
17
20
  function getBuiltInFixtures(bddMode) {
18
21
  let builtInFixtures = {
19
22
  ..._page.default,
23
+ ..._actorContext.default,
20
24
  ..._context.default,
21
25
  ..._cacheLayer.default,
22
26
  ..._i18N.default,
23
- ..._unauthenticatedPage.default
27
+ ..._unauthenticatedPage.default,
28
+ ..._executionContext.default,
29
+ ..._caseTimeout.default
24
30
  };
25
31
  if (bddMode) {
26
32
  builtInFixtures = {
@@ -1,81 +1,37 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.default = void 0;
8
- var _getUsers = require("../helpers/auth/getUsers");
9
- var _loginSteps = _interopRequireDefault(require("../helpers/auth/loginSteps"));
10
- var _readConfigFile = require("../readConfigFile");
7
+ var _loginDefaultStepsHelper = require("../helpers/auth/loginDefaultStepsHelper");
11
8
  /* eslint-disable global-require */
12
-
13
- function getTagInputFromSelectedTags(tags, inputString) {
14
- const selectedTag = tags.find(tag => tag.startsWith(inputString));
15
- let tagInput = null;
16
- if (selectedTag) {
17
- tagInput = selectedTag.split(`${inputString}_`).pop().toLowerCase();
18
- }
19
- return tagInput;
20
- }
21
- function getCustomAccountDetails(tags) {
22
- const filteredTags = tags.filter(tag => tag.startsWith('@profile') || tag.startsWith('@edition') || tag.startsWith('@profile') || tag.startsWith('@darkLaunch'));
23
- if (filteredTags && filteredTags.length > 0) {
24
- const selectedProfile = getTagInputFromSelectedTags(filteredTags, '@profile');
25
- const selectedEdition = getTagInputFromSelectedTags(filteredTags, '@edition');
26
- const darkLaunchFeature = getTagInputFromSelectedTags(filteredTags, '@darkLaunch');
27
- const user = (0, _getUsers.getUserForSelectedEditionAndProfile)(selectedEdition, selectedProfile, darkLaunchFeature);
28
- return user;
29
- }
30
- return null;
31
- }
32
- const {
33
- testSetup
34
- } = (0, _readConfigFile.generateConfigFromFile)();
35
- async function performDefaultPageSteps({
36
- context,
37
- $tags,
38
- page
39
- }) {
40
- if (testSetup.page && typeof testSetup.page === 'function') {
41
- await testSetup.page({
42
- context,
43
- $tags,
44
- page
45
- });
46
- } else {
47
- await page.goto(process.env.domain);
48
- }
49
- }
50
9
  var _default = exports.default = {
51
10
  page: async ({
52
11
  context,
53
12
  $tags,
54
- page
55
- }, use) => {
56
- const customAccountDetails = getCustomAccountDetails($tags);
57
- if (customAccountDetails === null) {
58
- await performDefaultPageSteps({
59
- context,
60
- $tags,
61
- page
62
- });
63
- await use(page);
64
- } else {
65
- await context.clearCookies();
66
- await (0, _loginSteps.default)({
67
- page,
68
- role: `${customAccountDetails.role}-${customAccountDetails.edition}`,
69
- useremail: customAccountDetails.email,
70
- password: customAccountDetails.password
71
- }, async () => page.url().includes(process.env.domain));
72
- await performDefaultPageSteps({
73
- context,
74
- $tags,
75
- page
76
- });
13
+ page,
14
+ executionContext
15
+ }, use, testInfo) => {
16
+ let testPortalDetails = executionContext.actorInfo;
17
+ let testDetails = {
18
+ page,
19
+ $tags,
20
+ context,
21
+ ...testPortalDetails
22
+ };
23
+ try {
24
+ //This block is used to skip the login process if the @unauthenticated tag is added to the script
25
+ if ($tags.includes('@unauthenticated')) {
26
+ await context.clearCookies();
27
+ return;
28
+ }
29
+ await (0, _loginDefaultStepsHelper.executeDefaultLoginSteps)(context, testInfo, testDetails, testPortalDetails);
30
+ } catch (e) {
31
+ console.error('Error during page', e);
32
+ } finally {
33
+ await (0, _loginDefaultStepsHelper.performDefaultPageSteps)(testDetails);
77
34
  await use(page);
78
- await context.close();
79
35
  }
80
36
  }
81
37
  };
@@ -9,20 +9,30 @@ var _path = _interopRequireDefault(require("path"));
9
9
  var _fileUtils = require("../../utils/fileUtils");
10
10
  var _logger = require("../../utils/logger");
11
11
  var _readConfigFile = require("./readConfigFile");
12
+ var _checkAuthDirectory = require("./helpers/checkAuthDirectory");
13
+ var _configConstants = _interopRequireDefault(require("./constants/configConstants"));
14
+ var _ConfigurationHelper = require("./configuration/ConfigurationHelper");
15
+ const stage = (0, _ConfigurationHelper.getRunStage)();
12
16
  function deleteAuthFiles(authFilePath) {
13
- authFilePath.split('/').pop();
14
- _logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting auth files present in ${authFilePath}`);
15
- (0, _fileUtils.deleteFolder)(_path.default.resolve(process.cwd(), authFilePath));
17
+ authFilePath = _path.default.resolve(process.cwd(), authFilePath);
18
+ const authFileFolder = _path.default.dirname(authFilePath);
19
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting auth files present in ${authFileFolder}`);
20
+ (0, _fileUtils.deleteFolder)(authFileFolder);
16
21
  }
17
22
  function deletePlaywrightReport(reportPath) {
18
23
  _logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting Playwright report ${reportPath}`);
19
24
  (0, _fileUtils.deleteFolder)(reportPath);
20
25
  }
21
26
  function deleteGeneratedFeatures() {
22
- const featuresGenPath = _path.default.resolve(process.cwd(), 'uat', '.features-gen');
27
+ const featuresGenPath = _path.default.resolve(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, _configConstants.default.FEATURES_GEN_DIR);
23
28
  _logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting generated features at ${featuresGenPath}`);
24
29
  (0, _fileUtils.deleteFolder)(featuresGenPath);
25
30
  }
31
+ function deleteLockFiles() {
32
+ const lockFilePath = (0, _checkAuthDirectory.getLockDirectoryPath)();
33
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting lock files at ${lockFilePath}`);
34
+ (0, _fileUtils.deleteFolder)(lockFilePath);
35
+ }
26
36
  function clearCaches() {
27
37
  try {
28
38
  const {
@@ -32,9 +42,11 @@ function clearCaches() {
32
42
  deleteAuthFiles(authFilePath);
33
43
  deletePlaywrightReport(reportPath);
34
44
  deleteGeneratedFeatures();
45
+ deleteLockFiles();
35
46
  _logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Caches Cleared. Now you can try running npm run uat');
36
47
  } catch (err) {
37
- _logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error While clearing cookies. Try manually delete folder uat/playwright and uat/playwright-report');
48
+ _logger.Logger.error(err);
49
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Error While clearing cookies. Try manually delete folder ${_configConstants.default.TEST_SLICE_FOLDER}/playwright and ${_configConstants.default.TEST_SLICE_FOLDER}/playwright-report`);
38
50
  }
39
51
  }
40
52
  var _default = exports.default = clearCaches;
@@ -5,34 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = generateCodegen;
8
- var _child_process = require("child_process");
9
8
  var _path = _interopRequireDefault(require("path"));
10
- var _logger = require("../../utils/logger");
11
9
  var _rootPath = require("../../utils/rootPath");
10
+ var _runCommand = require("./runCommand");
12
11
  function generateCodegen() {
13
12
  const domainUrl = process.argv.slice(3);
14
13
  const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
15
14
  const command = playwrightPath;
16
15
  const args = ['codegen'].concat(domainUrl);
17
- const childProcess = (0, _child_process.spawn)(command, args, {
18
- stdio: 'inherit'
19
- });
20
- childProcess.on('error', error => {
21
- _logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
22
- });
23
- childProcess.on('exit', (code, signal) => {
24
- _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Child Process Exited with Code ${code} and Signal ${signal}`);
25
- process.exit();
26
- });
27
- process.on('exit', () => {
28
- _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Terminating Playwright Process...');
29
- //childProcess.kill();
30
- return;
31
- });
32
- process.on('SIGINT', () => {
33
- _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Cleaning up...');
34
- //childProcess.kill();
35
- process.exit();
16
+ (0, _runCommand.runCommand)(command, args, {
17
+ exitOnSuccess: true,
18
+ killOnParentExit: true
36
19
  });
37
20
  }
38
21
 
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _ConfigurationHelper = require("./ConfigurationHelper");
4
+ class Configuration {
5
+ properties = {};
6
+ constructor(props) {
7
+ this.properties = props;
8
+ }
9
+ add(key, value) {
10
+ this.properties[key] = value;
11
+ }
12
+ addAll(newConfig) {
13
+ this.properties = (0, _ConfigurationHelper.combineConfiguration)(this.properties, newConfig.getAll());
14
+ }
15
+ get(key) {
16
+ return this.properties[key];
17
+ }
18
+ getAll() {
19
+ return this.properties;
20
+ }
21
+ delete(key) {
22
+ delete this.properties[key];
23
+ }
24
+ }
25
+ module.exports = Configuration;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.combineConfiguration = combineConfiguration;
7
+ exports.getApplicationConfig = getApplicationConfig;
8
+ exports.getRunStage = getRunStage;
9
+ var _logger = require("../../../utils/logger");
10
+ var _configFileNameProvider = require("../helpers/configFileNameProvider");
11
+ var _mergeObjects = require("../helpers/mergeObjects");
12
+ var _fs = require("fs");
13
+ function combineConfiguration(defaultConfig, userConfiguration) {
14
+ let configurationObj = {};
15
+ Object.keys(userConfiguration).forEach(configKey => {
16
+ let configValue = userConfiguration[configKey];
17
+ if (configValue !== null && configValue !== undefined) {
18
+ configurationObj[configKey] = configValue;
19
+ } else if (defaultConfig[configKey]) {
20
+ configurationObj[configKey] = defaultConfig[configKey];
21
+ } else {
22
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `key - ${configKey} is not yet supported in uat configuration. This will not be used while creating playwright configuration`);
23
+ }
24
+ });
25
+ return (0, _mergeObjects.mergeObjects)(defaultConfig, configurationObj);
26
+ }
27
+ function getApplicationConfig(stage, mode) {
28
+ let filePath = "";
29
+ try {
30
+ filePath = (0, _configFileNameProvider.getUATFileName)(stage, mode);
31
+ if (!(0, _fs.existsSync)(filePath)) {
32
+ throw new Error("Exception while getting the uat file from the application - " + filePath);
33
+ }
34
+ const config = require(filePath);
35
+ return config;
36
+ } catch (err) {
37
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Founded Path - ${filePath} Application config file not Exist ...`);
38
+ _logger.Logger.error(err);
39
+ return {};
40
+ }
41
+ }
42
+ function getRunStage() {
43
+ const stage = process.env.stage;
44
+ return stage || 'uat';
45
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ var _cliArgsToObject = require("../../../utils/cliArgsToObject");
4
+ class UserArgs {
5
+ static parseToObject(config) {
6
+ return (0, _cliArgsToObject.cliArgsToObject)(config);
7
+ }
8
+ static parseToArgs(object) {
9
+ return (0, _cliArgsToObject.objectToCliArgs)(object);
10
+ }
11
+ }
12
+ module.exports = UserArgs;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ class configConstants {
4
+ static DEFAULT_CONFIG_DIR = 'default';
5
+ static BETA_DIR = 'beta';
6
+ static ACTOR_DIR = 'actors';
7
+ static UAT_CONFIG_FILE = 'uat.config.js';
8
+ static INDEX_FILE = 'index.js';
9
+ static SETTINGS_FILE = 'settings.json';
10
+ static TEST_SUMMARY_FILE = 'test-summary.json';
11
+ static STAGE_CONFIG_MAP_FILE = 'test-slices/conf_path_map.properties';
12
+ static TEST_SLICE_FOLDER = 'test-slices';
13
+ // playwright-bdd output folder for generated .feature.spec.js files
14
+ static FEATURES_GEN_DIR = '.features-gen';
15
+ static FEATURES_SMOKE_GEN_DIR = '.features-smoke-gen';
16
+ }
17
+ module.exports = configConstants;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FAILURE_TAG_SUFFIX = exports.FAILURE_TAG_METADATA_ATTACHMENT = exports.FAILURE_TAGS = void 0;
7
+ const FAILURE_TAGS = exports.FAILURE_TAGS = {
8
+ CASE: 'CASE',
9
+ CODE: 'CODE',
10
+ ENVIRONMENT: 'ENVIRONMENT',
11
+ TOOL: 'TOOL'
12
+ };
13
+
14
+ // Suffix appended to a category when merging into the existing spec.tags array,
15
+ // e.g. "CODE" -> "CODE_failure".
16
+ const FAILURE_TAG_SUFFIX = exports.FAILURE_TAG_SUFFIX = '_failure';
17
+ const FAILURE_TAG_METADATA_ATTACHMENT = exports.FAILURE_TAG_METADATA_ATTACHMENT = 'additional_logs';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fileDeletionTimeoutConfig = void 0;
7
+ const fileDeletionTimeoutConfig = exports.fileDeletionTimeoutConfig = {
8
+ timeout: 45000
9
+ };
@@ -0,0 +1,20 @@
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 _configConstants = _interopRequireDefault(require("./configConstants"));
9
+ var _ConfigurationHelper = require("../configuration/ConfigurationHelper");
10
+ const stage = (0, _ConfigurationHelper.getRunStage)();
11
+ class ReporterConstants {
12
+ static DEFAULT_REPORTER_PATH = `${_configConstants.default.TEST_SLICE_FOLDER}/${stage}/test-results/playwright-test-results.json`;
13
+ static LAST_RUN_REPORTER_PATH = `${_configConstants.default.TEST_SLICE_FOLDER}/${stage}/test-results/.last-run.json`;
14
+ static DEFAULT_UNIT_TEST_REPORTER_PATH = `${_configConstants.default.TEST_SLICE_FOLDER}/unit-test/unit_reports/report.html`;
15
+ static PROJECT_FAILURE_REASON_MAP = {
16
+ 'setup': 'Login case failure',
17
+ 'smokeTest': 'Smoke test failure'
18
+ };
19
+ }
20
+ exports.default = ReporterConstants;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PREPROCESSING_RETRY_MAX_ATTEMPTS = exports.PREPROCESSING_RETRY_DELAY_MS = void 0;
7
+ const PREPROCESSING_RETRY_MAX_ATTEMPTS = exports.PREPROCESSING_RETRY_MAX_ATTEMPTS = 1;
8
+ const PREPROCESSING_RETRY_DELAY_MS = exports.PREPROCESSING_RETRY_DELAY_MS = 2000;
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CUSTOM_COMMANDS = void 0;
7
- const CUSTOM_COMMANDS = exports.CUSTOM_COMMANDS = ['mode', 'tags', 'edition', 'browsers', 'filePath'];
7
+ const CUSTOM_COMMANDS = exports.CUSTOM_COMMANDS = ['stage', 'mode', 'tags', 'edition', 'browsers', 'filePath', 'headless', 'modules', 'isTearDown'];
@@ -8,18 +8,37 @@ exports.initializeEnvConfig = initializeEnvConfig;
8
8
  var _fs = require("fs");
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
  var _configFileNameProvider = require("./helpers/configFileNameProvider");
11
- function setEnvironmentVariables(mode, configJSON) {
12
- process.env.mode = mode;
13
- for (const key in configJSON[mode]) {
14
- process.env[key] = configJSON[mode][key];
11
+ var _logger = require("../../utils/logger");
12
+ var _getUsers = require("./helpers/auth/getUsers");
13
+ function setEnvironmentVariables(configJSON) {
14
+ for (const key in configJSON) {
15
+ process.env[key] = configJSON[key];
15
16
  }
16
17
  }
17
- function initializeEnvConfig(mode = 'dev') {
18
+ function addHelperLogsForEnvInitialization() {
19
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Mode under which test cases should run has not been specified in args.`);
20
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Please specify --mode='dev/ci/cd/devautomation' while running ZDTestingFramework test`);
21
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Going to use default mode as dev`);
22
+ }
23
+ function initializeEnvConfig(stage, mode, isAuthMode) {
24
+ if (!mode) {
25
+ addHelperLogsForEnvInitialization();
26
+ mode = 'dev';
27
+ }
28
+ const configFilePath = (0, _fs.readFileSync)(_path.default.resolve(process.cwd(), `./${(0, _configFileNameProvider.getEnvConfigFilePath)(stage, mode)}`));
18
29
  try {
19
- const configFile = (0, _fs.readFileSync)(_path.default.resolve(process.cwd(), `./${(0, _configFileNameProvider.getEnvConfigFilePath)()}`));
20
- const configJSON = JSON.parse(configFile);
21
- setEnvironmentVariables(mode, configJSON);
30
+ const configJSON = JSON.parse(configFilePath);
31
+ setEnvironmentVariables({
32
+ ...configJSON,
33
+ stage,
34
+ mode
35
+ });
36
+ if (isAuthMode) {
37
+ const defaultActorConfiguration = (0, _getUsers.getDefaultActorConf)();
38
+ setEnvironmentVariables(defaultActorConfiguration);
39
+ }
22
40
  } catch (err) {
23
- throw new Error(`Config File Not Exists. Please provide a config file ${(0, _configFileNameProvider.getEnvConfigFilePath)()} to intiailize the environment variables`);
41
+ _logger.Logger.error(err);
42
+ throw new Error(`Config File Not Exists. Please provide a ${configFilePath} to initialize the environment variables`);
24
43
  }
25
44
  }