create-appraisejs 0.3.1-alpha.0 → 0.3.1-alpha.1

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 (503) hide show
  1. package/README.md +17 -17
  2. package/dist/cli.e2e.test.d.ts +2 -2
  3. package/dist/cli.e2e.test.js +74 -72
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/config.test.d.ts +2 -2
  7. package/dist/config.test.js +64 -64
  8. package/dist/copy-template.test.d.ts +2 -2
  9. package/dist/copy-template.test.js +70 -70
  10. package/dist/download-repo.test.d.ts +2 -2
  11. package/dist/download-repo.test.js +15 -13
  12. package/dist/install.test.d.ts +2 -2
  13. package/dist/install.test.js +115 -114
  14. package/dist/prepare-template-utils.d.ts.map +1 -1
  15. package/dist/prepare-template-utils.js.map +1 -1
  16. package/dist/prompts.d.ts.map +1 -1
  17. package/dist/prompts.js +2 -2
  18. package/dist/prompts.js.map +1 -1
  19. package/dist/prompts.test.d.ts +2 -2
  20. package/dist/prompts.test.js +54 -54
  21. package/dist/sync-templates-utils.d.ts.map +1 -1
  22. package/dist/sync-templates-utils.js +1 -5
  23. package/dist/sync-templates-utils.js.map +1 -1
  24. package/package.json +1 -1
  25. package/templates/blank/.editorconfig +11 -0
  26. package/templates/blank/.gitattributes +21 -0
  27. package/templates/blank/.gitconfig.appraise +14 -0
  28. package/templates/blank/.prettierrc +13 -0
  29. package/templates/blank/.vscode/settings.json +2 -0
  30. package/templates/blank/README.md +12 -12
  31. package/templates/blank/components.json +24 -24
  32. package/templates/blank/cucumber.mjs +16 -16
  33. package/templates/blank/e2e/README.md +56 -0
  34. package/templates/blank/e2e/apply-migrations.mjs +76 -0
  35. package/templates/blank/e2e/appraise-smoke.spec.ts +78 -0
  36. package/templates/blank/e2e/authoring.spec.ts +53 -0
  37. package/templates/blank/e2e/crud-configuration.spec.ts +138 -0
  38. package/templates/blank/e2e/crud-tests.spec.ts +76 -0
  39. package/templates/blank/e2e/helpers/forms.ts +186 -0
  40. package/templates/blank/e2e/helpers/navigation.ts +27 -0
  41. package/templates/blank/e2e/helpers/table.ts +45 -0
  42. package/templates/blank/e2e/helpers/test-data.ts +549 -0
  43. package/templates/blank/e2e/helpers/ui.ts +41 -0
  44. package/templates/blank/e2e/navigation.spec.ts +101 -0
  45. package/templates/blank/e2e/runs-and-reports.spec.ts +82 -0
  46. package/templates/blank/e2e/settings-sync.spec.ts +39 -0
  47. package/templates/blank/e2e/start-server.mjs +61 -0
  48. package/templates/blank/eslint.config.mjs +4 -4
  49. package/templates/blank/gitignore +0 -3
  50. package/templates/blank/next-env.d.ts +1 -1
  51. package/templates/blank/package-lock.json +58 -102
  52. package/templates/blank/package.json +10 -9
  53. package/templates/blank/packages/cucumber-runtime/package.json +13 -13
  54. package/templates/blank/packages/cucumber-runtime/src/cache.util.ts +93 -93
  55. package/templates/blank/packages/cucumber-runtime/src/cli.ts +77 -68
  56. package/templates/blank/packages/cucumber-runtime/src/environment.util.ts +21 -21
  57. package/templates/blank/packages/cucumber-runtime/src/executor.ts +32 -32
  58. package/templates/blank/packages/cucumber-runtime/src/index.ts +17 -17
  59. package/templates/blank/packages/cucumber-runtime/src/locator.util.ts +234 -234
  60. package/templates/blank/packages/cucumber-runtime/src/parameter-types.ts +7 -7
  61. package/templates/blank/packages/cucumber-runtime/src/random-data.util.ts +35 -35
  62. package/templates/blank/packages/cucumber-runtime/src/types.ts +13 -13
  63. package/templates/blank/packages/cucumber-runtime/src/world.ts +44 -44
  64. package/templates/blank/packages/cucumber-runtime/tsconfig.json +11 -11
  65. package/templates/blank/packages/locator-picker-companion/dist/cli.js +1 -1
  66. package/templates/blank/packages/locator-picker-companion/dist/index.d.ts +3 -3
  67. package/templates/blank/packages/locator-picker-companion/dist/index.js +3 -3
  68. package/templates/blank/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
  69. package/templates/blank/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
  70. package/templates/blank/packages/locator-picker-companion/dist/selector-generator.js +233 -229
  71. package/templates/blank/packages/locator-picker-companion/src/cli.ts +1 -7
  72. package/templates/blank/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
  73. package/templates/blank/packages/locator-picker-companion/src/launcher.ts +1 -3
  74. package/templates/blank/packages/locator-picker-companion/src/session-file.ts +4 -15
  75. package/templates/blank/packages/locator-picker-companion/src/types.ts +1 -8
  76. package/templates/blank/playwright.config.ts +46 -0
  77. package/templates/blank/postcss.config.mjs +8 -8
  78. package/templates/blank/prisma/dev.db +0 -0
  79. package/templates/blank/scripts/configure-git-line-endings.mjs +91 -0
  80. package/templates/blank/scripts/install-template-step.ts +5 -1
  81. package/templates/blank/scripts/lib/step-matcher.test.ts +3 -3
  82. package/templates/blank/scripts/lib/step-matcher.ts +5 -1
  83. package/templates/blank/scripts/lib/template-step-installer.test.ts +4 -2
  84. package/templates/blank/scripts/lib/template-step-installer.ts +16 -4
  85. package/templates/blank/scripts/lib/template-step-registry.test.ts +1 -1
  86. package/templates/blank/scripts/lib/template-step-registry.ts +4 -1
  87. package/templates/blank/scripts/run-fallow-commit.mjs +4 -6
  88. package/templates/blank/scripts/sync-all.ts +7 -6
  89. package/templates/blank/scripts/sync-appraise-base-template.ts +84 -77
  90. package/templates/blank/scripts/sync-environments.ts +47 -44
  91. package/templates/blank/scripts/sync-locator-groups.ts +67 -76
  92. package/templates/blank/scripts/sync-locators.ts +50 -53
  93. package/templates/blank/scripts/sync-modules.ts +42 -42
  94. package/templates/blank/scripts/sync-tags.ts +51 -51
  95. package/templates/blank/scripts/sync-template-step-groups.ts +34 -32
  96. package/templates/blank/scripts/sync-template-steps.ts +97 -97
  97. package/templates/blank/scripts/sync-test-cases.ts +65 -74
  98. package/templates/blank/scripts/sync-test-suites.ts +85 -80
  99. package/templates/blank/src/actions/server-action-boundary.test.ts +1 -7
  100. package/templates/blank/src/actions/settings/sync-actions.ts +3 -1
  101. package/templates/blank/src/actions/tags/tag-actions.ts +1 -7
  102. package/templates/blank/src/actions/template-test-case/template-test-case-actions.ts +3 -1
  103. package/templates/blank/src/app/(base)/environments/create/page.tsx +28 -28
  104. package/templates/blank/src/app/(base)/environments/environment-form.tsx +3 -2
  105. package/templates/blank/src/app/(base)/environments/environment-helpers.ts +4 -1
  106. package/templates/blank/src/app/(base)/layout.tsx +10 -10
  107. package/templates/blank/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
  108. package/templates/blank/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  109. package/templates/blank/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  110. package/templates/blank/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  111. package/templates/blank/src/app/(base)/locator-groups/page.tsx +9 -19
  112. package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
  113. package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
  114. package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
  115. package/templates/blank/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
  116. package/templates/blank/src/app/(base)/locators/locator-file-sync.ts +1 -5
  117. package/templates/blank/src/app/(base)/locators/locator-helpers.ts +2 -12
  118. package/templates/blank/src/app/(base)/locators/locator-table-columns.tsx +59 -60
  119. package/templates/blank/src/app/(base)/modules/module-form.tsx +3 -1
  120. package/templates/blank/src/app/(base)/reports/overview-chart.tsx +49 -49
  121. package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
  122. package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  123. package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
  124. package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
  125. package/templates/blank/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
  126. package/templates/blank/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
  127. package/templates/blank/src/app/(base)/tags/tag-form.test.tsx +2 -10
  128. package/templates/blank/src/app/(base)/tags/tag-form.tsx +5 -3
  129. package/templates/blank/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  130. package/templates/blank/src/app/(base)/tags/tag-table.tsx +29 -29
  131. package/templates/blank/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  132. package/templates/blank/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
  133. package/templates/blank/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
  134. package/templates/blank/src/app/(base)/template-steps/paramChip.tsx +6 -10
  135. package/templates/blank/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
  136. package/templates/blank/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
  137. package/templates/blank/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
  138. package/templates/blank/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
  139. package/templates/blank/src/app/(base)/template-steps/template-step-types.ts +1 -5
  140. package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
  141. package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
  142. package/templates/blank/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
  143. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
  144. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
  145. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  146. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  147. package/templates/blank/src/app/(base)/test-cases/create/page.tsx +1 -5
  148. package/templates/blank/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
  149. package/templates/blank/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
  150. package/templates/blank/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
  151. package/templates/blank/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
  152. package/templates/blank/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
  153. package/templates/blank/src/app/(base)/test-cases/test-case-form.tsx +63 -78
  154. package/templates/blank/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
  155. package/templates/blank/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
  156. package/templates/blank/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
  157. package/templates/blank/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
  158. package/templates/blank/src/app/api/test-runs/[runId]/download/route.ts +1 -4
  159. package/templates/blank/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
  160. package/templates/blank/src/assets/icons/empty-tube.tsx +23 -23
  161. package/templates/blank/src/assets/icons/tube-plus.tsx +29 -29
  162. package/templates/blank/src/components/data-visualization/info-card.tsx +56 -70
  163. package/templates/blank/src/components/data-visualization/info-grid.tsx +22 -22
  164. package/templates/blank/src/components/diagram/add-node-prompt-node.tsx +1 -1
  165. package/templates/blank/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
  166. package/templates/blank/src/components/diagram/dynamic-parameters.test.tsx +4 -1
  167. package/templates/blank/src/components/diagram/dynamic-parameters.tsx +0 -1
  168. package/templates/blank/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
  169. package/templates/blank/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
  170. package/templates/blank/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
  171. package/templates/blank/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
  172. package/templates/blank/src/components/diagram/flow-diagram-node-search.tsx +65 -65
  173. package/templates/blank/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
  174. package/templates/blank/src/components/diagram/flow-diagram-view.tsx +1 -7
  175. package/templates/blank/src/components/diagram/flow-node-data-helpers.ts +1 -1
  176. package/templates/blank/src/components/diagram/node-form-fields-content.tsx +9 -2
  177. package/templates/blank/src/components/diagram/node-form-helpers.test.ts +3 -1
  178. package/templates/blank/src/components/diagram/node-form-helpers.ts +1 -4
  179. package/templates/blank/src/components/diagram/node-form-template-step-selection.ts +1 -4
  180. package/templates/blank/src/components/diagram/node-form.test.tsx +25 -0
  181. package/templates/blank/src/components/diagram/node-form.tsx +2 -12
  182. package/templates/blank/src/components/diagram/options-header-node.test.tsx +4 -1
  183. package/templates/blank/src/components/diagram/options-header-node.tsx +140 -130
  184. package/templates/blank/src/components/diagram/use-flow-diagram.ts +1 -2
  185. package/templates/blank/src/components/form/error-message.tsx +7 -7
  186. package/templates/blank/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  187. package/templates/blank/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  188. package/templates/blank/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  189. package/templates/blank/src/components/navigation/entity-search-command.tsx +3 -9
  190. package/templates/blank/src/components/navigation/nav-link.tsx +60 -60
  191. package/templates/blank/src/components/test-case/test-case-form-helpers.test.ts +1 -5
  192. package/templates/blank/src/components/test-case/test-case-form-helpers.ts +1 -5
  193. package/templates/blank/src/components/test-case/test-case-picker-helpers.ts +8 -7
  194. package/templates/blank/src/components/test-case/test-case-picker.tsx +2 -6
  195. package/templates/blank/src/components/test-run/log-viewer.test.tsx +25 -0
  196. package/templates/blank/src/components/test-run/log-viewer.tsx +2 -2
  197. package/templates/blank/src/components/test-run/test-run-details-guards.ts +10 -1
  198. package/templates/blank/src/components/test-run/test-run-details.test.tsx +9 -19
  199. package/templates/blank/src/components/test-run/use-log-viewer.ts +2 -8
  200. package/templates/blank/src/components/test-run/use-test-run-header.ts +1 -4
  201. package/templates/blank/src/components/test-suite/test-suite-picker.tsx +1 -1
  202. package/templates/blank/src/components/theme/theme-provider.tsx +7 -1
  203. package/templates/blank/src/components/typography/page-header-subtitle.tsx +7 -7
  204. package/templates/blank/src/components/typography/page-header.tsx +7 -7
  205. package/templates/blank/src/components/ui/chart.tsx +2 -8
  206. package/templates/blank/src/components/ui/command.tsx +2 -5
  207. package/templates/blank/src/components/ui/data-table-column-header.tsx +3 -3
  208. package/templates/blank/src/components/ui/data-table.test.tsx +1 -8
  209. package/templates/blank/src/components/ui/dialog.tsx +1 -4
  210. package/templates/blank/src/components/ui/select.tsx +2 -2
  211. package/templates/blank/src/components/ui/separator.tsx +5 -1
  212. package/templates/blank/src/components/ui/skeleton.tsx +7 -7
  213. package/templates/blank/src/components/ui/table.tsx +1 -1
  214. package/templates/blank/src/components/ui/toaster.tsx +26 -26
  215. package/templates/blank/src/components/ui/tooltip.tsx +1 -1
  216. package/templates/blank/src/constants/form-opts/locator-group-form-opts.ts +1 -1
  217. package/templates/blank/src/lib/locator-group-file-utils.ts +5 -1
  218. package/templates/blank/src/lib/locator-picker/session-manager.ts +1 -2
  219. package/templates/blank/src/lib/metrics/metric-calculator.test.ts +105 -6
  220. package/templates/blank/src/lib/metrics/metric-calculator.ts +39 -40
  221. package/templates/blank/src/lib/sync/sync-executor.ts +1 -4
  222. package/templates/blank/src/lib/sync/sync-pending-counts.test.ts +201 -7
  223. package/templates/blank/src/lib/sync/sync-pending-counts.ts +81 -13
  224. package/templates/blank/src/lib/template-automation-paths.ts +1 -1
  225. package/templates/blank/src/lib/template-sync-utils.d.ts +14 -7
  226. package/templates/blank/src/lib/test-case-utils.ts +6 -6
  227. package/templates/blank/src/lib/test-run/log-formatter.ts +82 -83
  228. package/templates/blank/src/lib/test-run/report-parser.ts +352 -352
  229. package/templates/blank/src/lib/transformers/gherkin-converter.ts +42 -42
  230. package/templates/blank/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  231. package/templates/blank/src/lib/utils/node-param-validation.ts +81 -81
  232. package/templates/blank/src/lib/utils/template-step-file-generator.ts +5 -3
  233. package/templates/blank/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
  234. package/templates/blank/src/services/dashboard/dashboard-service.test.ts +28 -1
  235. package/templates/blank/src/services/dashboard/dashboard-service.ts +2 -0
  236. package/templates/blank/src/services/locator/locator-service.test.ts +1 -3
  237. package/templates/blank/src/services/locator/locator-service.ts +3 -1
  238. package/templates/blank/src/services/locator/locator-sync-utils.test.ts +1 -4
  239. package/templates/blank/src/services/module/module-service.ts +1 -4
  240. package/templates/blank/src/services/report/report-service.test.ts +70 -6
  241. package/templates/blank/src/services/report/report-service.ts +52 -9
  242. package/templates/blank/src/services/shared/errors.ts +2 -4
  243. package/templates/blank/src/services/template-step/template-step-service.ts +3 -1
  244. package/templates/blank/src/services/template-step-group/template-step-group-service.ts +3 -1
  245. package/templates/blank/src/services/test-case/test-case-service.ts +0 -5
  246. package/templates/blank/src/services/test-run/test-run-service.test.ts +3 -6
  247. package/templates/blank/src/services/test-run/test-run-service.ts +12 -7
  248. package/templates/blank/src/services/test-suite/test-suite-service.test.ts +1 -5
  249. package/templates/blank/src/services/test-suite/test-suite-service.ts +2 -4
  250. package/templates/blank/src/types/form/actionHandler.ts +1 -5
  251. package/templates/blank/tsconfig.json +8 -8
  252. package/templates/default/packages/locator-picker-companion/dist/cli.d.ts +1 -1
  253. package/templates/default/packages/locator-picker-companion/dist/cli.js +313 -279
  254. package/templates/default/packages/locator-picker-companion/dist/index.d.ts +3 -3
  255. package/templates/default/packages/locator-picker-companion/dist/index.js +3 -3
  256. package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.d.ts +1 -1
  257. package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.js +526 -481
  258. package/templates/default/packages/locator-picker-companion/dist/launcher.d.ts +13 -10
  259. package/templates/default/packages/locator-picker-companion/dist/launcher.js +47 -48
  260. package/templates/default/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
  261. package/templates/default/packages/locator-picker-companion/dist/selector-generator.js +233 -229
  262. package/templates/default/packages/locator-picker-companion/dist/session-file.d.ts +30 -22
  263. package/templates/default/packages/locator-picker-companion/dist/session-file.js +116 -104
  264. package/templates/default/packages/locator-picker-companion/dist/types.d.ts +25 -25
  265. package/templates/default/packages/locator-picker-companion/dist/types.js +1 -1
  266. package/templates/starter/.editorconfig +11 -0
  267. package/templates/starter/.gitattributes +21 -0
  268. package/templates/starter/.gitconfig.appraise +14 -0
  269. package/templates/starter/.prettierrc +13 -0
  270. package/templates/starter/.vscode/settings.json +2 -0
  271. package/templates/starter/README.md +12 -12
  272. package/templates/starter/automation/steps/actions/click.step.ts +56 -58
  273. package/templates/starter/automation/steps/actions/hover.step.ts +25 -27
  274. package/templates/starter/automation/steps/actions/input.step.ts +85 -108
  275. package/templates/starter/automation/steps/actions/navigation.step.ts +67 -70
  276. package/templates/starter/automation/steps/actions/random_data.step.ts +149 -143
  277. package/templates/starter/automation/steps/actions/store.step.ts +69 -1
  278. package/templates/starter/automation/steps/actions/wait.step.ts +84 -1
  279. package/templates/starter/automation/steps/validations/active_state_assertion.step.ts +28 -30
  280. package/templates/starter/automation/steps/validations/navigation_assertion.step.ts +20 -22
  281. package/templates/starter/automation/steps/validations/text_assertion.step.ts +67 -107
  282. package/templates/starter/automation/steps/validations/visibility_assertion.step.ts +24 -26
  283. package/templates/starter/components.json +24 -24
  284. package/templates/starter/cucumber.mjs +16 -16
  285. package/templates/starter/e2e/README.md +56 -0
  286. package/templates/starter/e2e/apply-migrations.mjs +76 -0
  287. package/templates/starter/e2e/appraise-smoke.spec.ts +78 -0
  288. package/templates/starter/e2e/authoring.spec.ts +53 -0
  289. package/templates/starter/e2e/crud-configuration.spec.ts +138 -0
  290. package/templates/starter/e2e/crud-tests.spec.ts +76 -0
  291. package/templates/starter/e2e/helpers/forms.ts +186 -0
  292. package/templates/starter/e2e/helpers/navigation.ts +27 -0
  293. package/templates/starter/e2e/helpers/table.ts +45 -0
  294. package/templates/starter/e2e/helpers/test-data.ts +549 -0
  295. package/templates/starter/e2e/helpers/ui.ts +41 -0
  296. package/templates/starter/e2e/navigation.spec.ts +101 -0
  297. package/templates/starter/e2e/runs-and-reports.spec.ts +82 -0
  298. package/templates/starter/e2e/settings-sync.spec.ts +39 -0
  299. package/templates/starter/e2e/start-server.mjs +61 -0
  300. package/templates/starter/eslint.config.mjs +4 -4
  301. package/templates/starter/gitignore +0 -3
  302. package/templates/starter/next-env.d.ts +1 -1
  303. package/templates/starter/package-lock.json +58 -102
  304. package/templates/starter/package.json +10 -9
  305. package/templates/starter/packages/cucumber-runtime/package.json +13 -13
  306. package/templates/starter/packages/cucumber-runtime/src/cache.util.ts +93 -93
  307. package/templates/starter/packages/cucumber-runtime/src/cli.ts +77 -68
  308. package/templates/starter/packages/cucumber-runtime/src/environment.util.ts +21 -21
  309. package/templates/starter/packages/cucumber-runtime/src/executor.ts +32 -32
  310. package/templates/starter/packages/cucumber-runtime/src/index.ts +17 -17
  311. package/templates/starter/packages/cucumber-runtime/src/locator.util.ts +234 -234
  312. package/templates/starter/packages/cucumber-runtime/src/parameter-types.ts +7 -7
  313. package/templates/starter/packages/cucumber-runtime/src/random-data.util.ts +35 -35
  314. package/templates/starter/packages/cucumber-runtime/src/types.ts +13 -13
  315. package/templates/starter/packages/cucumber-runtime/src/world.ts +44 -44
  316. package/templates/starter/packages/cucumber-runtime/tsconfig.json +11 -11
  317. package/templates/starter/packages/locator-picker-companion/dist/cli.js +1 -1
  318. package/templates/starter/packages/locator-picker-companion/dist/index.d.ts +3 -3
  319. package/templates/starter/packages/locator-picker-companion/dist/index.js +3 -3
  320. package/templates/starter/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
  321. package/templates/starter/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
  322. package/templates/starter/packages/locator-picker-companion/dist/selector-generator.js +233 -229
  323. package/templates/starter/packages/locator-picker-companion/src/cli.ts +1 -7
  324. package/templates/starter/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
  325. package/templates/starter/packages/locator-picker-companion/src/launcher.ts +1 -3
  326. package/templates/starter/packages/locator-picker-companion/src/session-file.ts +4 -15
  327. package/templates/starter/packages/locator-picker-companion/src/types.ts +1 -8
  328. package/templates/starter/playwright.config.ts +46 -0
  329. package/templates/starter/postcss.config.mjs +8 -8
  330. package/templates/starter/prisma/dev.db +0 -0
  331. package/templates/starter/scripts/configure-git-line-endings.mjs +91 -0
  332. package/templates/starter/scripts/install-template-step.ts +5 -1
  333. package/templates/starter/scripts/lib/step-matcher.test.ts +3 -3
  334. package/templates/starter/scripts/lib/step-matcher.ts +5 -1
  335. package/templates/starter/scripts/lib/template-step-installer.test.ts +4 -2
  336. package/templates/starter/scripts/lib/template-step-installer.ts +16 -4
  337. package/templates/starter/scripts/lib/template-step-registry.test.ts +1 -1
  338. package/templates/starter/scripts/lib/template-step-registry.ts +4 -1
  339. package/templates/starter/scripts/run-fallow-commit.mjs +4 -6
  340. package/templates/starter/scripts/sync-all.ts +7 -6
  341. package/templates/starter/scripts/sync-appraise-base-template.ts +84 -77
  342. package/templates/starter/scripts/sync-environments.ts +47 -44
  343. package/templates/starter/scripts/sync-locator-groups.ts +67 -76
  344. package/templates/starter/scripts/sync-locators.ts +50 -53
  345. package/templates/starter/scripts/sync-modules.ts +42 -42
  346. package/templates/starter/scripts/sync-tags.ts +51 -51
  347. package/templates/starter/scripts/sync-template-step-groups.ts +34 -32
  348. package/templates/starter/scripts/sync-template-steps.ts +97 -97
  349. package/templates/starter/scripts/sync-test-cases.ts +65 -74
  350. package/templates/starter/scripts/sync-test-suites.ts +85 -80
  351. package/templates/starter/src/actions/server-action-boundary.test.ts +1 -7
  352. package/templates/starter/src/actions/settings/sync-actions.ts +3 -1
  353. package/templates/starter/src/actions/tags/tag-actions.ts +1 -7
  354. package/templates/starter/src/actions/template-test-case/template-test-case-actions.ts +3 -1
  355. package/templates/starter/src/app/(base)/environments/create/page.tsx +28 -28
  356. package/templates/starter/src/app/(base)/environments/environment-form.tsx +3 -2
  357. package/templates/starter/src/app/(base)/environments/environment-helpers.ts +4 -1
  358. package/templates/starter/src/app/(base)/layout.tsx +10 -10
  359. package/templates/starter/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
  360. package/templates/starter/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  361. package/templates/starter/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  362. package/templates/starter/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  363. package/templates/starter/src/app/(base)/locator-groups/page.tsx +9 -19
  364. package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
  365. package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
  366. package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
  367. package/templates/starter/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
  368. package/templates/starter/src/app/(base)/locators/locator-file-sync.ts +1 -5
  369. package/templates/starter/src/app/(base)/locators/locator-helpers.ts +2 -12
  370. package/templates/starter/src/app/(base)/locators/locator-table-columns.tsx +59 -60
  371. package/templates/starter/src/app/(base)/modules/module-form.tsx +3 -1
  372. package/templates/starter/src/app/(base)/reports/overview-chart.tsx +49 -49
  373. package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
  374. package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  375. package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
  376. package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
  377. package/templates/starter/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
  378. package/templates/starter/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
  379. package/templates/starter/src/app/(base)/tags/tag-form.test.tsx +2 -10
  380. package/templates/starter/src/app/(base)/tags/tag-form.tsx +5 -3
  381. package/templates/starter/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  382. package/templates/starter/src/app/(base)/tags/tag-table.tsx +29 -29
  383. package/templates/starter/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  384. package/templates/starter/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
  385. package/templates/starter/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
  386. package/templates/starter/src/app/(base)/template-steps/paramChip.tsx +6 -10
  387. package/templates/starter/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
  388. package/templates/starter/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
  389. package/templates/starter/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
  390. package/templates/starter/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
  391. package/templates/starter/src/app/(base)/template-steps/template-step-types.ts +1 -5
  392. package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
  393. package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
  394. package/templates/starter/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
  395. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
  396. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
  397. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  398. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  399. package/templates/starter/src/app/(base)/test-cases/create/page.tsx +1 -5
  400. package/templates/starter/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
  401. package/templates/starter/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
  402. package/templates/starter/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
  403. package/templates/starter/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
  404. package/templates/starter/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
  405. package/templates/starter/src/app/(base)/test-cases/test-case-form.tsx +63 -78
  406. package/templates/starter/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
  407. package/templates/starter/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
  408. package/templates/starter/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
  409. package/templates/starter/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
  410. package/templates/starter/src/app/api/test-runs/[runId]/download/route.ts +1 -4
  411. package/templates/starter/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
  412. package/templates/starter/src/assets/icons/empty-tube.tsx +23 -23
  413. package/templates/starter/src/assets/icons/tube-plus.tsx +29 -29
  414. package/templates/starter/src/components/data-visualization/info-card.tsx +56 -70
  415. package/templates/starter/src/components/data-visualization/info-grid.tsx +22 -22
  416. package/templates/starter/src/components/diagram/add-node-prompt-node.tsx +1 -1
  417. package/templates/starter/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
  418. package/templates/starter/src/components/diagram/dynamic-parameters.test.tsx +4 -1
  419. package/templates/starter/src/components/diagram/dynamic-parameters.tsx +0 -1
  420. package/templates/starter/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
  421. package/templates/starter/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
  422. package/templates/starter/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
  423. package/templates/starter/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
  424. package/templates/starter/src/components/diagram/flow-diagram-node-search.tsx +65 -65
  425. package/templates/starter/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
  426. package/templates/starter/src/components/diagram/flow-diagram-view.tsx +1 -7
  427. package/templates/starter/src/components/diagram/flow-node-data-helpers.ts +1 -1
  428. package/templates/starter/src/components/diagram/node-form-fields-content.tsx +9 -2
  429. package/templates/starter/src/components/diagram/node-form-helpers.test.ts +3 -1
  430. package/templates/starter/src/components/diagram/node-form-helpers.ts +1 -4
  431. package/templates/starter/src/components/diagram/node-form-template-step-selection.ts +1 -4
  432. package/templates/starter/src/components/diagram/node-form.test.tsx +25 -0
  433. package/templates/starter/src/components/diagram/node-form.tsx +2 -12
  434. package/templates/starter/src/components/diagram/options-header-node.test.tsx +4 -1
  435. package/templates/starter/src/components/diagram/options-header-node.tsx +140 -130
  436. package/templates/starter/src/components/diagram/use-flow-diagram.ts +1 -2
  437. package/templates/starter/src/components/form/error-message.tsx +7 -7
  438. package/templates/starter/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  439. package/templates/starter/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  440. package/templates/starter/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  441. package/templates/starter/src/components/navigation/entity-search-command.tsx +3 -9
  442. package/templates/starter/src/components/navigation/nav-link.tsx +60 -60
  443. package/templates/starter/src/components/test-case/test-case-form-helpers.test.ts +1 -5
  444. package/templates/starter/src/components/test-case/test-case-form-helpers.ts +1 -5
  445. package/templates/starter/src/components/test-case/test-case-picker-helpers.ts +8 -7
  446. package/templates/starter/src/components/test-case/test-case-picker.tsx +2 -6
  447. package/templates/starter/src/components/test-run/log-viewer.test.tsx +25 -0
  448. package/templates/starter/src/components/test-run/log-viewer.tsx +2 -2
  449. package/templates/starter/src/components/test-run/test-run-details-guards.ts +10 -1
  450. package/templates/starter/src/components/test-run/test-run-details.test.tsx +9 -19
  451. package/templates/starter/src/components/test-run/use-log-viewer.ts +2 -8
  452. package/templates/starter/src/components/test-run/use-test-run-header.ts +1 -4
  453. package/templates/starter/src/components/test-suite/test-suite-picker.tsx +1 -1
  454. package/templates/starter/src/components/theme/theme-provider.tsx +7 -1
  455. package/templates/starter/src/components/typography/page-header-subtitle.tsx +7 -7
  456. package/templates/starter/src/components/typography/page-header.tsx +7 -7
  457. package/templates/starter/src/components/ui/chart.tsx +2 -8
  458. package/templates/starter/src/components/ui/command.tsx +2 -5
  459. package/templates/starter/src/components/ui/data-table-column-header.tsx +3 -3
  460. package/templates/starter/src/components/ui/data-table.test.tsx +1 -8
  461. package/templates/starter/src/components/ui/dialog.tsx +1 -4
  462. package/templates/starter/src/components/ui/select.tsx +2 -2
  463. package/templates/starter/src/components/ui/separator.tsx +5 -1
  464. package/templates/starter/src/components/ui/skeleton.tsx +7 -7
  465. package/templates/starter/src/components/ui/table.tsx +1 -1
  466. package/templates/starter/src/components/ui/toaster.tsx +26 -26
  467. package/templates/starter/src/components/ui/tooltip.tsx +1 -1
  468. package/templates/starter/src/constants/form-opts/locator-group-form-opts.ts +1 -1
  469. package/templates/starter/src/lib/locator-group-file-utils.ts +5 -1
  470. package/templates/starter/src/lib/locator-picker/session-manager.ts +1 -2
  471. package/templates/starter/src/lib/metrics/metric-calculator.test.ts +105 -6
  472. package/templates/starter/src/lib/metrics/metric-calculator.ts +39 -40
  473. package/templates/starter/src/lib/sync/sync-executor.ts +1 -4
  474. package/templates/starter/src/lib/sync/sync-pending-counts.test.ts +201 -7
  475. package/templates/starter/src/lib/sync/sync-pending-counts.ts +81 -13
  476. package/templates/starter/src/lib/template-automation-paths.ts +1 -1
  477. package/templates/starter/src/lib/template-sync-utils.d.ts +14 -7
  478. package/templates/starter/src/lib/test-case-utils.ts +6 -6
  479. package/templates/starter/src/lib/test-run/log-formatter.ts +82 -83
  480. package/templates/starter/src/lib/test-run/report-parser.ts +352 -352
  481. package/templates/starter/src/lib/transformers/gherkin-converter.ts +42 -42
  482. package/templates/starter/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  483. package/templates/starter/src/lib/utils/node-param-validation.ts +81 -81
  484. package/templates/starter/src/lib/utils/template-step-file-generator.ts +5 -3
  485. package/templates/starter/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
  486. package/templates/starter/src/services/dashboard/dashboard-service.test.ts +28 -1
  487. package/templates/starter/src/services/dashboard/dashboard-service.ts +2 -0
  488. package/templates/starter/src/services/locator/locator-service.test.ts +1 -3
  489. package/templates/starter/src/services/locator/locator-service.ts +3 -1
  490. package/templates/starter/src/services/locator/locator-sync-utils.test.ts +1 -4
  491. package/templates/starter/src/services/module/module-service.ts +1 -4
  492. package/templates/starter/src/services/report/report-service.test.ts +70 -6
  493. package/templates/starter/src/services/report/report-service.ts +52 -9
  494. package/templates/starter/src/services/shared/errors.ts +2 -4
  495. package/templates/starter/src/services/template-step/template-step-service.ts +3 -1
  496. package/templates/starter/src/services/template-step-group/template-step-group-service.ts +3 -1
  497. package/templates/starter/src/services/test-case/test-case-service.ts +0 -5
  498. package/templates/starter/src/services/test-run/test-run-service.test.ts +3 -6
  499. package/templates/starter/src/services/test-run/test-run-service.ts +12 -7
  500. package/templates/starter/src/services/test-suite/test-suite-service.test.ts +1 -5
  501. package/templates/starter/src/services/test-suite/test-suite-service.ts +2 -4
  502. package/templates/starter/src/types/form/actionHandler.ts +1 -5
  503. package/templates/starter/tsconfig.json +8 -8
