create-appraisejs 0.1.7 → 0.1.8

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 (316) hide show
  1. package/README.md +45 -45
  2. package/dist/cli.js +2 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/copy-template.d.ts.map +1 -1
  5. package/dist/copy-template.js.map +1 -1
  6. package/package.json +69 -67
  7. package/templates/default/.vscode/settings.json +5 -0
  8. package/templates/default/appraisejs.config.json +1 -1
  9. package/templates/default/components.json +24 -24
  10. package/templates/default/cucumber.mjs +16 -0
  11. package/templates/default/eslint.config.mjs +15 -15
  12. package/templates/default/next.config.ts +13 -7
  13. package/templates/default/package-lock.json +13732 -14321
  14. package/templates/default/package.json +11 -9
  15. package/templates/default/postcss.config.mjs +8 -8
  16. package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
  17. package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
  18. package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
  19. package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
  20. package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
  21. package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
  22. package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
  23. package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
  24. package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
  25. package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
  26. package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
  27. package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
  28. package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
  29. package/templates/default/prisma/schema.prisma +554 -554
  30. package/templates/default/scripts/regenerate-features.ts +94 -94
  31. package/templates/default/scripts/setup-env.ts +19 -19
  32. package/templates/default/scripts/sync-all.ts +341 -341
  33. package/templates/default/scripts/sync-appraise-base-template.ts +52 -2
  34. package/templates/default/scripts/sync-environments.ts +323 -323
  35. package/templates/default/scripts/sync-locator-groups.ts +413 -413
  36. package/templates/default/scripts/sync-locators.ts +402 -402
  37. package/templates/default/scripts/sync-modules.ts +349 -349
  38. package/templates/default/scripts/sync-tags.ts +292 -292
  39. package/templates/default/scripts/sync-template-step-groups.ts +399 -399
  40. package/templates/default/scripts/sync-template-steps.ts +806 -806
  41. package/templates/default/scripts/sync-test-cases.ts +905 -905
  42. package/templates/default/scripts/sync-test-suites.ts +411 -411
  43. package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
  44. package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
  45. package/templates/default/src/actions/environments/environment-actions.ts +205 -205
  46. package/templates/default/src/actions/locator/locator-actions.ts +547 -547
  47. package/templates/default/src/actions/locator-groups/locator-group-actions.ts +344 -344
  48. package/templates/default/src/actions/modules/module-actions.ts +133 -133
  49. package/templates/default/src/actions/reports/report-actions.ts +613 -613
  50. package/templates/default/src/actions/review/review-actions.ts +147 -147
  51. package/templates/default/src/actions/tags/tag-actions.ts +104 -104
  52. package/templates/default/src/actions/template-step/template-step-actions.ts +332 -332
  53. package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +278 -278
  54. package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
  55. package/templates/default/src/actions/test-case/test-case-actions.ts +419 -419
  56. package/templates/default/src/actions/test-run/test-run-actions.ts +1185 -1185
  57. package/templates/default/src/actions/test-suite/test-suite-actions.ts +253 -253
  58. package/templates/default/src/actions/user/user-actions.ts +13 -13
  59. package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
  60. package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
  61. package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
  62. package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
  63. package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -46
  64. package/templates/default/src/app/(base)/environments/page.tsx +59 -59
  65. package/templates/default/src/app/(base)/layout.tsx +10 -10
  66. package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
  67. package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
  68. package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  69. package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  70. package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  71. package/templates/default/src/app/(base)/locator-groups/page.tsx +61 -61
  72. package/templates/default/src/app/(base)/locators/create/page.tsx +38 -38
  73. package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
  74. package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -90
  75. package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
  76. package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +45 -45
  77. package/templates/default/src/app/(base)/locators/page.tsx +65 -65
  78. package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
  79. package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
  80. package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
  81. package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
  82. package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
  83. package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
  84. package/templates/default/src/app/(base)/modules/page.tsx +59 -59
  85. package/templates/default/src/app/(base)/reports/[id]/page.tsx +517 -517
  86. package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
  87. package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
  88. package/templates/default/src/app/(base)/reports/overview-chart.tsx +46 -46
  89. package/templates/default/src/app/(base)/reports/page.tsx +98 -98
  90. package/templates/default/src/app/(base)/reports/report-metric-card.tsx +16 -16
  91. package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
  92. package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
  93. package/templates/default/src/app/(base)/reports/report-view-table-columns.tsx +131 -131
  94. package/templates/default/src/app/(base)/reports/report-view-table.tsx +82 -82
  95. package/templates/default/src/app/(base)/reports/test-cases/page.tsx +42 -42
  96. package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
  97. package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  98. package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
  99. package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
  100. package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
  101. package/templates/default/src/app/(base)/reports/view-logs-button.tsx +60 -60
  102. package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
  103. package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
  104. package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
  105. package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
  106. package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
  107. package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
  108. package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
  109. package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
  110. package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
  111. package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
  112. package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
  113. package/templates/default/src/app/(base)/tags/page.tsx +58 -58
  114. package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -147
  115. package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  116. package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
  117. package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  118. package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -45
  119. package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
  120. package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -167
  121. package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
  122. package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -32
  123. package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
  124. package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
  125. package/templates/default/src/app/(base)/template-steps/page.tsx +59 -59
  126. package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
  127. package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
  128. package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
  129. package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -24
  130. package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
  131. package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
  132. package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
  133. package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -84
  134. package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -262
  135. package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  136. package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  137. package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -76
  138. package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
  139. package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
  140. package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -73
  141. package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
  142. package/templates/default/src/app/(base)/test-cases/page.tsx +60 -60
  143. package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
  144. package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
  145. package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +90 -90
  146. package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +35 -35
  147. package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +56 -56
  148. package/templates/default/src/app/(base)/test-runs/create/page.tsx +47 -47
  149. package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
  150. package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +508 -512
  151. package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
  152. package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
  153. package/templates/default/src/app/(base)/test-suites/create/page.tsx +45 -45
  154. package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +55 -55
  155. package/templates/default/src/app/(base)/test-suites/page.tsx +82 -82
  156. package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +269 -269
  157. package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +97 -97
  158. package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -29
  159. package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
  160. package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
  161. package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
  162. package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
  163. package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
  164. package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
  165. package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +133 -133
  166. package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +420 -420
  167. package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
  168. package/templates/default/src/app/globals.css +147 -147
  169. package/templates/default/src/app/layout.tsx +171 -171
  170. package/templates/default/src/app/page.tsx +64 -64
  171. package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
  172. package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
  173. package/templates/default/src/components/base-node.tsx +21 -21
  174. package/templates/default/src/components/chart/pie-chart.tsx +73 -73
  175. package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -460
  176. package/templates/default/src/components/data-state/empty-state.tsx +40 -40
  177. package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
  178. package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
  179. package/templates/default/src/components/devtools/providers.tsx +19 -13
  180. package/templates/default/src/components/diagram/button-edge.tsx +54 -54
  181. package/templates/default/src/components/diagram/dynamic-parameters.tsx +438 -438
  182. package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
  183. package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
  184. package/templates/default/src/components/diagram/node-form.tsx +262 -262
  185. package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
  186. package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
  187. package/templates/default/src/components/form/error-message.tsx +7 -7
  188. package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
  189. package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
  190. package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  191. package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
  192. package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  193. package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  194. package/templates/default/src/components/logo.tsx +15 -15
  195. package/templates/default/src/components/navigation/command-badge.tsx +34 -34
  196. package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
  197. package/templates/default/src/components/navigation/entity-search-command.tsx +116 -116
  198. package/templates/default/src/components/navigation/nav-card.tsx +31 -31
  199. package/templates/default/src/components/navigation/nav-command.tsx +508 -508
  200. package/templates/default/src/components/navigation/nav-link.tsx +60 -60
  201. package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
  202. package/templates/default/src/components/node-header.tsx +159 -159
  203. package/templates/default/src/components/reports/test-case-logs-modal.tsx +253 -253
  204. package/templates/default/src/components/table/table-actions.tsx +172 -172
  205. package/templates/default/src/components/test-run/download-logs-button.tsx +99 -99
  206. package/templates/default/src/components/test-run/log-viewer.tsx +445 -445
  207. package/templates/default/src/components/test-run/test-run-details.tsx +611 -611
  208. package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
  209. package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
  210. package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
  211. package/templates/default/src/components/theme/theme-provider.tsx +8 -8
  212. package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
  213. package/templates/default/src/components/typography/page-header.tsx +7 -7
  214. package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
  215. package/templates/default/src/components/ui/alert.tsx +43 -43
  216. package/templates/default/src/components/ui/avatar.tsx +40 -40
  217. package/templates/default/src/components/ui/badge.tsx +29 -29
  218. package/templates/default/src/components/ui/button.tsx +47 -47
  219. package/templates/default/src/components/ui/calendar.tsx +158 -158
  220. package/templates/default/src/components/ui/card.tsx +43 -43
  221. package/templates/default/src/components/ui/checkbox.tsx +28 -28
  222. package/templates/default/src/components/ui/command.tsx +135 -135
  223. package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
  224. package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
  225. package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
  226. package/templates/default/src/components/ui/data-table.tsx +267 -267
  227. package/templates/default/src/components/ui/dialog.tsx +97 -97
  228. package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
  229. package/templates/default/src/components/ui/input.tsx +22 -22
  230. package/templates/default/src/components/ui/kbd.tsx +28 -28
  231. package/templates/default/src/components/ui/label.tsx +19 -19
  232. package/templates/default/src/components/ui/loading.tsx +12 -12
  233. package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
  234. package/templates/default/src/components/ui/multi-select.tsx +142 -142
  235. package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
  236. package/templates/default/src/components/ui/popover.tsx +33 -33
  237. package/templates/default/src/components/ui/progress.tsx +25 -25
  238. package/templates/default/src/components/ui/radio-group.tsx +44 -44
  239. package/templates/default/src/components/ui/scroll-area.tsx +40 -40
  240. package/templates/default/src/components/ui/select.tsx +151 -144
  241. package/templates/default/src/components/ui/separator.tsx +22 -22
  242. package/templates/default/src/components/ui/skeleton.tsx +7 -7
  243. package/templates/default/src/components/ui/table.tsx +76 -76
  244. package/templates/default/src/components/ui/tabs.tsx +55 -55
  245. package/templates/default/src/components/ui/textarea.tsx +21 -21
  246. package/templates/default/src/components/ui/toast.tsx +113 -113
  247. package/templates/default/src/components/ui/toaster.tsx +26 -26
  248. package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -87
  249. package/templates/default/src/config/db-config.ts +10 -10
  250. package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
  251. package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
  252. package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -20
  253. package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
  254. package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
  255. package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -23
  256. package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
  257. package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
  258. package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
  259. package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
  260. package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
  261. package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
  262. package/templates/default/src/constants/form-opts/test-run-form-opts.ts +31 -31
  263. package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
  264. package/templates/default/src/hooks/use-toast.ts +187 -187
  265. package/templates/default/src/lib/bidirectional-sync.ts +432 -432
  266. package/templates/default/src/lib/database-sync.ts +531 -531
  267. package/templates/default/src/lib/environment-file-utils.ts +221 -221
  268. package/templates/default/src/lib/feature-file-generator.ts +411 -411
  269. package/templates/default/src/lib/gherkin-parser.ts +259 -259
  270. package/templates/default/src/lib/locator-group-file-utils.ts +370 -370
  271. package/templates/default/src/lib/metrics/metric-calculator.ts +613 -613
  272. package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
  273. package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
  274. package/templates/default/src/lib/test-case-utils.ts +6 -6
  275. package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
  276. package/templates/default/src/lib/test-run/process-manager.ts +191 -191
  277. package/templates/default/src/lib/test-run/report-parser.ts +316 -316
  278. package/templates/default/src/lib/test-run/test-run-executor.ts +144 -144
  279. package/templates/default/src/lib/test-run/winston-logger.ts +95 -95
  280. package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
  281. package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  282. package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
  283. package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
  284. package/templates/default/src/lib/utils/template-step-file-generator.ts +167 -167
  285. package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +723 -723
  286. package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
  287. package/templates/default/src/lib/utils.ts +31 -31
  288. package/templates/default/src/tests/config/executor/world.ts +41 -41
  289. package/templates/default/src/tests/executor.ts +80 -80
  290. package/templates/default/src/tests/hooks/hooks.ts +99 -99
  291. package/templates/default/src/tests/mapping/locator-map.json +1 -1
  292. package/templates/default/src/tests/steps/actions/click.step.ts +62 -62
  293. package/templates/default/src/tests/steps/actions/navigation.step.ts +73 -72
  294. package/templates/default/src/tests/steps/validations/active_state_assertion.step.ts +34 -34
  295. package/templates/default/src/tests/steps/validations/navigation_assertion.step.ts +24 -23
  296. package/templates/default/src/tests/steps/validations/text_assertion.step.ts +111 -111
  297. package/templates/default/src/tests/steps/validations/visibility_assertion.step.ts +30 -30
  298. package/templates/default/src/tests/support/parameter-types.ts +12 -12
  299. package/templates/default/src/tests/utils/cache.util.ts +260 -260
  300. package/templates/default/src/tests/utils/cli.util.ts +177 -177
  301. package/templates/default/src/tests/utils/environment.util.ts +65 -65
  302. package/templates/default/src/tests/utils/locator.util.ts +248 -248
  303. package/templates/default/src/tests/utils/random-data.util.ts +44 -44
  304. package/templates/default/src/tests/utils/spawner.util.ts +617 -617
  305. package/templates/default/src/types/diagram/diagram.ts +34 -34
  306. package/templates/default/src/types/diagram/template-step.ts +11 -11
  307. package/templates/default/src/types/executor/browser.type.ts +1 -1
  308. package/templates/default/src/types/form/actionHandler.ts +6 -6
  309. package/templates/default/src/types/locator/locator.type.ts +11 -11
  310. package/templates/default/src/types/step/step.type.ts +1 -1
  311. package/templates/default/src/types/table/data-table.ts +6 -6
  312. package/templates/default/tailwind.config.ts +62 -62
  313. package/templates/default/.env +0 -2
  314. package/templates/default/next-env.d.ts +0 -6
  315. package/templates/default/prisma/prisma/dev.db +0 -0
  316. package/templates/default/src/tests/config/environments/environments.json +0 -14
