@zohodesk/testinglibrary 0.0.5-exp.8 → 0.0.5-n20-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 (158) hide show
  1. package/.babelrc +9 -1
  2. package/.eslintrc.js +31 -0
  3. package/.gitlab-ci.yml +191 -0
  4. package/.prettierrc +6 -0
  5. package/README.md +151 -1
  6. package/build/common/data-generator/steps/DataGenerator.spec.js +19 -0
  7. package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +19 -0
  8. package/build/common/multi-actor/steps/multiActorHandling.spec.js +26 -0
  9. package/build/common/searchFake/helpers/rpcRequestHelper.js +41 -0
  10. package/build/common/searchFake/steps/searchFake.spec.js +26 -0
  11. package/build/core/dataGenerator/DataGenerator.js +108 -0
  12. package/build/core/dataGenerator/DataGeneratorError.js +50 -0
  13. package/build/core/dataGenerator/DataGeneratorHelper.js +49 -0
  14. package/build/core/jest/preprocessor/jsPreprocessor.js +3 -9
  15. package/build/core/jest/runner/jest-runner.js +1 -0
  16. package/build/core/jest/setup/index.js +1 -7
  17. package/build/core/playwright/builtInFixtures/actorContext.js +75 -0
  18. package/build/core/playwright/builtInFixtures/addTags.js +19 -0
  19. package/build/core/playwright/builtInFixtures/cacheLayer.js +13 -0
  20. package/build/core/playwright/builtInFixtures/context.js +32 -0
  21. package/build/core/playwright/builtInFixtures/executionContext.js +17 -0
  22. package/build/core/playwright/builtInFixtures/i18N.js +41 -0
  23. package/build/core/playwright/builtInFixtures/index.js +46 -0
  24. package/build/core/playwright/builtInFixtures/page.js +38 -0
  25. package/build/core/playwright/builtInFixtures/unauthenticatedPage.js +18 -0
  26. package/build/core/playwright/clear-caches.js +49 -0
  27. package/build/core/playwright/codegen.js +5 -6
  28. package/build/core/playwright/configuration/Configuration.js +25 -0
  29. package/build/core/playwright/configuration/ConfigurationHelper.js +43 -0
  30. package/build/core/playwright/configuration/UserArgs.js +12 -0
  31. package/build/core/playwright/constants/browserTypes.js +12 -0
  32. package/build/core/playwright/constants/fileMutexConfig.js +9 -0
  33. package/build/core/playwright/custom-commands.js +1 -2
  34. package/build/core/playwright/env-initializer.js +28 -6
  35. package/build/core/playwright/fixtures.js +24 -0
  36. package/build/core/playwright/helpers/additionalProfiles.js +25 -0
  37. package/build/core/playwright/helpers/auth/accountLogin.js +21 -0
  38. package/build/core/playwright/helpers/auth/checkAuthCookies.js +41 -0
  39. package/build/core/playwright/helpers/auth/getUrlOrigin.js +13 -0
  40. package/build/core/playwright/helpers/auth/getUsers.js +118 -0
  41. package/build/core/playwright/helpers/auth/index.js +76 -0
  42. package/build/core/playwright/helpers/auth/loginDefaultStepsHelper.js +54 -0
  43. package/build/core/playwright/helpers/auth/loginSteps.js +50 -0
  44. package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
  45. package/build/core/playwright/helpers/configFileNameProvider.js +31 -0
  46. package/build/core/playwright/helpers/customFixturesHelper.js +58 -0
  47. package/build/core/playwright/helpers/fileMutex.js +71 -0
  48. package/build/core/playwright/helpers/getUserFixtures.js +23 -0
  49. package/build/core/playwright/helpers/mergeObjects.js +13 -0
  50. package/build/core/playwright/helpers/parseUserArgs.js +10 -0
  51. package/build/core/playwright/index.js +10 -96
  52. package/build/core/playwright/readConfigFile.js +97 -14
  53. package/build/core/playwright/report-generator.js +9 -10
  54. package/build/core/playwright/runner/Runner.js +22 -0
  55. package/build/core/playwright/runner/RunnerHelper.js +43 -0
  56. package/build/core/playwright/runner/RunnerTypes.js +17 -0
  57. package/build/core/playwright/runner/SpawnRunner.js +113 -0
  58. package/build/core/playwright/setup/config-creator.js +101 -90
  59. package/build/core/playwright/setup/config-utils.js +188 -0
  60. package/build/core/playwright/setup/custom-reporter.js +136 -0
  61. package/build/core/playwright/setup/qc-custom-reporter.js +291 -0
  62. package/build/core/playwright/tagProcessor.js +69 -0
  63. package/build/core/playwright/test-runner.js +84 -67
  64. package/build/core/playwright/types.js +44 -0
  65. package/build/core/playwright/validateFeature.js +28 -0
  66. package/build/decorators.d.ts +1 -0
  67. package/build/decorators.js +16 -0
  68. package/build/index.d.ts +78 -0
  69. package/build/index.js +73 -5
  70. package/build/lib/cli.js +38 -5
  71. package/build/lib/post-install.js +19 -11
  72. package/build/lint/index.js +3 -6
  73. package/build/parser/parser.js +205 -0
  74. package/build/parser/sample.feature +34 -0
  75. package/build/parser/sample.spec.js +37 -0
  76. package/build/parser/verifier.js +130 -0
  77. package/build/setup-folder-structure/helper.js +37 -0
  78. package/build/setup-folder-structure/reportEnhancement/addonScript.html +25 -0
  79. package/build/setup-folder-structure/reportEnhancement/reportAlteration.js +25 -0
  80. package/build/setup-folder-structure/samples/accountLogin-sample.js +19 -0
  81. package/build/setup-folder-structure/samples/actors-index.js +2 -0
  82. package/build/setup-folder-structure/samples/auth-setup-sample.js +15 -0
  83. package/build/setup-folder-structure/samples/editions-index.js +3 -0
  84. package/build/setup-folder-structure/samples/free-sample.json +25 -0
  85. package/build/setup-folder-structure/samples/git-ignore.sample.js +37 -0
  86. package/build/setup-folder-structure/samples/settings.json +7 -0
  87. package/build/setup-folder-structure/samples/testSetup-sample.js +14 -0
  88. package/build/setup-folder-structure/samples/uat-config-sample.js +46 -0
  89. package/build/setup-folder-structure/setupProject.js +36 -18
  90. package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
  91. package/build/test/core/playwright/__tests__/validateFeature.test.js +69 -0
  92. package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +27 -0
  93. package/build/test/core/playwright/configuration/__tests__/Configuration.test.js +53 -0
  94. package/build/test/core/playwright/helpers/__tests__/additionalProfiles.test.js +45 -0
  95. package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +34 -0
  96. package/build/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js +51 -0
  97. package/build/test/core/playwright/helpers/__tests__/fileMutex.test.js +79 -0
  98. package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +80 -0
  99. package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +16 -0
  100. package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +27 -0
  101. package/build/utils/cliArgsToObject.js +9 -1
  102. package/build/utils/commonUtils.js +17 -0
  103. package/build/utils/fileUtils.js +109 -0
  104. package/build/utils/logger.js +7 -35
  105. package/build/utils/rootPath.js +16 -9
  106. package/build/utils/stepDefinitionsFormatter.js +11 -0
  107. package/changelog.md +136 -10
  108. package/jest.config.js +29 -11
  109. package/npm-shrinkwrap.json +10241 -6175
  110. package/package.json +40 -26
  111. package/playwright.config.js +5 -55
  112. package/test-results/.last-run.json +4 -0
  113. package/unit_reports/unit-report.html +277 -0
  114. package/build/bdd-framework/cli/commands/env.js +0 -44
  115. package/build/bdd-framework/cli/commands/export.js +0 -47
  116. package/build/bdd-framework/cli/commands/test.js +0 -60
  117. package/build/bdd-framework/cli/index.js +0 -11
  118. package/build/bdd-framework/cli/options.js +0 -21
  119. package/build/bdd-framework/cli/worker.js +0 -13
  120. package/build/bdd-framework/config/dir.js +0 -27
  121. package/build/bdd-framework/config/env.js +0 -49
  122. package/build/bdd-framework/config/index.js +0 -92
  123. package/build/bdd-framework/cucumber/buildStepDefinition.js +0 -45
  124. package/build/bdd-framework/cucumber/gherkin.d.ts +0 -45
  125. package/build/bdd-framework/cucumber/loadConfig.js +0 -17
  126. package/build/bdd-framework/cucumber/loadFeatures.js +0 -39
  127. package/build/bdd-framework/cucumber/loadSnippetBuilder.js +0 -20
  128. package/build/bdd-framework/cucumber/loadSources.js +0 -58
  129. package/build/bdd-framework/cucumber/loadSteps.js +0 -41
  130. package/build/bdd-framework/decorators.js +0 -21
  131. package/build/bdd-framework/gen/formatter.js +0 -92
  132. package/build/bdd-framework/gen/i18n.js +0 -44
  133. package/build/bdd-framework/gen/index.js +0 -150
  134. package/build/bdd-framework/gen/poms.js +0 -47
  135. package/build/bdd-framework/gen/testFile.js +0 -356
  136. package/build/bdd-framework/gen/testNode.js +0 -50
  137. package/build/bdd-framework/index.js +0 -33
  138. package/build/bdd-framework/playwright/fixtureParameterNames.js +0 -103
  139. package/build/bdd-framework/playwright/getLocationInFile.js +0 -50
  140. package/build/bdd-framework/playwright/loadConfig.js +0 -42
  141. package/build/bdd-framework/playwright/testTypeImpl.js +0 -47
  142. package/build/bdd-framework/playwright/transform.js +0 -85
  143. package/build/bdd-framework/playwright/utils.js +0 -24
  144. package/build/bdd-framework/run/bddFixtures.js +0 -109
  145. package/build/bdd-framework/run/bddWorld.js +0 -91
  146. package/build/bdd-framework/snippets/index.js +0 -132
  147. package/build/bdd-framework/snippets/snippetSyntax.js +0 -50
  148. package/build/bdd-framework/snippets/snippetSyntaxDecorators.js +0 -32
  149. package/build/bdd-framework/snippets/snippetSyntaxTs.js +0 -18
  150. package/build/bdd-framework/stepDefinitions/createBdd.js +0 -52
  151. package/build/bdd-framework/stepDefinitions/createDecorators.js +0 -110
  152. package/build/bdd-framework/stepDefinitions/defineStep.js +0 -62
  153. package/build/bdd-framework/utils/index.js +0 -52
  154. package/build/bdd-framework/utils/jsStringWrap.js +0 -44
  155. package/build/bdd-framework/utils/logger.js +0 -21
  156. package/build/setup-folder-structure/env-config-sample.json +0 -17
  157. package/build/setup-folder-structure/uat-config-sample.js +0 -31
  158. package/build/setup-folder-structure/user-example.json +0 -3