@@ -1,144 +1,150 @@
1
1
  import { When, Then, CustomWorld, expect, SelectorName, resolveLocator, getEnvironment, generateRandomData, RandomDataType } from '../../../packages/cucumber-runtime/src/index.js'
2
- /**
3
- * @name random data
4
- * @description Template steps that handles random data generation
5
- * @type ACTION
6
- */
7
-
8
- // This file is generated automatically. Add template steps to this group to generate content.
9
-
10
- /**
11
- * @name generate random first name and save in variable
12
- * @description Template step for generating a random first name and saving it inside a variable
13
- * @icon DATA
14
- */
15
- When(
16
- 'the user generates a random first name and stores it inside the variable {string}',
17
- async function (this: CustomWorld, variableName: string) {
18
- const data = generateRandomData(RandomDataType.FIRST_NAME);
19
- try {
20
- this.setVar(variableName, data);
21
- } catch (error) {
22
- throw new Error(`Failed to generate a random first name and store it inside the variable ${variableName}: ${error}`);
23
- }
24
- }
25
- );
26
-
27
- /**
28
- * @name generate random last name and save in variable
29
- * @description Template step for generating a random last name and saving it inside a variable
30
- * @icon DATA
31
- */
32
- When(
33
- 'the user generates a random last name and stores it inside the variable {string}',
34
- async function (this: CustomWorld, variableName: string) {
35
- const data = generateRandomData(RandomDataType.LAST_NAME);
36
- try {
37
- this.setVar(variableName, data);
38
- } catch (error) {
39
- throw new Error(`Failed to generate a random last name and store it inside the variable ${variableName}: ${error}`);
40
- }
41
- }
42
- );
43
-
44
- /**
45
- * @name generate random email and save in variable
46
- * @description Template step for generating a random email and saving it inside a variable
47
- * @icon DATA
48
- */
49
- When(
50
- 'the user generates a random email and stores it inside the variable {string}',
51
- async function (this: CustomWorld, variableName: string) {
52
- const data = generateRandomData(RandomDataType.EMAIL);
53
- try {
54
- this.setVar(variableName, data);
55
- } catch (error) {
56
- throw new Error(`Failed to generate a random email and store it inside the variable ${variableName}: ${error}`);
57
- }
58
- }
59
- );
60
-
61
- /**
62
- * @name generate random password and save in variable
63
- * @description Template step for generating a random password and saving it inside a variable
64
- * @icon DATA
65
- */
66
- When(
67
- 'the user generates a random password and stores it inside the variable {string}',
68
- async function (this: CustomWorld, variableName: string) {
69
- const data = generateRandomData(RandomDataType.PASSWORD);
70
- try {
71
- this.setVar(variableName, data);
72
- } catch (error) {
73
- throw new Error(`Failed to generate a random password and store it inside the variable ${variableName}: ${error}`);
74
- }
75
- }
76
- );
77
-
78
- /**
79
- * @name generate random phone and save in variable
80
- * @description Template step for generating a random phone and saving it inside a variable
81
- * @icon DATA
82
- */
83
- When(
84
- 'the user generates a random phone and stores it inside the variable {string}',
85
- async function (this: CustomWorld, variableName: string) {
86
- const data = generateRandomData(RandomDataType.PHONE);
87
- try {
88
- this.setVar(variableName, data);
89
- } catch (error) {
90
- throw new Error(`Failed to generate a random phone and store it inside the variable ${variableName}: ${error}`);
91
- }
92
- }
93
- );
94
-
95
- /**
96
- * @name generate random address and save in variable
97
- * @description Template step for generating a random address and saving it inside a variable
98
- * @icon DATA
99
- */
100
- When(
101
- 'the user generates a random address and stores it inside the variable {string}',
102
- async function (this: CustomWorld, variableName: string) {
103
- const data = generateRandomData(RandomDataType.ADDRESS);
104
- try {
105
- this.setVar(variableName, data);
106
- } catch (error) {
107
- throw new Error(`Failed to generate a random address and store it inside the variable ${variableName}: ${error}`);
108
- }
109
- }
110
- );
111
-
112
- /**
113
- * @name generate random unique text and save in variable
114
- * @description Template step for generating a random unique text and saving it inside a variable
115
- * @icon DATA
116
- */
117
- When(
118
- 'the user generates a random unique text and stores it inside the variable {string}',
119
- async function (this: CustomWorld, variableName: string) {
120
- const data = generateRandomData(RandomDataType.UNIQUE_TEXT);
121
- try {
122
- this.setVar(variableName, data);
123
- } catch (error) {
124
- throw new Error(`Failed to generate a random unique text and store it inside the variable ${variableName}: ${error}`);
125
- }
126
- }
127
- );
128
-
129
- /**
130
- * @name generate random full name and save in variable
131
- * @description Template step for generating a random full name and saving it inside a variable
132
- * @icon DATA
133
- */
134
- When(
135
- 'the user generates a random full name and stores it inside the variable {string}',
136
- async function (this: CustomWorld, variableName: string) {
137
- const data = generateRandomData(RandomDataType.FULL_NAME);
138
- try {
139
- this.setVar(variableName, data);
140
- } catch (error) {
141
- throw new Error(`Failed to generate a random full name and store it inside the variable ${variableName}: ${error}`);
142
- }
143
- }
144
- );
2
+ /**
3
+ * @name random data
4
+ * @description Template steps that handles random data generation
5
+ * @type ACTION
6
+ */
7
+
8
+ /**
9
+ * @name generate random address and save in variable
10
+ * @description Template step for generating a random address and saving it inside a variable
11
+ * @icon DATA
12
+ */
13
+ When(
14
+ 'the user generates a random address and stores it inside the variable {string}',
15
+ async function (this: CustomWorld, variableName: string) {
16
+ const data = generateRandomData(RandomDataType.ADDRESS)
17
+ try {
18
+ this.setVar(variableName, data)
19
+ } catch (error) {
20
+ throw new Error(`Failed to generate a random address and store it inside the variable ${variableName}: ${error}`)
21
+ }
22
+ },
23
+ )
24
+
25
+ /**
26
+ * @name generate random email and save in variable
27
+ * @description Template step for generating a random email and saving it inside a variable
28
+ * @icon DATA
29
+ */
30
+ When(
31
+ 'the user generates a random email and stores it inside the variable {string}',
32
+ async function (this: CustomWorld, variableName: string) {
33
+ const data = generateRandomData(RandomDataType.EMAIL)
34
+ try {
35
+ this.setVar(variableName, data)
36
+ } catch (error) {
37
+ throw new Error(`Failed to generate a random email and store it inside the variable ${variableName}: ${error}`)
38
+ }
39
+ },
40
+ )
41
+
42
+ /**
43
+ * @name generate random first name and save in variable
44
+ * @description Template step for generating a random first name and saving it inside a variable
45
+ * @icon DATA
46
+ */
47
+ When(
48
+ 'the user generates a random first name and stores it inside the variable {string}',
49
+ async function (this: CustomWorld, variableName: string) {
50
+ const data = generateRandomData(RandomDataType.FIRST_NAME)
51
+ try {
52
+ this.setVar(variableName, data)
53
+ } catch (error) {
54
+ throw new Error(
55
+ `Failed to generate a random first name and store it inside the variable ${variableName}: ${error}`,
56
+ )
57
+ }
58
+ },
59
+ )
60
+
61
+ /**
62
+ * @name generate random full name and save in variable
63
+ * @description Template step for generating a random full name and saving it inside a variable
64
+ * @icon DATA
65
+ */
66
+ When(
67
+ 'the user generates a random full name and stores it inside the variable {string}',
68
+ async function (this: CustomWorld, variableName: string) {
69
+ const data = generateRandomData(RandomDataType.FULL_NAME)
70
+ try {
71
+ this.setVar(variableName, data)
72
+ } catch (error) {
73
+ throw new Error(
74
+ `Failed to generate a random full name and store it inside the variable ${variableName}: ${error}`,
75
+ )
76
+ }
77
+ },
78
+ )
79
+
80
+ /**
81
+ * @name generate random last name and save in variable
82
+ * @description Template step for generating a random last name and saving it inside a variable
83
+ * @icon DATA
84
+ */
85
+ When(
86
+ 'the user generates a random last name and stores it inside the variable {string}',
87
+ async function (this: CustomWorld, variableName: string) {
88
+ const data = generateRandomData(RandomDataType.LAST_NAME)
89
+ try {
90
+ this.setVar(variableName, data)
91
+ } catch (error) {
92
+ throw new Error(
93
+ `Failed to generate a random last name and store it inside the variable ${variableName}: ${error}`,
94
+ )
95
+ }
96
+ },
97
+ )
98
+
99
+ /**
100
+ * @name generate random password and save in variable
101
+ * @description Template step for generating a random password and saving it inside a variable
102
+ * @icon DATA
103
+ */
104
+ When(
105
+ 'the user generates a random password and stores it inside the variable {string}',
106
+ async function (this: CustomWorld, variableName: string) {
107
+ const data = generateRandomData(RandomDataType.PASSWORD)
108
+ try {
109
+ this.setVar(variableName, data)
110
+ } catch (error) {
111
+ throw new Error(`Failed to generate a random password and store it inside the variable ${variableName}: ${error}`)
112
+ }
113
+ },
114
+ )
115
+
116
+ /**
117
+ * @name generate random phone and save in variable
118
+ * @description Template step for generating a random phone and saving it inside a variable
119
+ * @icon DATA
120
+ */
121
+ When(
122
+ 'the user generates a random phone and stores it inside the variable {string}',
123
+ async function (this: CustomWorld, variableName: string) {
124
+ const data = generateRandomData(RandomDataType.PHONE)
125
+ try {
126
+ this.setVar(variableName, data)
127
+ } catch (error) {
128
+ throw new Error(`Failed to generate a random phone and store it inside the variable ${variableName}: ${error}`)
129
+ }
130
+ },
131
+ )
132
+
133
+ /**
134
+ * @name generate random unique text and save in variable
135
+ * @description Template step for generating a random unique text and saving it inside a variable
136
+ * @icon DATA
137
+ */
138
+ When(
139
+ 'the user generates a random unique text and stores it inside the variable {string}',
140
+ async function (this: CustomWorld, variableName: string) {
141
+ const data = generateRandomData(RandomDataType.UNIQUE_TEXT)
142
+ try {
143
+ this.setVar(variableName, data)
144
+ } catch (error) {
145
+ throw new Error(
146
+ `Failed to generate a random unique text and store it inside the variable ${variableName}: ${error}`,
147
+ )
148
+ }
149
+ },
150
+ )
@@ -5,4 +5,72 @@ import { When, Then, CustomWorld, expect, SelectorName, resolveLocator, getEnvir
5
5
  * @type ACTION
6
6
  */
7
7
 
8
- // This file is generated automatically. Add template steps to this group to generate content.
8
+ /**
9
+ * @name store element text
10
+ * @description Store an element's text content inside a runtime variable
11
+ * @icon STORE
12
+ */
13
+ When(
14
+ 'the user stores the {string} element text inside the variable {string}',
15
+ async function (this: CustomWorld, elementName: SelectorName, variableName: string) {
16
+ const selector = await resolveLocator(this.page, elementName)
17
+ if (!selector) {
18
+ throw new Error(`Selector ${elementName} not found`)
19
+ }
20
+
21
+ try {
22
+ const value = await this.page.locator(selector).textContent()
23
+ this.setVar(variableName, value ?? '')
24
+ } catch (error) {
25
+ throw new Error(`Failed to store the ${elementName} element text inside the variable ${variableName}: ${error}`)
26
+ }
27
+ },
28
+ )
29
+
30
+ /**
31
+ * @name store text input text
32
+ * @description Store a text input value inside a runtime variable
33
+ * @icon STORE
34
+ */
35
+ When(
36
+ 'the user stores the {string} text input value inside the variable {string}',
37
+ async function (this: CustomWorld, elementName: SelectorName, variableName: string) {
38
+ const selector = await resolveLocator(this.page, elementName)
39
+ if (!selector) {
40
+ throw new Error(`Selector ${elementName} not found`)
41
+ }
42
+
43
+ try {
44
+ const value = await this.page.locator(selector).inputValue()
45
+ this.setVar(variableName, value)
46
+ } catch (error) {
47
+ throw new Error(
48
+ `Failed to store the ${elementName} text input value inside the variable ${variableName}: ${error}`,
49
+ )
50
+ }
51
+ },
52
+ )
53
+
54
+ /**
55
+ * @name store textarea text
56
+ * @description Store a textarea value inside a runtime variable
57
+ * @icon STORE
58
+ */
59
+ When(
60
+ 'the user stores the {string} textarea input value inside the variable {string}',
61
+ async function (this: CustomWorld, elementName: SelectorName, variableName: string) {
62
+ const selector = await resolveLocator(this.page, elementName)
63
+ if (!selector) {
64
+ throw new Error(`Selector ${elementName} not found`)
65
+ }
66
+
67
+ try {
68
+ const value = await this.page.locator(selector).inputValue()
69
+ this.setVar(variableName, value)
70
+ } catch (error) {
71
+ throw new Error(
72
+ `Failed to store the ${elementName} textarea input value inside the variable ${variableName}: ${error}`,
73
+ )
74
+ }
75
+ },
76
+ )
@@ -5,4 +5,87 @@ import { When, Then, CustomWorld, expect, SelectorName, resolveLocator, getEnvir
5
5
  * @type ACTION
6
6
  */
7
7
 
8
- // This file is generated automatically. Add template steps to this group to generate content.
8
+ /**
9
+ * @name wait for element
10
+ * @description Wait for an element to become visible
11
+ * @icon WAIT
12
+ */
13
+ When(
14
+ 'the user waits for the element {string} to become visible',
15
+ async function (this: CustomWorld, elementName: SelectorName) {
16
+ const selector = await resolveLocator(this.page, elementName, {
17
+ validate: { requireVisible: false },
18
+ })
19
+ if (!selector) {
20
+ throw new Error(`Selector ${elementName} not found`)
21
+ }
22
+
23
+ try {
24
+ await this.page.locator(selector).waitFor({ state: 'visible' })
25
+ } catch (error) {
26
+ throw new Error(`Failed to wait for the element ${elementName} to become visible: ${error}`)
27
+ }
28
+ },
29
+ )
30
+
31
+ /**
32
+ * @name wait for element to disappear
33
+ * @description Wait for an element to become hidden or detached
34
+ * @icon WAIT
35
+ */
36
+ When(
37
+ 'the user waits for the {string} element to disappear',
38
+ async function (this: CustomWorld, elementName: SelectorName) {
39
+ const selector = await resolveLocator(this.page, elementName, {
40
+ validate: { requireVisible: false },
41
+ })
42
+ if (!selector) {
43
+ throw new Error(`Selector ${elementName} not found`)
44
+ }
45
+
46
+ try {
47
+ await this.page.locator(selector).waitFor({ state: 'hidden' })
48
+ } catch (error) {
49
+ throw new Error(`Failed to wait for the ${elementName} element to disappear: ${error}`)
50
+ }
51
+ },
52
+ )
53
+
54
+ /**
55
+ * @name wait for page load
56
+ * @description Wait for the current page to finish loading
57
+ * @icon WAIT
58
+ */
59
+ When('the user waits for the current page to be loaded', async function (this: CustomWorld) {
60
+ try {
61
+ await this.page.waitForLoadState('domcontentloaded')
62
+ } catch (error) {
63
+ throw new Error(`Failed to wait for the current page to be loaded: ${error}`)
64
+ }
65
+ })
66
+
67
+ /**
68
+ * @name wait for specific amount of seconds
69
+ * @description Wait for a specific number of seconds
70
+ * @icon WAIT
71
+ */
72
+ When('the user waits for {int} seconds', async function (this: CustomWorld, seconds: number) {
73
+ try {
74
+ await this.page.waitForTimeout(seconds * 1000)
75
+ } catch (error) {
76
+ throw new Error(`Failed to wait for ${seconds} seconds: ${error}`)
77
+ }
78
+ })
79
+
80
+ /**
81
+ * @name wait for url route
82
+ * @description Wait for the current URL path to match a route
83
+ * @icon WAIT
84
+ */
85
+ When('the user waits for the route {string} to be loaded', async function (this: CustomWorld, route: string) {
86
+ try {
87
+ await this.page.waitForURL(url => url.pathname === route || url.pathname.endsWith(route))
88
+ } catch (error) {
89
+ throw new Error(`Failed to wait for the route ${route} to be loaded: ${error}`)
90
+ }
91
+ })
@@ -1,31 +1,29 @@
1
1
  import { When, Then, CustomWorld, expect, SelectorName, resolveLocator, getEnvironment, generateRandomData, RandomDataType } from '../../../packages/cucumber-runtime/src/index.js'
2
- /**
3
- * @name active state assertion
4
- * @description Template steps for handling the validation of the active state of an element
5
- * @type VALIDATION
6
- */
7
-
8
- // This file is generated automatically. Add template steps to this group to generate content.
9
-
10
- /**
11
- * @name assert element active
12
- * @description Template step for validating whether an element is active or not
13
- * @icon VALIDATION
14
- */
15
- Then(
16
- 'the element {string} should have active status {boolean} ',
17
- async function (this: CustomWorld, elementName: SelectorName, isActive: boolean) {
18
- try {
19
- const selector = await resolveLocator(this.page, elementName)
20
- if (!selector) throw new Error(`Selector ${elementName} not found`)
21
- const elementActiveStatus = await this.page.locator(selector).isEnabled({ timeout: 10000 })
22
- if (isActive) {
23
- void expect(elementActiveStatus, `Expected ${elementName} to be active`).to.be.true
24
- } else {
25
- void expect(elementActiveStatus, `Expected ${elementName} NOT to be active`).to.be.false
26
- }
27
- } catch (error) {
28
- throw new Error(`Failed to validate the active status of the element ${elementName}: ${error}`)
29
- }
30
- },
31
- )
2
+ /**
3
+ * @name active state assertion
4
+ * @description Template steps for handling the validation of the active state of an element
5
+ * @type VALIDATION
6
+ */
7
+
8
+ /**
9
+ * @name assert element active
10
+ * @description Template step for validating whether an element is active or not
11
+ * @icon VALIDATION
12
+ */
13
+ Then(
14
+ 'the element {string} should have active status {boolean} ',
15
+ async function (this: CustomWorld, elementName: SelectorName, isActive: boolean) {
16
+ try {
17
+ const selector = await resolveLocator(this.page, elementName)
18
+ if (!selector) throw new Error(`Selector ${elementName} not found`)
19
+ const elementActiveStatus = await this.page.locator(selector).isEnabled({ timeout: 10000 })
20
+ if (isActive) {
21
+ void expect(elementActiveStatus, `Expected ${elementName} to be active`).to.be.true
22
+ } else {
23
+ void expect(elementActiveStatus, `Expected ${elementName} NOT to be active`).to.be.false
24
+ }
25
+ } catch (error) {
26
+ throw new Error(`Failed to validate the active status of the element ${elementName}: ${error}`)
27
+ }
28
+ },
29
+ )
@@ -1,23 +1,21 @@
1
1
  import { When, Then, CustomWorld, expect, SelectorName, resolveLocator, getEnvironment, generateRandomData, RandomDataType } from '../../../packages/cucumber-runtime/src/index.js'
2
- /**
3
- * @name navigation assertion
4
- * @description Template steps that handles navigation validations
5
- * @type VALIDATION
6
- */
7
-
8
- // This file is generated automatically. Add template steps to this group to generate content.
9
-
10
- /**
11
- * @name assert url route equals
12
- * @description Template step for validating whether a url route equals the provided value or not
13
- * @icon VALIDATION
14
- */
15
- Then('the url route should be equal to {string}', async function (this: CustomWorld, route: string) {
16
- try {
17
- await this.page.waitForLoadState('networkidle')
18
- const currentRoute = new URL(this.page.url()).pathname
19
- expect(currentRoute, `Expected the current route to be "${route}"`).to.equal(route.toLowerCase())
20
- } catch (error) {
21
- throw new Error(`Failed to validate the equality of the current route to the route "${route}": ${error}`)
22
- }
23
- })
2
+ /**
3
+ * @name navigation assertion
4
+ * @description Template steps that handles navigation validations
5
+ * @type VALIDATION
6
+ */
7
+
8
+ /**
9
+ * @name assert url route equals
10
+ * @description Template step for validating whether a url route equals the provided value or not
11
+ * @icon VALIDATION
12
+ */
13
+ Then('the url route should be equal to {string}', async function (this: CustomWorld, route: string) {
14
+ try {
15
+ await this.page.waitForLoadState('networkidle')
16
+ const currentRoute = new URL(this.page.url()).pathname
17
+ expect(currentRoute, `Expected the current route to be "${route}"`).to.equal(route.toLowerCase())
18
+ } catch (error) {
19
+ throw new Error(`Failed to validate the equality of the current route to the route "${route}": ${error}`)
20
+ }
21
+ })