@@ -1,177 +1,177 @@
1
- import { Command, Option, OptionValues } from 'commander'
2
- import { getAllEnvironments } from './environment.util.js'
3
- import parseTagExpression from '@cucumber/tag-expressions'
4
-
5
- /**
6
- * Configuration options for the CLI tool
7
- * @extends OptionValues - Extends Commander.js OptionValues for CLI integration
8
- */
9
- export interface CliOptions extends OptionValues {
10
- /** The target environment to run tests against */
11
- environment: string
12
- /** Cucumber tag expression to filter test scenarios */
13
- tags: string
14
- /** Number of parallel workers to run tests with */
15
- parallel: number
16
- /** Browser engine to use for test execution */
17
- browser: 'chromium' | 'firefox' | 'webkit'
18
- /** Whether to run browser in headless mode */
19
- headless: 'true' | 'false'
20
- }
21
-
22
- /** Available browser choices for test execution */
23
- const BROWSER_CHOICES = ['chromium', 'firefox', 'webkit'] as const
24
-
25
- /** Available headless mode choices */
26
- const HEADLESS_CHOICES = ['true', 'false'] as const
27
-
28
- /** Default number of parallel workers */
29
- const DEFAULT_PARALLEL_WORKERS = 1
30
-
31
- /** Default browser engine */
32
- const DEFAULT_BROWSER = 'chromium'
33
-
34
- /** Default headless mode setting */
35
- const DEFAULT_HEADLESS = 'true'
36
-
37
- /**
38
- * Commander.js program instance for CLI argument parsing
39
- * Configured with all available options and validation rules
40
- */
41
- const program = new Command()
42
-
43
- /**
44
- * Available environment names loaded from configuration
45
- * Used to validate the --environment option
46
- */
47
- let environmentNames: string[] = []
48
- try {
49
- environmentNames = Object.keys(getAllEnvironments())
50
- if (environmentNames.length === 0) {
51
- console.warn('⚠️ No environments found in configuration')
52
- }
53
- } catch (error) {
54
- console.error('❌ Failed to load environments:', error instanceof Error ? error.message : 'Unknown error')
55
- process.exit(1)
56
- }
57
-
58
- /**
59
- * Validates and parses a positive integer value from command line input
60
- *
61
- * Used as a custom parser for the --parallel option to ensure only valid
62
- * positive integers are accepted.
63
- *
64
- * @param val - The string value to parse from command line
65
- * @returns The parsed positive integer
66
- * @throws Error if the value is not a valid positive integer
67
- *
68
- * @example
69
- * ```typescript
70
- * parsePositiveInt("4") // Returns 4
71
- * parsePositiveInt("0") // Throws Error
72
- * parsePositiveInt("abc") // Throws Error
73
- * ```
74
- */
75
- function parsePositiveInt(val: string): number {
76
- const n = Number(val)
77
- if (!Number.isInteger(n) || n <= 0) {
78
- throw new Error(`--parallel must be a positive integer, got "${val}"`)
79
- }
80
- return n
81
- }
82
-
83
- /**
84
- * Validates a Cucumber tag expression for proper syntax
85
- *
86
- * Uses the @cucumber/tag-expressions library to validate that the provided
87
- * tag expression follows Cucumber's tag expression syntax rules.
88
- *
89
- * @param val - The tag expression string to validate
90
- * @returns The validated tag expression (unchanged if valid)
91
- * @throws Error if the tag expression is invalid
92
- *
93
- * @example
94
- * ```typescript
95
- * validateCucumberTagExpression('@smoke') // Returns '@smoke'
96
- * validateCucumberTagExpression('@smoke and @regression') // Returns '@smoke and @regression'
97
- * validateCucumberTagExpression('invalid expression') // Throws Error
98
- * ```
99
- */
100
- function validateCucumberTagExpression(val: string): string {
101
- try {
102
- parseTagExpression(val)
103
- return val
104
- } catch (error) {
105
- throw new Error(`Invalid tag expression: ${error instanceof Error ? error.message : 'Unknown error'}`)
106
- }
107
- }
108
-
109
- /**
110
- * Configure the Commander.js CLI program with all available options
111
- *
112
- * Sets up the command name, description, version, and all command line options
113
- * with their respective validation rules and default values.
114
- */
115
- program
116
- .name('cucumber-cli')
117
- .description('A CLI tool for running Cucumber tests with different configurations')
118
- .version('1.0.0')
119
- .addOption(
120
- new Option('-e, --environment <environment>', 'The environment to run the tests on')
121
- .choices(environmentNames)
122
- .makeOptionMandatory(),
123
- )
124
- .addOption(
125
- new Option('-t, --tags <tags>', 'The tags to run the tests on (Cucumber tag expression)')
126
- .argParser(validateCucumberTagExpression)
127
- .makeOptionMandatory(),
128
- )
129
- .option(
130
- '-p, --parallel <parallel>',
131
- 'The number of parallel workers to run the tests on',
132
- parsePositiveInt,
133
- DEFAULT_PARALLEL_WORKERS,
134
- )
135
- .addOption(
136
- new Option('-b, --browser <browser>', 'The browser to run the tests on')
137
- .choices(BROWSER_CHOICES)
138
- .default(DEFAULT_BROWSER),
139
- )
140
- .addOption(
141
- new Option('-h, --headless <headless>', 'The headless mode to run the tests on')
142
- .choices(HEADLESS_CHOICES)
143
- .default(DEFAULT_HEADLESS),
144
- )
145
-
146
- /**
147
- * Starts the CLI and parses command line arguments
148
- *
149
- * This is the main entry point for the CLI tool. It parses command line arguments,
150
- * validates them according to the configured rules, and returns the parsed options.
151
- * The function handles errors gracefully and exits the process with appropriate
152
- * error codes if parsing fails.
153
- *
154
- * @returns The parsed and validated CLI options
155
- * @throws Error if parsing fails or required options are missing
156
- *
157
- * @example
158
- * ```typescript
159
- * const options = startCli();
160
- * console.log(`Running tests on ${options.environment} with ${options.parallel} workers`);
161
- * ```
162
- */
163
- export function startCli(): CliOptions {
164
- try {
165
- program.parse()
166
- const options = program.opts() as CliOptions
167
-
168
- return options
169
- } catch (error) {
170
- if (error instanceof Error) {
171
- console.error('❌ CLI Error:', error.message)
172
- } else {
173
- console.error('❌ CLI Error: Unknown error occurred')
174
- }
175
- process.exit(1)
176
- }
177
- }
1
+ import { Command, Option, OptionValues } from 'commander'
2
+ import { getAllEnvironments } from './environment.util.js'
3
+ import parseTagExpression from '@cucumber/tag-expressions'
4
+
5
+ /**
6
+ * Configuration options for the CLI tool
7
+ * @extends OptionValues - Extends Commander.js OptionValues for CLI integration
8
+ */
9
+ export interface CliOptions extends OptionValues {
10
+ /** The target environment to run tests against */
11
+ environment: string
12
+ /** Cucumber tag expression to filter test scenarios */
13
+ tags: string
14
+ /** Number of parallel workers to run tests with */
15
+ parallel: number
16
+ /** Browser engine to use for test execution */
17
+ browser: 'chromium' | 'firefox' | 'webkit'
18
+ /** Whether to run browser in headless mode */
19
+ headless: 'true' | 'false'
20
+ }
21
+
22
+ /** Available browser choices for test execution */
23
+ const BROWSER_CHOICES = ['chromium', 'firefox', 'webkit'] as const
24
+
25
+ /** Available headless mode choices */
26
+ const HEADLESS_CHOICES = ['true', 'false'] as const
27
+
28
+ /** Default number of parallel workers */
29
+ const DEFAULT_PARALLEL_WORKERS = 1
30
+
31
+ /** Default browser engine */
32
+ const DEFAULT_BROWSER = 'chromium'
33
+
34
+ /** Default headless mode setting */
35
+ const DEFAULT_HEADLESS = 'true'
36
+
37
+ /**
38
+ * Commander.js program instance for CLI argument parsing
39
+ * Configured with all available options and validation rules
40
+ */
41
+ const program = new Command()
42
+
43
+ /**
44
+ * Available environment names loaded from configuration
45
+ * Used to validate the --environment option
46
+ */
47
+ let environmentNames: string[] = []
48
+ try {
49
+ environmentNames = Object.keys(getAllEnvironments())
50
+ if (environmentNames.length === 0) {
51
+ console.warn('⚠️ No environments found in configuration')
52
+ }
53
+ } catch (error) {
54
+ console.error('❌ Failed to load environments:', error instanceof Error ? error.message : 'Unknown error')
55
+ process.exit(1)
56
+ }
57
+
58
+ /**
59
+ * Validates and parses a positive integer value from command line input
60
+ *
61
+ * Used as a custom parser for the --parallel option to ensure only valid
62
+ * positive integers are accepted.
63
+ *
64
+ * @param val - The string value to parse from command line
65
+ * @returns The parsed positive integer
66
+ * @throws Error if the value is not a valid positive integer
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * parsePositiveInt("4") // Returns 4
71
+ * parsePositiveInt("0") // Throws Error
72
+ * parsePositiveInt("abc") // Throws Error
73
+ * ```
74
+ */
75
+ function parsePositiveInt(val: string): number {
76
+ const n = Number(val)
77
+ if (!Number.isInteger(n) || n <= 0) {
78
+ throw new Error(`--parallel must be a positive integer, got "${val}"`)
79
+ }
80
+ return n
81
+ }
82
+
83
+ /**
84
+ * Validates a Cucumber tag expression for proper syntax
85
+ *
86
+ * Uses the @cucumber/tag-expressions library to validate that the provided
87
+ * tag expression follows Cucumber's tag expression syntax rules.
88
+ *
89
+ * @param val - The tag expression string to validate
90
+ * @returns The validated tag expression (unchanged if valid)
91
+ * @throws Error if the tag expression is invalid
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * validateCucumberTagExpression('@smoke') // Returns '@smoke'
96
+ * validateCucumberTagExpression('@smoke and @regression') // Returns '@smoke and @regression'
97
+ * validateCucumberTagExpression('invalid expression') // Throws Error
98
+ * ```
99
+ */
100
+ function validateCucumberTagExpression(val: string): string {
101
+ try {
102
+ parseTagExpression(val)
103
+ return val
104
+ } catch (error) {
105
+ throw new Error(`Invalid tag expression: ${error instanceof Error ? error.message : 'Unknown error'}`)
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Configure the Commander.js CLI program with all available options
111
+ *
112
+ * Sets up the command name, description, version, and all command line options
113
+ * with their respective validation rules and default values.
114
+ */
115
+ program
116
+ .name('cucumber-cli')
117
+ .description('A CLI tool for running Cucumber tests with different configurations')
118
+ .version('1.0.0')
119
+ .addOption(
120
+ new Option('-e, --environment <environment>', 'The environment to run the tests on')
121
+ .choices(environmentNames)
122
+ .makeOptionMandatory(),
123
+ )
124
+ .addOption(
125
+ new Option('-t, --tags <tags>', 'The tags to run the tests on (Cucumber tag expression)')
126
+ .argParser(validateCucumberTagExpression)
127
+ .makeOptionMandatory(),
128
+ )
129
+ .option(
130
+ '-p, --parallel <parallel>',
131
+ 'The number of parallel workers to run the tests on',
132
+ parsePositiveInt,
133
+ DEFAULT_PARALLEL_WORKERS,
134
+ )
135
+ .addOption(
136
+ new Option('-b, --browser <browser>', 'The browser to run the tests on')
137
+ .choices(BROWSER_CHOICES)
138
+ .default(DEFAULT_BROWSER),
139
+ )
140
+ .addOption(
141
+ new Option('-h, --headless <headless>', 'The headless mode to run the tests on')
142
+ .choices(HEADLESS_CHOICES)
143
+ .default(DEFAULT_HEADLESS),
144
+ )
145
+
146
+ /**
147
+ * Starts the CLI and parses command line arguments
148
+ *
149
+ * This is the main entry point for the CLI tool. It parses command line arguments,
150
+ * validates them according to the configured rules, and returns the parsed options.
151
+ * The function handles errors gracefully and exits the process with appropriate
152
+ * error codes if parsing fails.
153
+ *
154
+ * @returns The parsed and validated CLI options
155
+ * @throws Error if parsing fails or required options are missing
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const options = startCli();
160
+ * console.log(`Running tests on ${options.environment} with ${options.parallel} workers`);
161
+ * ```
162
+ */
163
+ export function startCli(): CliOptions {
164
+ try {
165
+ program.parse()
166
+ const options = program.opts() as CliOptions
167
+
168
+ return options
169
+ } catch (error) {
170
+ if (error instanceof Error) {
171
+ console.error('❌ CLI Error:', error.message)
172
+ } else {
173
+ console.error('❌ CLI Error: Unknown error occurred')
174
+ }
175
+ process.exit(1)
176
+ }
177
+ }
@@ -1,65 +1,65 @@
1
- import { readFileSync } from 'fs'
2
-
3
- interface EnvironmentConfig {
4
- baseUrl: string
5
- apiBaseUrl: string
6
- email: string
7
- password: string
8
- }
9
-
10
- /**
11
- * Retrieves the configuration for a specific environment from the environments.json file
12
- *
13
- * This function reads the environments configuration file and returns the configuration
14
- * object for the specified environment. The configuration typically contains URLs, API keys,
15
- * database connections, and other environment-specific settings.
16
- *
17
- * @param environment - The name of the environment to retrieve configuration for
18
- * @returns The environment configuration object, or undefined if environment not found
19
- *
20
- * @example
21
- * ```typescript
22
- * const devConfig = getEnvironment('development');
23
- * console.log(devConfig.baseUrl); // 'https://dev.example.com'
24
- *
25
- * const prodConfig = getEnvironment('production');
26
- * console.log(prodConfig.apiKey); // 'prod-api-key-123'
27
- * ```
28
- *
29
- * @throws Will throw an error if the environments.json file cannot be read or parsed
30
- */
31
- export function getEnvironment(environment: string) {
32
- const environmentConfig: { [key: string]: EnvironmentConfig } = JSON.parse(
33
- readFileSync(`${process.cwd()}/src/tests/config/environments/environments.json`, 'utf8'),
34
- )
35
- return environmentConfig[environment] as EnvironmentConfig
36
- }
37
-
38
- /**
39
- * Retrieves all environment configurations from the environments.json file
40
- *
41
- * This function reads the entire environments configuration file and returns all
42
- * available environment configurations. Useful for listing available environments
43
- * or performing operations across all environments.
44
- *
45
- * @returns An object containing all environment configurations, keyed by environment name
46
- *
47
- * @example
48
- * ```typescript
49
- * const allEnvs = getAllEnvironments();
50
- * console.log(Object.keys(allEnvs)); // ['development', 'staging', 'production']
51
- *
52
- * // Iterate through all environments
53
- * Object.entries(allEnvs).forEach(([name, config]) => {
54
- * console.log(`${name}: ${config.baseUrl}`);
55
- * });
56
- * ```
57
- *
58
- * @throws Will throw an error if the environments.json file cannot be read or parsed
59
- */
60
- export function getAllEnvironments() {
61
- const environmentConfig = JSON.parse(
62
- readFileSync(`${process.cwd()}/src/tests/config/environments/environments.json`, 'utf8'),
63
- )
64
- return environmentConfig
65
- }
1
+ import { readFileSync } from 'fs'
2
+
3
+ interface EnvironmentConfig {
4
+ baseUrl: string
5
+ apiBaseUrl: string
6
+ email: string
7
+ password: string
8
+ }
9
+
10
+ /**
11
+ * Retrieves the configuration for a specific environment from the environments.json file
12
+ *
13
+ * This function reads the environments configuration file and returns the configuration
14
+ * object for the specified environment. The configuration typically contains URLs, API keys,
15
+ * database connections, and other environment-specific settings.
16
+ *
17
+ * @param environment - The name of the environment to retrieve configuration for
18
+ * @returns The environment configuration object, or undefined if environment not found
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const devConfig = getEnvironment('development');
23
+ * console.log(devConfig.baseUrl); // 'https://dev.example.com'
24
+ *
25
+ * const prodConfig = getEnvironment('production');
26
+ * console.log(prodConfig.apiKey); // 'prod-api-key-123'
27
+ * ```
28
+ *
29
+ * @throws Will throw an error if the environments.json file cannot be read or parsed
30
+ */
31
+ export function getEnvironment(environment: string) {
32
+ const environmentConfig: { [key: string]: EnvironmentConfig } = JSON.parse(
33
+ readFileSync(`${process.cwd()}/src/tests/config/environments/environments.json`, 'utf8'),
34
+ )
35
+ return environmentConfig[environment.toLowerCase()] as EnvironmentConfig
36
+ }
37
+
38
+ /**
39
+ * Retrieves all environment configurations from the environments.json file
40
+ *
41
+ * This function reads the entire environments configuration file and returns all
42
+ * available environment configurations. Useful for listing available environments
43
+ * or performing operations across all environments.
44
+ *
45
+ * @returns An object containing all environment configurations, keyed by environment name
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const allEnvs = getAllEnvironments();
50
+ * console.log(Object.keys(allEnvs)); // ['development', 'staging', 'production']
51
+ *
52
+ * // Iterate through all environments
53
+ * Object.entries(allEnvs).forEach(([name, config]) => {
54
+ * console.log(`${name}: ${config.baseUrl}`);
55
+ * });
56
+ * ```
57
+ *
58
+ * @throws Will throw an error if the environments.json file cannot be read or parsed
59
+ */
60
+ export function getAllEnvironments() {
61
+ const environmentConfig = JSON.parse(
62
+ readFileSync(`${process.cwd()}/src/tests/config/environments/environments.json`, 'utf8'),
63
+ )
64
+ return environmentConfig
65
+ }