package/.babelrc CHANGED
@@ -6,11 +6,19 @@
6
6
  "targets": {
7
7
  "node": "14"
8
8
  },
9
+ // We are adding plugin @babel/plugin-transform-destructuring to ensure babel does not transform the destructing
10
+ // as playwright does not allow parameters without destrucring
9
11
  "exclude": ["@babel/plugin-transform-destructuring"]
10
12
  }
11
13
  ]
12
14
  ],
13
15
  "plugins": [
14
- ["@babel/plugin-transform-runtime"]
16
+ ["@babel/plugin-transform-runtime"],
17
+ ["@babel/plugin-transform-modules-commonjs"]
18
+ ],
19
+ // Ignored as these are setup files needed during init script. Files inside that folder are copied not transformed
20
+ "ignore": [
21
+ "./src/setup-folder-structure/samples",
22
+ "./src/common/**"
15
23
  ]
16
24
  }
package/.eslintrc.js ADDED
@@ -0,0 +1,31 @@
1
+ module.exports = {
2
+ "env": {
3
+ "node": true,
4
+ "es2021": true
5
+ },
6
+ "extends": "eslint:recommended",
7
+ "overrides": [
8
+ {
9
+ "env": {
10
+ "node": true
11
+ },
12
+ "files": [
13
+ ".eslintrc.{js,cjs}"
14
+ ],
15
+ "parserOptions": {
16
+ "sourceType": "script"
17
+ }
18
+ }
19
+ ],
20
+ "parserOptions": {
21
+ "ecmaVersion": "latest",
22
+ "sourceType": "module"
23
+ },
24
+ "rules": {
25
+ "indent": ["error", 2, { "SwitchCase": 1 }],
26
+ "no-empty-pattern": "off",
27
+ "comma-dangle": ["error", "never"],
28
+ "curly": ["error"],
29
+ "brace-style": "error"
30
+ }
31
+ }
package/.gitlab-ci.yml ADDED
@@ -0,0 +1,191 @@
1
+ image: repository.desk.csez.zohocorpin.com/base-image/testing-framework-gitlab-runne-base:v3
2
+
3
+ workflow:
4
+ rules:
5
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
6
+ when: always
7
+ - if: $CI_PIPELINE_SOURCE == "web"
8
+ when: always
9
+
10
+ stages:
11
+ - build
12
+ - unit
13
+ - uat
14
+
15
+ default:
16
+ cache:
17
+ key: build-cache
18
+ paths:
19
+ - node_modules
20
+ - build
21
+ - npm-shrinkwrap.json
22
+
23
+ # Install dependencies stage
24
+ build:
25
+ stage: build
26
+ script:
27
+ - npm -v
28
+ - node -v
29
+ - npm install --ignore-scripts
30
+ - npm run build
31
+ - npm install
32
+ - npm shrinkwrap
33
+ - npm run build
34
+
35
+ # Unit tests stage
36
+ unit:
37
+ stage: unit
38
+ script:
39
+ - npm run test
40
+ artifacts:
41
+ when: always
42
+ paths:
43
+ - unit_reports
44
+
45
+ # UAT tests stage
46
+ uat-auth:
47
+ stage: uat
48
+ script:
49
+ - cd examples
50
+ - npm install $(npm pack ../../testing-framework | tail -1)
51
+ - output=$(npm run uatauth)
52
+ - echo "$output"
53
+ - node ../ValidateUATReport.js examples
54
+
55
+ artifacts:
56
+ when: always
57
+ paths:
58
+ - examples/uat/playwright-report
59
+
60
+ uat-noauth:
61
+ stage: uat
62
+ script:
63
+ - cd examples
64
+ - npm install $(npm pack ../../testing-framework | tail -1)
65
+ - output=$(npm run uatnoauth)
66
+ - echo "$output"
67
+ - node ../ValidateUATReport.js examples
68
+
69
+ artifacts:
70
+ when: always
71
+ paths:
72
+ - examples/uat/playwright-report
73
+
74
+ uat-profile:
75
+ stage: uat
76
+ script:
77
+ - cd examples
78
+ - npm install $(npm pack ../../testing-framework | tail -1)
79
+ - output=$(npm run uatprofile)
80
+ - echo "$output"
81
+ - node ../ValidateUATReport.js examples
82
+
83
+ artifacts:
84
+ when: always
85
+ paths:
86
+ - examples/uat/playwright-report
87
+
88
+
89
+ uat-unauth:
90
+ stage: uat
91
+ script:
92
+ - cd examples
93
+ - npm install $(npm pack ../../testing-framework | tail -1)
94
+ - output=$(npm run uatunauth)
95
+ - echo "$output"
96
+ - node ../ValidateUATReport.js examples
97
+
98
+
99
+ artifacts:
100
+ when: always
101
+ paths:
102
+ - examples/uat/playwright-report
103
+
104
+ uat-nobdd:
105
+ stage: uat
106
+ script:
107
+ - cd nobdd
108
+ - npm install $(npm pack ../../testing-framework | tail -1)
109
+ - output=$(npm run uatnobdd -- --headless)
110
+ - echo "$output"
111
+ - node ../ValidateUATReport.js nobdd
112
+
113
+
114
+ artifacts:
115
+ when: always
116
+ paths:
117
+ - nobdd/uat/playwright-report
118
+
119
+
120
+ uatmodule:
121
+ stage: uat
122
+ script:
123
+ - cd examples
124
+ - npm install $(npm pack ../../testing-framework | tail -1)
125
+ - output=$(npm run uatmodule)
126
+ - echo "$output"
127
+ - node ../ValidateUATReport.js examples
128
+
129
+
130
+ artifacts:
131
+ when: always
132
+ paths:
133
+ - examples/uat/playwright-report
134
+
135
+ uatconfigmodule:
136
+ stage: uat
137
+ script:
138
+ - cd examples
139
+ - npm install $(npm pack ../../testing-framework | tail -1)
140
+ - output=$(npm run uatconfigmodule)
141
+ - echo "$output"
142
+ - node ../ValidateUATReport.js examples
143
+
144
+ artifacts:
145
+ when: always
146
+ paths:
147
+ - examples/uat/playwright-report
148
+
149
+ uat-smoketest:
150
+ stage: uat
151
+ script:
152
+ - cd examples
153
+ - npm install $(npm pack ../../testing-framework | tail -1)
154
+ - output=$(npm run uat-smoketest)
155
+ - echo "$output"
156
+ - node ../ValidateUATReport.js examples
157
+
158
+ artifacts:
159
+ when: always
160
+ paths:
161
+ - examples/uat/playwright-report
162
+
163
+ uat-multiactor:
164
+ stage: uat
165
+ script:
166
+ - cd examples
167
+ - npm install $(npm pack ../../testing-framework | tail -1)
168
+ - output=$(npm run uat-multiactor)
169
+ - echo "$output"
170
+ - node ../ValidateUATReport.js examples
171
+
172
+ artifacts:
173
+ when: always
174
+ paths:
175
+ - examples/uat/playwright-report
176
+
177
+ uat-data_generator:
178
+ stage: uat
179
+ script:
180
+ - cd examples
181
+ - npm install $(npm pack ../../testing-framework | tail -1)
182
+ - output=$(npm run uat-data_generator)
183
+ - echo "$output"
184
+ - node ../ValidateUATReport.js examples
185
+
186
+ artifacts:
187
+ when: always
188
+ paths:
189
+ - examples/uat/playwright-report
190
+
191
+
package/.prettierrc ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "trailingComma": "none",
3
+ "singleQuote": true,
4
+ "arrowParens": "avoid",
5
+ "jsxSingleQuote": true
6
+ }
package/README.md CHANGED
@@ -12,7 +12,157 @@
12
12
  ### Run TestCase
13
13
 
14
14
  - npm run test
15
+
15
16
  ### Generate Report
16
17
 
17
18
  - npm run report
18
-
19
+
20
+ ## Version History
21
+
22
+ ### v3.2.8 - 18-09-2025
23
+
24
+ ### Bug fix
25
+
26
+ - Default profile switching handled in Multi actor – Improved handling of default profile switching to ensure smoother execution flow.
27
+
28
+ - QC Report tags issue fixed – Resolved an issue where QC Report tags were not displaying correctly in reports.
29
+
30
+ ### v3.2.7 - 10-09-2025
31
+
32
+ ### Bug fix
33
+ - Fixed a bug where the default profile page was not being handled properly in `this`.
34
+
35
+ ### v3.2.6 - 05-09-2025
36
+
37
+ #### Feature
38
+
39
+ - Multi-actor execution support – now possible to switch between multiple profile agents within scenarios using the predefined step: - `access the {string} profile page`
40
+
41
+ ### Bug fix
42
+ - Fixed the issue where localapp and hcapp UAT were not running properly.
43
+
44
+ ### v3.2.5 - 28-08-2025
45
+
46
+ #### Enhancement
47
+
48
+ - Removed the searchFake dependency from the project level and adopted it inside the framework, reducing project-side maintenance. use this predefined step: - `Given (a search entity)`
49
+
50
+ ### v3.2.4 - 29-07-2025
51
+
52
+ #### Feature
53
+ - Data Generator steps are now supported directly via the framework.
54
+
55
+ ### Bug fix
56
+ - Feature File Root Directory not found issue fixed
57
+
58
+ ### v3.2.3 - 29-07-2025
59
+
60
+ #### Feature
61
+ - Added support for running Smoke Tests in the UAT stage.
62
+
63
+ ### v3.2.0 - 22-06-2025
64
+
65
+ #### Feature
66
+ - Default required spec files are now auto-imported from the library into the project.
67
+
68
+ ### v3.1.13 - 02-07-2025
69
+
70
+ #### Enhancement
71
+ - Below package versions are updated in this release.
72
+ - @cucumber/Cucumber - 11.3.0
73
+ - Playwright/test - 1.53.2
74
+ - Playwright - 1.53.2
75
+ - Playwright-bdd - 8.3.1
76
+ - QC custom reporter changes have been adopted into the framework.
77
+
78
+ ### v3.1.5 - 22-05-2025
79
+
80
+ #### Feature
81
+ - Added support for Module Based Execution UAT stage.
82
+
83
+ ### v3.1.4 - 12-05-2025
84
+
85
+ #### Enhancement
86
+ - Playwright version 1.52.0 adopted in testing framework
87
+
88
+ ### v3.1.3 - 25-04-2025
89
+
90
+ #### Enhancement
91
+ - Playwright version 1.51.0 adopted in testing framework
92
+
93
+ ### v0.2.8 - 26-09-2024
94
+
95
+ #### Feature
96
+ - Added support for writing unitcases for framework implementations
97
+
98
+ ### Bug fix
99
+ - Updated the custom-reported to include the errors in tests during the executions. It will help us avoid the stage passed without the actual test execution.
100
+
101
+
102
+ ### v3.0.8 - 25-12-2024
103
+
104
+ #### Enhancement
105
+ - Added support to disable headless mode using command line arguments
106
+ - Proper validation added for node 14 build process
107
+ - Removed unwanted uat.config.js files in test projects (examples / nobdd)
108
+
109
+ ### v0.2.9.2 - 22-11-2024
110
+
111
+ #### BugFix
112
+ - Implemented synchronization for the login process. This fix will help avoid login session-related failures in UAT.
113
+
114
+ ### v0.3.1 - 13-11-2024
115
+
116
+ #### Issue Fix
117
+ - Adding bddmode to get the fixtures.
118
+
119
+ ### v0.2.9.1 - 14-11-2024
120
+
121
+ #### Enhancement
122
+ - Beta feature Actors and edition configurations are unified
123
+
124
+ ### v0.2.9 - 25-10-2024
125
+
126
+ #### Feature
127
+ - Added support for scenario level tag support
128
+ - Added a new cli optin like uat-validate to validate the feature files using playwright-bdd
129
+ - Mode based configuration implementations
130
+ - @only option enabled in dev pipeline
131
+ - Latest setup related configuration changed for init option
132
+
133
+ ### v0.3.0 - 25-10-2024
134
+
135
+ #### Features
136
+ - Added support for scenario level tag support
137
+ - Updated the configuration for `video` and `trace` to accept Playwright-specific values instead of boolean values.
138
+ - Below package versions are updated in this release.
139
+ - playwright - 1.48.0,
140
+ - playwright-bdd - 7.5.0,
141
+ - @playwright/test - 1.48.0,
142
+ - @cucumber/cucumber - 11.0.1
143
+ - From this version, We adopt the playwright-bdd as library instead of modified source
144
+ - Published on 11-11-2024
145
+
146
+ #### Deprecations
147
+ - **Deprecated**: Passing `video` and `trace` as boolean (`true`/`false`) in project configuration.
148
+ - **New Approach**: Use Playwright values for `video` and `trace` options, such as `'on'`, `'retain-on-failure'`, or `'off'`.
149
+
150
+ ### v0.3.1 - 13-11-2024
151
+
152
+ #### Issue Fix
153
+ - Adding bddmode to get the fixtures.
154
+
155
+ ### v0.3.3 - 27-11-2024
156
+
157
+ #### Feature
158
+ - Custom report integration support (ReportPortal)
159
+
160
+ ### v0.2.9.1 - 14-11-2024
161
+
162
+ #### Enhancement
163
+ - Beta feature Actors and edition configurations are unified
164
+
165
+ ### v0.2.9.2 - 22-11-2024
166
+
167
+ #### BugFix
168
+ - Implemented synchronization for the login process. This fix will help avoid login session-related failures in UAT.
@@ -0,0 +1,19 @@
1
+ import { createBdd , test } from '@zohodesk/testinglibrary';
2
+ import { generateAndCacheTestData } from './DataGeneratorStepsHelper';
3
+
4
+ const { Given } = createBdd();
5
+
6
+ Given('generate a {string} entity {string} with generator {string}', async ({ page, context, i18N, cacheLayer, executionContext}, module, entityName, generatorName, dataTable) => {
7
+ await generateAndCacheTestData(executionContext, "template", generatorName, dataTable, cacheLayer, entityName);
8
+ });
9
+
10
+ Given('generate a {string} entity {string} with API {string}', async ({ page, context, i18N, cacheLayer, executionContext}, module, entityName, operationId, dataTable) => {
11
+ await generateAndCacheTestData(executionContext, "API", operationId, dataTable, cacheLayer, entityName);
12
+ });
13
+ Given('generate a {string} entity {string} with generator {string} using {string} profile', async ({ page, context, i18N, cacheLayer, executionContext}, module, entityName, generatorName, profile, dataTable) => {
14
+ await generateAndCacheTestData(executionContext, "template", generatorName, dataTable, cacheLayer, entityName, profile);
15
+ });
16
+
17
+ Given('generate a {string} entity {string} with API {string} using {string} profile', async ({ page, context, i18N, cacheLayer, executionContext}, module, entityName, operationId, profile, dataTable) => {
18
+ await generateAndCacheTestData(executionContext, "API", operationId, dataTable, cacheLayer, entityName, profile);
19
+ });
@@ -0,0 +1,19 @@
1
+ import { test } from '@zohodesk/testinglibrary';
2
+ import DataGenerator from '@zohodesk/testinglibrary/DataGenerator';
3
+
4
+ const dataGenerator = new DataGenerator();
5
+
6
+ export async function generateAndCacheTestData(executionContext, type, identifier, dataTable, cacheLayer, entityName, profile = null) {
7
+ let actorInfo;
8
+ const testInfo = test.info();
9
+ const scenarioName = testInfo.title.split('/').pop() || 'Unknown Scenario';
10
+
11
+ if (profile) {
12
+ actorInfo = await dataGenerator.getDataGenUserExecutionContext(executionContext.actorInfo.edition, profile);
13
+ } else {
14
+ actorInfo = executionContext.actorInfo;
15
+ }
16
+
17
+ const generatedData = await dataGenerator.generate(testInfo, actorInfo, type, identifier, scenarioName, dataTable ? dataTable.hashes() : []);
18
+ await cacheLayer.set(entityName, generatedData.data);
19
+ }
@@ -0,0 +1,26 @@
1
+ import { createBdd } from '@zohodesk/testinglibrary';
2
+ const { BeforeScenario, Given } = createBdd();
3
+
4
+ BeforeScenario(async function({ page, context, browser, cacheLayer, executionContext, actorContext }) {
5
+ // This will run before each scenario and set all the fixtures into this context
6
+ this.page = page;
7
+ this.context = context;
8
+ this.browser = browser;
9
+ this.cacheLayer = cacheLayer;
10
+ this.executionContext = executionContext;
11
+ this.setActor = async (role) => {
12
+ const userPage = actorContext.actorsObj[role];
13
+ if (userPage) {
14
+ this.page = userPage.page;
15
+ this.context = userPage.context;
16
+ this.browser = userPage.browser;
17
+ this.executionContext = userPage.executionContext;
18
+ } else {
19
+ throw new Error(`Actor "${role}" not found in user pages.`);
20
+ }
21
+ }
22
+ });
23
+
24
+ Given("access the {string} profile page", async function({ page }, userRole) {
25
+ await this.setActor(userRole);
26
+ });
@@ -0,0 +1,41 @@
1
+ import { expect } from '@zohodesk/testinglibrary';
2
+
3
+ async function executeRpcRequest(page, payload) {
4
+
5
+ const url = new URL(page.url());
6
+ const baseUrl = `${url.protocol}//${url.host}`;
7
+ const invokeURL = `${baseUrl}/api/testing/acceptanceTest/rpc/invoke`;
8
+
9
+ try {
10
+ const response = await page.request.post(invokeURL, {
11
+ headers: {'Content-Type': 'application/json'},
12
+ data: payload
13
+ });
14
+
15
+ if (!response.ok()) {
16
+ throw new Error(`HTTP ${response.status()}: ${response.statusText()}`);
17
+ }
18
+
19
+ const responseData = await response.json();
20
+ expect(responseData.data).toHaveProperty('status', 'success');
21
+
22
+ } catch (error) {
23
+ throw error;
24
+ }
25
+ }
26
+
27
+
28
+ async function entityIdReConstructor(payload) {
29
+
30
+ if (typeof payload !== 'object' || payload === null) {
31
+ throw new Error('Invalid payload. It must be a non-null object.');
32
+ }
33
+ if (!payload.arguments || typeof payload.arguments.entityId !== 'string') {
34
+ throw new Error('Invalid payload.arguments.entityId. It must be a non-empty string.');
35
+ }
36
+
37
+ payload.arguments.entityId = payload.arguments.entityId.split(',').map(id => id.trim());
38
+ return payload;
39
+ }
40
+
41
+ module.exports = { executeRpcRequest, entityIdReConstructor };
@@ -0,0 +1,26 @@
1
+ import {createBdd } from '@zohodesk/testinglibrary';
2
+ import { executeRpcRequest , entityIdReConstructor } from '../helpers/rpcRequestHelper';
3
+
4
+ const { Given } = createBdd();
5
+
6
+ Given('a search entity', async ({page}, dataTable)=>{
7
+ const data = dataTable.hashes();
8
+
9
+ for (const row of data) {
10
+
11
+ const { moduleName, entityId, searchString } = row;
12
+ const payload = {
13
+ className: 'applicationDriver.rpc.desk.integrations.search.SearchFakeDataPopulator',
14
+ methodName: 'populateSearchData',
15
+ arguments: {
16
+ module: moduleName,
17
+ searchString: searchString,
18
+ entityId: entityId
19
+ }
20
+ };
21
+ await entityIdReConstructor(payload);
22
+
23
+ await executeRpcRequest(page, payload);
24
+ }
25
+
26
+ });
@@ -0,0 +1,108 @@
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 _fs = _interopRequireDefault(require("fs"));
10
+ var _logger = require("../../utils/logger");
11
+ var _DataGeneratorHelper = require("./DataGeneratorHelper");
12
+ var _helpers = require("@zohodesk/testinglibrary/helpers");
13
+ var _DataGeneratorError = require("./DataGeneratorError");
14
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
15
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
16
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
17
+ var _DataGenerator_brand = /*#__PURE__*/new WeakSet();
18
+ class DataGenerator {
19
+ constructor() {
20
+ _classPrivateMethodInitSpec(this, _DataGenerator_brand);
21
+ }
22
+ async generate(testInfo, actorInfo, generatorType, generatorName, scenarioName, dataTable) {
23
+ try {
24
+ let generators;
25
+ if (generatorType === 'API') {
26
+ generators = await _assertClassBrand(_DataGenerator_brand, this, _generateAPIGenerator).call(this, generatorName);
27
+ } else {
28
+ generators = await _assertClassBrand(_DataGenerator_brand, this, _getGenerator).call(this, testInfo, generatorName);
29
+ }
30
+ const processedGenerators = await (0, _DataGeneratorHelper.processGenerator)(generators, dataTable);
31
+ const apiPayload = await _assertClassBrand(_DataGenerator_brand, this, _constructApiPayload).call(this, scenarioName, processedGenerators, actorInfo);
32
+ const response = await (0, _DataGeneratorHelper.makeRequest)(process.env.DG_SERVICE_DOMAIN + process.env.DG_SERVICE_API_PATH, apiPayload);
33
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Generated response for the generator: ${generatorName} for scenario: ${scenarioName}, Response: ${JSON.stringify(response)}`);
34
+ return response;
35
+ } catch (error) {
36
+ if (error instanceof _DataGeneratorError.DataGeneratorError) {
37
+ console.error(error.getMessage());
38
+ console.error("Stack trace:", error.stack);
39
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, error.getMessage());
40
+ } else {
41
+ console.error("Error Type:", error.constructor.name);
42
+ console.error("Error Message:", error.message);
43
+ console.error("Stack trace:", error.stack);
44
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, `${error.constructor.name} - Message: ${error.message}`);
45
+ }
46
+ console.error('Data Generation failed for the generator: ', generatorName, "\n\nError response :", error);
47
+ throw error;
48
+ }
49
+ }
50
+ async getDataGenUserExecutionContext(edition, profile) {
51
+ try {
52
+ const dataGenUserDetails = await (0, _helpers.getUserForSelectedEditionAndProfile)(edition, profile);
53
+ return dataGenUserDetails;
54
+ } catch (error) {
55
+ console.error('Error occurred while fetching data generation user details: ', error);
56
+ throw error;
57
+ }
58
+ }
59
+ }
60
+ async function _getGenerator(testInfo, generatorName) {
61
+ let generator = null;
62
+ let generatorFilePath = await (0, _DataGeneratorHelper.getGeneratorFilePath)(testInfo.file);
63
+ generatorFilePath = _path.default.join(generatorFilePath, "../../data-generators/generators.json");
64
+ if (_fs.default.existsSync(generatorFilePath)) {
65
+ const data = _fs.default.readFileSync(generatorFilePath, 'utf8');
66
+ const generatorObj = JSON.parse(data);
67
+ if (generatorName || generatorObj.generators) {
68
+ generator = generatorObj.generators[generatorName] || null;
69
+ }
70
+ }
71
+ if (!generator) {
72
+ throw new _DataGeneratorError.GeneratorError(`Generator "${generatorName}" could not be found in the path located at "${generatorFilePath}"`);
73
+ }
74
+ return generator;
75
+ }
76
+ async function _generateAPIGenerator(operationId) {
77
+ return [{
78
+ type: "dynamic",
79
+ generatorOperationId: operationId,
80
+ dataPath: "$.response.body:$",
81
+ name: operationId
82
+ }];
83
+ }
84
+ async function _constructApiPayload(scenarioName, processedGenerators, actorInfo) {
85
+ const dataGeneratorObj = actorInfo['data-generator'];
86
+ if (!dataGeneratorObj) {
87
+ throw new _DataGeneratorError.DataGeneratorConfigurationError(`Data Generator configuration is missing for the profile: ${actorInfo['profile']}`);
88
+ }
89
+ const apiPayload = {
90
+ scenario_name: scenarioName,
91
+ data_generation_templates: processedGenerators,
92
+ ...dataGeneratorObj
93
+ };
94
+ const account = apiPayload.account;
95
+ if (account) {
96
+ account.email = actorInfo.email;
97
+ account.password = actorInfo.password;
98
+ }
99
+ const environmentDetails = apiPayload.environmentDetails || {};
100
+ if (environmentDetails) {
101
+ environmentDetails.iam_url = process.env.DG_IAM_DOMAIN;
102
+ const domainUrl = new URL(process.env.domain);
103
+ environmentDetails.host = domainUrl.origin;
104
+ }
105
+ apiPayload.environmentDetails = environmentDetails;
106
+ return apiPayload;
107
+ }
108
+ var _default = exports.default = DataGenerator;