create-appraisejs 0.2.0 → 0.3.0-alpha.0
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.
- package/README.md +12 -1
- package/package.json +1 -1
- package/templates/default/.appraise-template-meta.json +2 -2
- package/templates/default/.env.example +2 -2
- package/templates/default/README.md +57 -53
- package/templates/default/automation/steps/actions/click.step.ts +58 -58
- package/templates/default/automation/steps/actions/hover.step.ts +27 -27
- package/templates/default/automation/steps/actions/navigation.step.ts +70 -70
- package/templates/default/automation/steps/actions/random_data.step.ts +142 -142
- package/templates/default/automation/steps/actions/store.step.ts +86 -86
- package/templates/default/automation/steps/actions/wait.step.ts +110 -90
- package/templates/default/automation/steps/validations/active_state_assertion.step.ts +30 -30
- package/templates/default/automation/steps/validations/navigation_assertion.step.ts +22 -22
- package/templates/default/automation/steps/validations/text_assertion.step.ts +107 -107
- package/templates/default/automation/steps/validations/visibility_assertion.step.ts +26 -26
- package/templates/default/components.json +24 -24
- package/templates/default/cucumber.mjs +16 -16
- package/templates/default/eslint.config.mjs +20 -16
- package/templates/default/next-env.d.ts +6 -6
- package/templates/default/next.config.ts +20 -11
- package/templates/default/package-lock.json +1775 -74
- package/templates/default/package.json +8 -1
- package/templates/default/packages/cucumber-runtime/package.json +13 -13
- package/templates/default/packages/cucumber-runtime/src/cache.util.ts +93 -93
- package/templates/default/packages/cucumber-runtime/src/cli.ts +68 -68
- package/templates/default/packages/cucumber-runtime/src/environment.util.ts +21 -21
- package/templates/default/packages/cucumber-runtime/src/executor.ts +32 -32
- package/templates/default/packages/cucumber-runtime/src/index.ts +17 -17
- package/templates/default/packages/cucumber-runtime/src/locator.util.ts +234 -234
- package/templates/default/packages/cucumber-runtime/src/parameter-types.ts +7 -7
- package/templates/default/packages/cucumber-runtime/src/random-data.util.ts +35 -35
- package/templates/default/packages/cucumber-runtime/src/types.ts +13 -13
- package/templates/default/packages/cucumber-runtime/src/world.ts +44 -44
- package/templates/default/packages/cucumber-runtime/tsconfig.json +11 -11
- package/templates/default/postcss.config.mjs +8 -8
- package/templates/default/prisma/dev.db +0 -0
- package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
- package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
- package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
- package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
- package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
- package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
- package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
- package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
- package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
- package/templates/default/prisma/migrations/20260313093000_add_report_step_screenshot_path/migration.sql +1 -1
- package/templates/default/scripts/build-step-registry.ts +33 -0
- package/templates/default/scripts/install-playwright.ts +17 -8
- package/templates/default/scripts/install-template-step.ts +128 -0
- package/templates/default/scripts/lib/filename-utils.test.ts +24 -0
- package/templates/default/scripts/lib/filename-utils.ts +24 -0
- package/templates/default/scripts/lib/jsdoc-parser.test.ts +63 -0
- package/templates/default/scripts/lib/jsdoc-parser.ts +88 -0
- package/templates/default/scripts/lib/step-file-parser.test.ts +71 -0
- package/templates/default/scripts/lib/step-file-parser.ts +315 -0
- package/templates/default/scripts/lib/step-matcher.test.ts +86 -0
- package/templates/default/scripts/lib/step-matcher.ts +120 -0
- package/templates/default/scripts/lib/sync-script-runner.ts +23 -0
- package/templates/default/scripts/lib/sync-summary.ts +29 -0
- package/templates/default/scripts/lib/tag-parsing.test.ts +20 -0
- package/templates/default/scripts/lib/tag-parsing.ts +10 -0
- package/templates/default/scripts/lib/template-step-installer.test.ts +225 -0
- package/templates/default/scripts/lib/template-step-installer.ts +404 -0
- package/templates/default/scripts/lib/template-step-registry.test.ts +118 -0
- package/templates/default/scripts/lib/template-step-registry.ts +137 -0
- package/templates/default/scripts/protect-seeded-files.ts +51 -38
- package/templates/default/scripts/regenerate-features.ts +98 -94
- package/templates/default/scripts/run-vitest.ts +59 -0
- package/templates/default/scripts/setup-env.ts +26 -19
- package/templates/default/scripts/sync-all.ts +44 -54
- package/templates/default/scripts/sync-appraise-base-template.ts +44 -16
- package/templates/default/scripts/sync-environments.ts +22 -66
- package/templates/default/scripts/sync-locator-groups.ts +358 -410
- package/templates/default/scripts/sync-locators.ts +348 -398
- package/templates/default/scripts/sync-modules.ts +302 -341
- package/templates/default/scripts/sync-tags.ts +29 -65
- package/templates/default/scripts/sync-template-step-groups.ts +24 -182
- package/templates/default/scripts/sync-template-steps.ts +36 -493
- package/templates/default/scripts/sync-test-cases.ts +296 -539
- package/templates/default/scripts/sync-test-suites.ts +32 -79
- package/templates/default/src/actions/dashboard/dashboard-actions.ts +70 -241
- package/templates/default/src/actions/environments/environment-actions.ts +102 -188
- package/templates/default/src/actions/locator/locator-actions.ts +77 -490
- package/templates/default/src/actions/locator-groups/locator-group-actions.ts +34 -212
- package/templates/default/src/actions/locator-picker/locator-picker-actions.test.ts +81 -0
- package/templates/default/src/actions/locator-picker/locator-picker-actions.ts +20 -161
- package/templates/default/src/actions/modules/module-actions.ts +99 -135
- package/templates/default/src/actions/reports/report-actions.ts +28 -565
- package/templates/default/src/actions/settings/sync-actions.test.ts +58 -0
- package/templates/default/src/actions/tags/tag-actions.ts +99 -107
- package/templates/default/src/actions/template-step/template-step-actions.ts +33 -194
- package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +35 -92
- package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +98 -238
- package/templates/default/src/actions/test-case/test-case-actions.ts +108 -356
- package/templates/default/src/actions/test-run/test-run-actions.ts +74 -1081
- package/templates/default/src/actions/test-suite/test-suite-actions.ts +35 -202
- package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/environments/environment-form.test.tsx +92 -0
- package/templates/default/src/app/(base)/environments/environment-form.tsx +228 -219
- package/templates/default/src/app/(base)/environments/environment-helpers.ts +58 -0
- package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
- package/templates/default/src/app/(base)/environments/environment-table.tsx +25 -24
- package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +49 -46
- package/templates/default/src/app/(base)/environments/page.tsx +59 -59
- package/templates/default/src/app/(base)/layout.tsx +10 -10
- package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
- package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
- package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +71 -0
- package/templates/default/src/app/(base)/locators/create/create-locator-workspace-helpers.ts +333 -0
- package/templates/default/src/app/(base)/locators/create/create-locator-workspace.test.tsx +125 -0
- package/templates/default/src/app/(base)/locators/create/create-locator-workspace.tsx +56 -274
- package/templates/default/src/app/(base)/locators/create/page.tsx +8 -4
- package/templates/default/src/app/(base)/locators/create/use-locator-workspace.ts +183 -0
- package/templates/default/src/app/(base)/locators/locator-helpers.test.ts +28 -0
- package/templates/default/src/app/(base)/locators/locator-helpers.ts +59 -0
- package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +74 -73
- package/templates/default/src/app/(base)/locators/locator-table.tsx +30 -28
- package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +20 -8
- package/templates/default/src/app/(base)/locators/page.tsx +3 -6
- package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +67 -66
- package/templates/default/src/app/(base)/modules/create/page.tsx +33 -34
- package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +43 -46
- package/templates/default/src/app/(base)/modules/module-form.test.tsx +84 -0
- package/templates/default/src/app/(base)/modules/module-form.tsx +159 -126
- package/templates/default/src/app/(base)/modules/module-helpers.ts +64 -0
- package/templates/default/src/app/(base)/modules/module-table-columns.tsx +81 -85
- package/templates/default/src/app/(base)/modules/module-table.tsx +25 -24
- package/templates/default/src/app/(base)/modules/page.tsx +59 -59
- package/templates/default/src/app/(base)/reports/[id]/page.tsx +20 -260
- package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
- package/templates/default/src/app/(base)/reports/feature-chart.tsx +79 -78
- package/templates/default/src/app/(base)/reports/overview-chart.tsx +49 -49
- package/templates/default/src/app/(base)/reports/page.tsx +98 -98
- package/templates/default/src/app/(base)/reports/report-detail-helpers.test.ts +109 -0
- package/templates/default/src/app/(base)/reports/report-detail-helpers.ts +247 -0
- package/templates/default/src/app/(base)/reports/report-metric-card.tsx +78 -78
- package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
- package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
- package/templates/default/src/app/(base)/reports/test-cases/page.tsx +40 -40
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/view-logs-button.tsx +58 -58
- package/templates/default/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +40 -0
- package/templates/default/src/app/(base)/settings/settings-sync-panel-helpers.tsx +110 -0
- package/templates/default/src/app/(base)/settings/settings-sync-panel.test.tsx +127 -0
- package/templates/default/src/app/(base)/settings/settings-sync-panel.tsx +19 -134
- package/templates/default/src/app/(base)/settings/use-settings-sync.ts +66 -0
- package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
- package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
- package/templates/default/src/app/(base)/tags/page.tsx +58 -58
- package/templates/default/src/app/(base)/tags/tag-form-helpers.ts +13 -0
- package/templates/default/src/app/(base)/tags/tag-form.test.tsx +83 -0
- package/templates/default/src/app/(base)/tags/tag-form.tsx +143 -147
- package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +43 -45
- package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.test.tsx +82 -0
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +181 -167
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-helpers.ts +54 -0
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +34 -32
- package/templates/default/src/app/(base)/template-steps/create/page.tsx +40 -37
- package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +54 -49
- package/templates/default/src/app/(base)/template-steps/page.tsx +59 -58
- package/templates/default/src/app/(base)/template-steps/paramChip.tsx +233 -213
- package/templates/default/src/app/(base)/template-steps/template-step-form.test.tsx +132 -0
- package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +342 -384
- package/templates/default/src/app/(base)/template-steps/template-step-helpers.test.ts +99 -0
- package/templates/default/src/app/(base)/template-steps/template-step-helpers.ts +176 -0
- package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +153 -158
- package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +26 -24
- package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
- package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
- package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +109 -0
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +45 -84
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.test.tsx +140 -0
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +154 -262
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/default/src/app/(base)/test-cases/create/page.tsx +90 -76
- package/templates/default/src/app/(base)/test-cases/create-from-template/create-from-template-helpers.test.ts +94 -0
- package/templates/default/src/app/(base)/test-cases/create-from-template/create-from-template-helpers.ts +171 -0
- package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +105 -96
- package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +40 -38
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.test.tsx +87 -0
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +83 -73
- package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
- package/templates/default/src/app/(base)/test-cases/page.tsx +3 -2
- package/templates/default/src/app/(base)/test-cases/test-case-flow.test.tsx +108 -0
- package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +43 -82
- package/templates/default/src/app/(base)/test-cases/test-case-form.test.tsx +202 -0
- package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +263 -395
- package/templates/default/src/app/(base)/test-cases/test-case-route-helpers.test.ts +95 -0
- package/templates/default/src/app/(base)/test-cases/test-case-route-helpers.ts +147 -0
- package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +4 -2
- package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +11 -10
- package/templates/default/src/app/(base)/test-runs/create/page.tsx +4 -5
- package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-runs/test-run-form-helpers.test.ts +50 -0
- package/templates/default/src/app/(base)/test-runs/test-run-form-helpers.ts +168 -0
- package/templates/default/src/app/(base)/test-runs/test-run-form.test.tsx +138 -0
- package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +111 -256
- package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
- package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
- package/templates/default/src/app/(base)/test-runs/use-test-run-name-validation.ts +74 -0
- package/templates/default/src/app/(base)/test-suites/create/page.tsx +17 -12
- package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +22 -19
- package/templates/default/src/app/(base)/test-suites/page.tsx +14 -56
- package/templates/default/src/app/(base)/test-suites/test-suite-form.test.tsx +127 -0
- package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +45 -64
- package/templates/default/src/app/(base)/test-suites/test-suite-helpers.test.ts +67 -0
- package/templates/default/src/app/(base)/test-suites/test-suite-helpers.ts +215 -0
- package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +32 -29
- package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
- package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
- package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
- package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
- package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
- package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
- package/templates/default/src/app/api/reports/steps/[stepId]/screenshot/route.test.ts +83 -0
- package/templates/default/src/app/api/reports/steps/[stepId]/screenshot/route.ts +52 -52
- package/templates/default/src/app/api/test-runs/[runId]/download/route.test.ts +169 -0
- package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +1 -1
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +135 -0
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
- package/templates/default/src/app/globals.css +147 -147
- package/templates/default/src/app/page.tsx +1 -1
- package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/default/src/components/base-node.tsx +21 -21
- package/templates/default/src/components/chart/pie-chart.tsx +73 -73
- package/templates/default/src/components/data-extraction/locator-inspector-helpers.test.ts +32 -0
- package/templates/default/src/components/data-extraction/locator-inspector-helpers.ts +183 -0
- package/templates/default/src/components/data-extraction/locator-inspector.tsx +349 -460
- package/templates/default/src/components/data-state/empty-state.tsx +40 -40
- package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
- package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/default/src/components/diagram/button-edge.tsx +54 -54
- package/templates/default/src/components/diagram/dynamic-parameters-helpers.test.ts +83 -0
- package/templates/default/src/components/diagram/dynamic-parameters-helpers.ts +158 -0
- package/templates/default/src/components/diagram/dynamic-parameters.tsx +350 -474
- package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
- package/templates/default/src/components/diagram/flow-diagram-helpers.test.ts +117 -0
- package/templates/default/src/components/diagram/flow-diagram-helpers.ts +251 -0
- package/templates/default/src/components/diagram/flow-diagram.tsx +247 -470
- package/templates/default/src/components/diagram/flow-host-helpers.test.ts +74 -0
- package/templates/default/src/components/diagram/flow-host-helpers.ts +51 -0
- package/templates/default/src/components/diagram/node-form-helpers.test.ts +92 -0
- package/templates/default/src/components/diagram/node-form-helpers.ts +100 -0
- package/templates/default/src/components/diagram/node-form.test.tsx +168 -0
- package/templates/default/src/components/diagram/node-form.tsx +199 -262
- package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
- package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
- package/templates/default/src/components/diagram/use-flow-node-order.ts +49 -0
- package/templates/default/src/components/form/error-message.tsx +7 -7
- package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
- package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
- package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/default/src/components/navigation/command-badge.tsx +34 -34
- package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
- package/templates/default/src/components/navigation/entity-search-command.tsx +118 -116
- package/templates/default/src/components/navigation/nav-card.tsx +31 -31
- package/templates/default/src/components/navigation/nav-command-helpers.ts +122 -0
- package/templates/default/src/components/navigation/nav-command-search.tsx +125 -0
- package/templates/default/src/components/navigation/nav-command.test.tsx +106 -0
- package/templates/default/src/components/navigation/nav-command.tsx +49 -472
- package/templates/default/src/components/navigation/nav-link.tsx +60 -60
- package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
- package/templates/default/src/components/navigation/use-nav-command.ts +58 -0
- package/templates/default/src/components/node-header.tsx +159 -159
- package/templates/default/src/components/reports/test-case-logs-modal.tsx +310 -310
- package/templates/default/src/components/table/table-actions.tsx +174 -172
- package/templates/default/src/components/test-case/test-case-form-helpers.test.ts +100 -0
- package/templates/default/src/components/test-case/test-case-form-helpers.ts +140 -0
- package/templates/default/src/components/test-case/test-case-picker-helpers.test.ts +40 -0
- package/templates/default/src/components/test-case/test-case-picker-helpers.ts +41 -0
- package/templates/default/src/components/test-case/test-case-picker.test.tsx +44 -0
- package/templates/default/src/components/test-case/test-case-picker.tsx +16 -35
- package/templates/default/src/components/test-case/test-scenario-preview.tsx +34 -0
- package/templates/default/src/components/test-run/download-logs-button.tsx +92 -92
- package/templates/default/src/components/test-run/log-viewer-helpers.test.ts +37 -0
- package/templates/default/src/components/test-run/log-viewer-helpers.ts +80 -0
- package/templates/default/src/components/test-run/log-viewer.test.tsx +118 -0
- package/templates/default/src/components/test-run/log-viewer.tsx +51 -350
- package/templates/default/src/components/test-run/test-run-details-helpers.test.ts +31 -0
- package/templates/default/src/components/test-run/test-run-details-helpers.ts +208 -0
- package/templates/default/src/components/test-run/test-run-details.test.tsx +174 -0
- package/templates/default/src/components/test-run/test-run-details.tsx +155 -457
- package/templates/default/src/components/test-run/test-run-header-helpers.test.ts +31 -0
- package/templates/default/src/components/test-run/test-run-header-helpers.ts +23 -0
- package/templates/default/src/components/test-run/test-run-header.test.tsx +103 -0
- package/templates/default/src/components/test-run/test-run-header.tsx +27 -149
- package/templates/default/src/components/test-run/use-log-viewer.ts +213 -0
- package/templates/default/src/components/test-run/use-test-run-details.ts +184 -0
- package/templates/default/src/components/test-run/use-test-run-header.ts +89 -0
- package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
- package/templates/default/src/components/test-suite/test-suite-picker-helpers.test.ts +68 -0
- package/templates/default/src/components/test-suite/test-suite-picker-helpers.ts +76 -0
- package/templates/default/src/components/test-suite/test-suite-picker.test.tsx +65 -0
- package/templates/default/src/components/test-suite/test-suite-picker.tsx +4 -72
- package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
- package/templates/default/src/components/theme/theme-provider.tsx +8 -8
- package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/default/src/components/typography/page-header.tsx +7 -7
- package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
- package/templates/default/src/components/ui/alert.tsx +43 -43
- package/templates/default/src/components/ui/avatar.tsx +40 -40
- package/templates/default/src/components/ui/badge.tsx +29 -29
- package/templates/default/src/components/ui/button.tsx +47 -47
- package/templates/default/src/components/ui/calendar.tsx +158 -158
- package/templates/default/src/components/ui/card.tsx +43 -43
- package/templates/default/src/components/ui/checkbox.tsx +28 -28
- package/templates/default/src/components/ui/command.tsx +135 -135
- package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
- package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
- package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
- package/templates/default/src/components/ui/data-table.test.tsx +122 -0
- package/templates/default/src/components/ui/data-table.tsx +298 -261
- package/templates/default/src/components/ui/dialog.tsx +97 -97
- package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/src/components/ui/input.tsx +22 -22
- package/templates/default/src/components/ui/kbd.tsx +28 -28
- package/templates/default/src/components/ui/label.tsx +19 -19
- package/templates/default/src/components/ui/loading.tsx +12 -12
- package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
- package/templates/default/src/components/ui/multi-select.test.tsx +45 -0
- package/templates/default/src/components/ui/multi-select.tsx +158 -142
- package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
- package/templates/default/src/components/ui/popover.tsx +33 -33
- package/templates/default/src/components/ui/progress.tsx +25 -25
- package/templates/default/src/components/ui/radio-group.tsx +44 -44
- package/templates/default/src/components/ui/scroll-area.tsx +40 -40
- package/templates/default/src/components/ui/select.tsx +151 -151
- package/templates/default/src/components/ui/separator.tsx +22 -22
- package/templates/default/src/components/ui/skeleton.tsx +7 -7
- package/templates/default/src/components/ui/table.tsx +76 -76
- package/templates/default/src/components/ui/tabs.tsx +55 -55
- package/templates/default/src/components/ui/textarea.tsx +21 -21
- package/templates/default/src/components/ui/toast.tsx +113 -113
- package/templates/default/src/components/ui/toaster.tsx +26 -26
- package/templates/default/src/components/user-prompt/delete-prompt.test.tsx +60 -0
- package/templates/default/src/components/user-prompt/delete-prompt.tsx +118 -87
- package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
- package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
- package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
- package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
- package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
- package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
- package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
- package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
- package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
- package/templates/default/src/hooks/use-toast.ts +187 -187
- package/templates/default/src/lib/automation/automation-path-roots.ts +95 -0
- package/templates/default/src/lib/automation/automation-workspace.ts +147 -0
- package/templates/default/src/lib/automation/paths.ts +6 -211
- package/templates/default/src/lib/bidirectional-sync.ts +432 -432
- package/templates/default/src/lib/environment-file-utils.ts +2 -1
- package/templates/default/src/lib/executor/local-executor-adapter.ts +2 -5
- package/templates/default/src/lib/feature-file-generator.ts +2 -1
- package/templates/default/src/lib/gherkin-parser.ts +0 -2
- package/templates/default/src/lib/locator-group-file-utils.ts +304 -307
- package/templates/default/src/lib/locator-picker/session-manager.ts +0 -21
- package/templates/default/src/lib/locator-picker/suggestions.ts +4 -2
- package/templates/default/src/lib/metrics/metric-calculator.ts +2 -6
- package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
- package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
- package/templates/default/src/lib/sync/sync-executor.test.ts +76 -0
- package/templates/default/src/lib/sync/sync-pending-counts.test.ts +227 -226
- package/templates/default/src/lib/sync/sync-pending-counts.ts +2 -5
- package/templates/default/src/lib/template-sync-utils.d.ts +6 -6
- package/templates/default/src/lib/template-sync-utils.js +46 -46
- package/templates/default/src/lib/template-sync-utils.ts +63 -63
- package/templates/default/src/lib/test-case-utils.ts +6 -6
- package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
- package/templates/default/src/lib/test-run/report-parser.ts +352 -352
- package/templates/default/src/lib/test-run/test-run-executor.ts +13 -13
- package/templates/default/src/lib/test-run/winston-logger.ts +65 -64
- package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
- package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/default/src/lib/utils/template-step-file-generator.ts +2 -2
- package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
- package/templates/default/src/lib/utils.ts +31 -31
- package/templates/default/src/services/dashboard/dashboard-service.test.ts +106 -0
- package/templates/default/src/services/dashboard/dashboard-service.ts +173 -0
- package/templates/default/src/services/environment/environment-service.test.ts +137 -0
- package/templates/default/src/services/environment/environment-service.ts +96 -0
- package/templates/default/src/services/locator/locator-path-utils.test.ts +14 -0
- package/templates/default/src/services/locator/locator-path-utils.ts +14 -0
- package/templates/default/src/services/locator/locator-service.test.ts +63 -0
- package/templates/default/src/services/locator/locator-service.ts +479 -0
- package/templates/default/src/services/locator/locator-sync-utils.test.ts +19 -0
- package/templates/default/src/services/locator/locator-sync-utils.ts +21 -0
- package/templates/default/src/services/locator-group/locator-group-service.test.ts +123 -0
- package/templates/default/src/services/locator-group/locator-group-service.ts +180 -0
- package/templates/default/src/services/module/module-service.test.ts +89 -0
- package/templates/default/src/services/module/module-service.ts +66 -0
- package/templates/default/src/services/report/report-service.test.ts +244 -0
- package/templates/default/src/services/report/report-service.ts +438 -0
- package/templates/default/src/services/shared/constants.ts +2 -0
- package/templates/default/src/services/shared/errors.test.ts +38 -0
- package/templates/default/src/services/shared/errors.ts +44 -0
- package/templates/default/src/services/shared/index.ts +7 -0
- package/templates/default/src/services/tag/tag-service.test.ts +22 -0
- package/templates/default/src/services/tag/tag-service.ts +41 -0
- package/templates/default/src/services/template-step/template-step-service.test.ts +22 -0
- package/templates/default/src/services/template-step/template-step-service.ts +171 -0
- package/templates/default/src/services/template-step-group/template-step-group-service.test.ts +22 -0
- package/templates/default/src/services/template-step-group/template-step-group-service.ts +81 -0
- package/templates/default/src/services/template-test-case/template-test-case-service.test.ts +22 -0
- package/templates/default/src/services/template-test-case/template-test-case-service.ts +128 -0
- package/templates/default/src/services/test-case/test-case-service.test.ts +175 -0
- package/templates/default/src/services/test-case/test-case-service.ts +298 -0
- package/templates/default/src/services/test-run/test-run-helpers.ts +61 -0
- package/templates/default/src/services/test-run/test-run-service.test.ts +647 -0
- package/templates/default/src/services/test-run/test-run-service.ts +917 -0
- package/templates/default/src/services/test-suite/test-suite-service.test.ts +127 -0
- package/templates/default/src/services/test-suite/test-suite-service.ts +197 -0
- package/templates/default/src/types/diagram/diagram.ts +34 -34
- package/templates/default/src/types/diagram/template-step.ts +11 -11
- package/templates/default/src/types/executor/browser.type.ts +1 -1
- package/templates/default/src/types/form/actionHandler.ts +19 -6
- package/templates/default/src/types/locator/locator.type.ts +11 -11
- package/templates/default/src/types/step/step.type.ts +1 -1
- package/templates/default/src/types/table/data-table.ts +6 -6
- package/templates/default/tailwind.config.ts +62 -62
- package/templates/default/tsconfig.json +1 -1
- package/dist/cli.e2e.test.d.ts +0 -2
- package/dist/cli.e2e.test.d.ts.map +0 -1
- package/dist/cli.e2e.test.js +0 -73
- package/dist/cli.e2e.test.js.map +0 -1
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -65
- package/dist/config.test.js.map +0 -1
- package/dist/copy-template.test.d.ts +0 -2
- package/dist/copy-template.test.d.ts.map +0 -1
- package/dist/copy-template.test.js +0 -71
- package/dist/copy-template.test.js.map +0 -1
- package/dist/download-repo.test.d.ts +0 -2
- package/dist/download-repo.test.d.ts.map +0 -1
- package/dist/download-repo.test.js +0 -14
- package/dist/download-repo.test.js.map +0 -1
- package/dist/install.test.d.ts +0 -2
- package/dist/install.test.d.ts.map +0 -1
- package/dist/install.test.js +0 -119
- package/dist/install.test.js.map +0 -1
- package/dist/prompts.test.d.ts +0 -2
- package/dist/prompts.test.d.ts.map +0 -1
- package/dist/prompts.test.js +0 -58
- package/dist/prompts.test.js.map +0 -1
- package/templates/default/src/actions/conflict/conflict.action.ts +0 -33
- package/templates/default/src/actions/review/review-actions.ts +0 -147
- package/templates/default/src/actions/user/user-actions.ts +0 -13
- package/templates/default/src/app/(base)/locators/locator-form.tsx +0 -163
- package/templates/default/src/app/(base)/reviews/create/page.tsx +0 -26
- package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +0 -15
- package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +0 -26
- package/templates/default/src/app/(base)/reviews/page.tsx +0 -26
- package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +0 -26
- package/templates/default/src/app/(base)/reviews/review-form.tsx +0 -11
- package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +0 -9
- package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +0 -9
- package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +0 -15
- package/templates/default/src/constants/form-opts/locator-form-opts.ts +0 -20
- package/templates/default/src/constants/form-opts/review-form-opts.ts +0 -23
package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
-- RedefineTables
|
|
2
|
-
PRAGMA defer_foreign_keys=ON;
|
|
3
|
-
PRAGMA foreign_keys=OFF;
|
|
4
|
-
CREATE TABLE "new_ReportHook" (
|
|
5
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
-
"reportScenarioId" TEXT NOT NULL,
|
|
7
|
-
"keyword" TEXT NOT NULL,
|
|
8
|
-
"status" TEXT NOT NULL,
|
|
9
|
-
"duration" TEXT NOT NULL,
|
|
10
|
-
"errorMessage" TEXT,
|
|
11
|
-
"errorTrace" TEXT,
|
|
12
|
-
"hidden" BOOLEAN NOT NULL DEFAULT false,
|
|
13
|
-
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
14
|
-
"updatedAt" DATETIME NOT NULL,
|
|
15
|
-
CONSTRAINT "ReportHook_reportScenarioId_fkey" FOREIGN KEY ("reportScenarioId") REFERENCES "ReportScenario" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
16
|
-
);
|
|
17
|
-
INSERT INTO "new_ReportHook" ("createdAt", "duration", "errorMessage", "errorTrace", "hidden", "id", "keyword", "reportScenarioId", "status", "updatedAt") SELECT "createdAt", CAST("duration" AS TEXT), "errorMessage", "errorTrace", "hidden", "id", "keyword", "reportScenarioId", "status", "updatedAt" FROM "ReportHook";
|
|
18
|
-
DROP TABLE "ReportHook";
|
|
19
|
-
ALTER TABLE "new_ReportHook" RENAME TO "ReportHook";
|
|
20
|
-
CREATE TABLE "new_ReportStep" (
|
|
21
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
22
|
-
"reportScenarioId" TEXT NOT NULL,
|
|
23
|
-
"keyword" TEXT NOT NULL,
|
|
24
|
-
"line" INTEGER,
|
|
25
|
-
"name" TEXT NOT NULL,
|
|
26
|
-
"matchLocation" TEXT,
|
|
27
|
-
"status" TEXT NOT NULL,
|
|
28
|
-
"duration" TEXT NOT NULL,
|
|
29
|
-
"errorMessage" TEXT,
|
|
30
|
-
"errorTrace" TEXT,
|
|
31
|
-
"hidden" BOOLEAN NOT NULL DEFAULT false,
|
|
32
|
-
"order" INTEGER NOT NULL,
|
|
33
|
-
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
-
"updatedAt" DATETIME NOT NULL,
|
|
35
|
-
CONSTRAINT "ReportStep_reportScenarioId_fkey" FOREIGN KEY ("reportScenarioId") REFERENCES "ReportScenario" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
36
|
-
);
|
|
37
|
-
INSERT INTO "new_ReportStep" ("createdAt", "duration", "errorMessage", "errorTrace", "hidden", "id", "keyword", "line", "matchLocation", "name", "order", "reportScenarioId", "status", "updatedAt") SELECT "createdAt", CAST("duration" AS TEXT), "errorMessage", "errorTrace", "hidden", "id", "keyword", "line", "matchLocation", "name", "order", "reportScenarioId", "status", "updatedAt" FROM "ReportStep";
|
|
38
|
-
DROP TABLE "ReportStep";
|
|
39
|
-
ALTER TABLE "new_ReportStep" RENAME TO "ReportStep";
|
|
40
|
-
CREATE TABLE "new_ReportTestCase" (
|
|
41
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
42
|
-
"reportId" TEXT NOT NULL,
|
|
43
|
-
"testCaseId" TEXT NOT NULL,
|
|
44
|
-
"testRunTestCaseId" TEXT NOT NULL,
|
|
45
|
-
"reportScenarioId" TEXT,
|
|
46
|
-
"duration" TEXT NOT NULL,
|
|
47
|
-
CONSTRAINT "ReportTestCase_testRunTestCaseId_fkey" FOREIGN KEY ("testRunTestCaseId") REFERENCES "TestRunTestCase" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
48
|
-
CONSTRAINT "ReportTestCase_reportId_fkey" FOREIGN KEY ("reportId") REFERENCES "Report" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
49
|
-
CONSTRAINT "ReportTestCase_reportScenarioId_fkey" FOREIGN KEY ("reportScenarioId") REFERENCES "ReportScenario" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
50
|
-
);
|
|
51
|
-
INSERT INTO "new_ReportTestCase" ("duration", "id", "reportId", "reportScenarioId", "testCaseId", "testRunTestCaseId") SELECT CAST("duration" AS TEXT), "id", "reportId", "reportScenarioId", "testCaseId", "testRunTestCaseId" FROM "ReportTestCase";
|
|
52
|
-
DROP TABLE "ReportTestCase";
|
|
53
|
-
ALTER TABLE "new_ReportTestCase" RENAME TO "ReportTestCase";
|
|
54
|
-
PRAGMA foreign_keys=ON;
|
|
55
|
-
PRAGMA defer_foreign_keys=OFF;
|
|
1
|
+
-- RedefineTables
|
|
2
|
+
PRAGMA defer_foreign_keys=ON;
|
|
3
|
+
PRAGMA foreign_keys=OFF;
|
|
4
|
+
CREATE TABLE "new_ReportHook" (
|
|
5
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
+
"reportScenarioId" TEXT NOT NULL,
|
|
7
|
+
"keyword" TEXT NOT NULL,
|
|
8
|
+
"status" TEXT NOT NULL,
|
|
9
|
+
"duration" TEXT NOT NULL,
|
|
10
|
+
"errorMessage" TEXT,
|
|
11
|
+
"errorTrace" TEXT,
|
|
12
|
+
"hidden" BOOLEAN NOT NULL DEFAULT false,
|
|
13
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
14
|
+
"updatedAt" DATETIME NOT NULL,
|
|
15
|
+
CONSTRAINT "ReportHook_reportScenarioId_fkey" FOREIGN KEY ("reportScenarioId") REFERENCES "ReportScenario" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
16
|
+
);
|
|
17
|
+
INSERT INTO "new_ReportHook" ("createdAt", "duration", "errorMessage", "errorTrace", "hidden", "id", "keyword", "reportScenarioId", "status", "updatedAt") SELECT "createdAt", CAST("duration" AS TEXT), "errorMessage", "errorTrace", "hidden", "id", "keyword", "reportScenarioId", "status", "updatedAt" FROM "ReportHook";
|
|
18
|
+
DROP TABLE "ReportHook";
|
|
19
|
+
ALTER TABLE "new_ReportHook" RENAME TO "ReportHook";
|
|
20
|
+
CREATE TABLE "new_ReportStep" (
|
|
21
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
22
|
+
"reportScenarioId" TEXT NOT NULL,
|
|
23
|
+
"keyword" TEXT NOT NULL,
|
|
24
|
+
"line" INTEGER,
|
|
25
|
+
"name" TEXT NOT NULL,
|
|
26
|
+
"matchLocation" TEXT,
|
|
27
|
+
"status" TEXT NOT NULL,
|
|
28
|
+
"duration" TEXT NOT NULL,
|
|
29
|
+
"errorMessage" TEXT,
|
|
30
|
+
"errorTrace" TEXT,
|
|
31
|
+
"hidden" BOOLEAN NOT NULL DEFAULT false,
|
|
32
|
+
"order" INTEGER NOT NULL,
|
|
33
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
+
"updatedAt" DATETIME NOT NULL,
|
|
35
|
+
CONSTRAINT "ReportStep_reportScenarioId_fkey" FOREIGN KEY ("reportScenarioId") REFERENCES "ReportScenario" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
36
|
+
);
|
|
37
|
+
INSERT INTO "new_ReportStep" ("createdAt", "duration", "errorMessage", "errorTrace", "hidden", "id", "keyword", "line", "matchLocation", "name", "order", "reportScenarioId", "status", "updatedAt") SELECT "createdAt", CAST("duration" AS TEXT), "errorMessage", "errorTrace", "hidden", "id", "keyword", "line", "matchLocation", "name", "order", "reportScenarioId", "status", "updatedAt" FROM "ReportStep";
|
|
38
|
+
DROP TABLE "ReportStep";
|
|
39
|
+
ALTER TABLE "new_ReportStep" RENAME TO "ReportStep";
|
|
40
|
+
CREATE TABLE "new_ReportTestCase" (
|
|
41
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
42
|
+
"reportId" TEXT NOT NULL,
|
|
43
|
+
"testCaseId" TEXT NOT NULL,
|
|
44
|
+
"testRunTestCaseId" TEXT NOT NULL,
|
|
45
|
+
"reportScenarioId" TEXT,
|
|
46
|
+
"duration" TEXT NOT NULL,
|
|
47
|
+
CONSTRAINT "ReportTestCase_testRunTestCaseId_fkey" FOREIGN KEY ("testRunTestCaseId") REFERENCES "TestRunTestCase" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
48
|
+
CONSTRAINT "ReportTestCase_reportId_fkey" FOREIGN KEY ("reportId") REFERENCES "Report" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
49
|
+
CONSTRAINT "ReportTestCase_reportScenarioId_fkey" FOREIGN KEY ("reportScenarioId") REFERENCES "ReportScenario" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
50
|
+
);
|
|
51
|
+
INSERT INTO "new_ReportTestCase" ("duration", "id", "reportId", "reportScenarioId", "testCaseId", "testRunTestCaseId") SELECT CAST("duration" AS TEXT), "id", "reportId", "reportScenarioId", "testCaseId", "testRunTestCaseId" FROM "ReportTestCase";
|
|
52
|
+
DROP TABLE "ReportTestCase";
|
|
53
|
+
ALTER TABLE "new_ReportTestCase" RENAME TO "ReportTestCase";
|
|
54
|
+
PRAGMA foreign_keys=ON;
|
|
55
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
-- RedefineTables
|
|
2
|
-
PRAGMA defer_foreign_keys=ON;
|
|
3
|
-
PRAGMA foreign_keys=OFF;
|
|
4
|
-
CREATE TABLE "new_TestRun" (
|
|
5
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
-
"name" TEXT NOT NULL,
|
|
7
|
-
"runId" TEXT NOT NULL,
|
|
8
|
-
"startedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
9
|
-
"completedAt" DATETIME,
|
|
10
|
-
"status" TEXT NOT NULL DEFAULT 'QUEUED',
|
|
11
|
-
"result" TEXT NOT NULL DEFAULT 'PENDING',
|
|
12
|
-
"updatedAt" DATETIME NOT NULL,
|
|
13
|
-
"environmentId" TEXT NOT NULL,
|
|
14
|
-
"testWorkersCount" INTEGER DEFAULT 1,
|
|
15
|
-
"browserEngine" TEXT NOT NULL DEFAULT 'CHROMIUM',
|
|
16
|
-
"logPath" TEXT,
|
|
17
|
-
"reportPath" TEXT,
|
|
18
|
-
CONSTRAINT "TestRun_environmentId_fkey" FOREIGN KEY ("environmentId") REFERENCES "Environment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
19
|
-
);
|
|
20
|
-
INSERT INTO "new_TestRun" ("browserEngine", "completedAt", "environmentId", "id", "logPath", "name", "reportPath", "result", "runId", "startedAt", "status", "testWorkersCount", "updatedAt") SELECT "browserEngine", "completedAt", "environmentId", "id", "logPath", "name", "reportPath", "result", "runId", "startedAt", "status", "testWorkersCount", "updatedAt" FROM "TestRun";
|
|
21
|
-
DROP TABLE "TestRun";
|
|
22
|
-
ALTER TABLE "new_TestRun" RENAME TO "TestRun";
|
|
23
|
-
CREATE UNIQUE INDEX "TestRun_name_key" ON "TestRun"("name");
|
|
24
|
-
CREATE UNIQUE INDEX "TestRun_runId_key" ON "TestRun"("runId");
|
|
25
|
-
PRAGMA foreign_keys=ON;
|
|
26
|
-
PRAGMA defer_foreign_keys=OFF;
|
|
27
|
-
|
|
1
|
+
-- RedefineTables
|
|
2
|
+
PRAGMA defer_foreign_keys=ON;
|
|
3
|
+
PRAGMA foreign_keys=OFF;
|
|
4
|
+
CREATE TABLE "new_TestRun" (
|
|
5
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
+
"name" TEXT NOT NULL,
|
|
7
|
+
"runId" TEXT NOT NULL,
|
|
8
|
+
"startedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
9
|
+
"completedAt" DATETIME,
|
|
10
|
+
"status" TEXT NOT NULL DEFAULT 'QUEUED',
|
|
11
|
+
"result" TEXT NOT NULL DEFAULT 'PENDING',
|
|
12
|
+
"updatedAt" DATETIME NOT NULL,
|
|
13
|
+
"environmentId" TEXT NOT NULL,
|
|
14
|
+
"testWorkersCount" INTEGER DEFAULT 1,
|
|
15
|
+
"browserEngine" TEXT NOT NULL DEFAULT 'CHROMIUM',
|
|
16
|
+
"logPath" TEXT,
|
|
17
|
+
"reportPath" TEXT,
|
|
18
|
+
CONSTRAINT "TestRun_environmentId_fkey" FOREIGN KEY ("environmentId") REFERENCES "Environment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
19
|
+
);
|
|
20
|
+
INSERT INTO "new_TestRun" ("browserEngine", "completedAt", "environmentId", "id", "logPath", "name", "reportPath", "result", "runId", "startedAt", "status", "testWorkersCount", "updatedAt") SELECT "browserEngine", "completedAt", "environmentId", "id", "logPath", "name", "reportPath", "result", "runId", "startedAt", "status", "testWorkersCount", "updatedAt" FROM "TestRun";
|
|
21
|
+
DROP TABLE "TestRun";
|
|
22
|
+
ALTER TABLE "new_TestRun" RENAME TO "TestRun";
|
|
23
|
+
CREATE UNIQUE INDEX "TestRun_name_key" ON "TestRun"("name");
|
|
24
|
+
CREATE UNIQUE INDEX "TestRun_runId_key" ON "TestRun"("runId");
|
|
25
|
+
PRAGMA foreign_keys=ON;
|
|
26
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
27
|
+
|
package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
-- CreateTable
|
|
2
|
-
CREATE TABLE "TestCaseMetrics" (
|
|
3
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
4
|
-
"testCaseId" TEXT NOT NULL,
|
|
5
|
-
"isRepeatedlyFailing" BOOLEAN NOT NULL DEFAULT false,
|
|
6
|
-
"isFlaky" BOOLEAN NOT NULL DEFAULT false,
|
|
7
|
-
"consecutiveFailures" INTEGER NOT NULL DEFAULT 0,
|
|
8
|
-
"failureRate" REAL NOT NULL DEFAULT 0,
|
|
9
|
-
"totalRecentRuns" INTEGER NOT NULL DEFAULT 0,
|
|
10
|
-
"failedRecentRuns" INTEGER NOT NULL DEFAULT 0,
|
|
11
|
-
"lastExecutedAt" DATETIME,
|
|
12
|
-
"lastFailedAt" DATETIME,
|
|
13
|
-
"lastPassedAt" DATETIME,
|
|
14
|
-
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
-
"updatedAt" DATETIME NOT NULL,
|
|
16
|
-
CONSTRAINT "TestCaseMetrics_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES "TestCase" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
-- CreateTable
|
|
20
|
-
CREATE TABLE "TestSuiteMetrics" (
|
|
21
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
22
|
-
"testSuiteId" TEXT NOT NULL,
|
|
23
|
-
"lastExecutedAt" DATETIME,
|
|
24
|
-
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
25
|
-
"updatedAt" DATETIME NOT NULL,
|
|
26
|
-
CONSTRAINT "TestSuiteMetrics_testSuiteId_fkey" FOREIGN KEY ("testSuiteId") REFERENCES "TestSuite" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
-- CreateTable
|
|
30
|
-
CREATE TABLE "DashboardMetrics" (
|
|
31
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
32
|
-
"failedRecentRunsCount" INTEGER NOT NULL DEFAULT 0,
|
|
33
|
-
"repeatedlyFailingTestsCount" INTEGER NOT NULL DEFAULT 0,
|
|
34
|
-
"flakyTestsCount" INTEGER NOT NULL DEFAULT 0,
|
|
35
|
-
"suitesNotExecutedRecentlyCount" INTEGER NOT NULL DEFAULT 0,
|
|
36
|
-
"lastUpdatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
37
|
-
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
-- CreateIndex
|
|
41
|
-
CREATE UNIQUE INDEX "TestCaseMetrics_testCaseId_key" ON "TestCaseMetrics"("testCaseId");
|
|
42
|
-
|
|
43
|
-
-- CreateIndex
|
|
44
|
-
CREATE INDEX "TestCaseMetrics_isRepeatedlyFailing_idx" ON "TestCaseMetrics"("isRepeatedlyFailing");
|
|
45
|
-
|
|
46
|
-
-- CreateIndex
|
|
47
|
-
CREATE INDEX "TestCaseMetrics_isFlaky_idx" ON "TestCaseMetrics"("isFlaky");
|
|
48
|
-
|
|
49
|
-
-- CreateIndex
|
|
50
|
-
CREATE UNIQUE INDEX "TestSuiteMetrics_testSuiteId_key" ON "TestSuiteMetrics"("testSuiteId");
|
|
51
|
-
|
|
52
|
-
-- CreateIndex
|
|
53
|
-
CREATE INDEX "TestSuiteMetrics_lastExecutedAt_idx" ON "TestSuiteMetrics"("lastExecutedAt");
|
|
54
|
-
|
|
55
|
-
-- CreateIndex
|
|
56
|
-
CREATE INDEX "TestRun_completedAt_idx" ON "TestRun"("completedAt");
|
|
57
|
-
|
|
58
|
-
-- CreateIndex
|
|
59
|
-
CREATE INDEX "TestRun_result_idx" ON "TestRun"("result");
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "TestCaseMetrics" (
|
|
3
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
4
|
+
"testCaseId" TEXT NOT NULL,
|
|
5
|
+
"isRepeatedlyFailing" BOOLEAN NOT NULL DEFAULT false,
|
|
6
|
+
"isFlaky" BOOLEAN NOT NULL DEFAULT false,
|
|
7
|
+
"consecutiveFailures" INTEGER NOT NULL DEFAULT 0,
|
|
8
|
+
"failureRate" REAL NOT NULL DEFAULT 0,
|
|
9
|
+
"totalRecentRuns" INTEGER NOT NULL DEFAULT 0,
|
|
10
|
+
"failedRecentRuns" INTEGER NOT NULL DEFAULT 0,
|
|
11
|
+
"lastExecutedAt" DATETIME,
|
|
12
|
+
"lastFailedAt" DATETIME,
|
|
13
|
+
"lastPassedAt" DATETIME,
|
|
14
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
+
"updatedAt" DATETIME NOT NULL,
|
|
16
|
+
CONSTRAINT "TestCaseMetrics_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES "TestCase" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
-- CreateTable
|
|
20
|
+
CREATE TABLE "TestSuiteMetrics" (
|
|
21
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
22
|
+
"testSuiteId" TEXT NOT NULL,
|
|
23
|
+
"lastExecutedAt" DATETIME,
|
|
24
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
25
|
+
"updatedAt" DATETIME NOT NULL,
|
|
26
|
+
CONSTRAINT "TestSuiteMetrics_testSuiteId_fkey" FOREIGN KEY ("testSuiteId") REFERENCES "TestSuite" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
-- CreateTable
|
|
30
|
+
CREATE TABLE "DashboardMetrics" (
|
|
31
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
32
|
+
"failedRecentRunsCount" INTEGER NOT NULL DEFAULT 0,
|
|
33
|
+
"repeatedlyFailingTestsCount" INTEGER NOT NULL DEFAULT 0,
|
|
34
|
+
"flakyTestsCount" INTEGER NOT NULL DEFAULT 0,
|
|
35
|
+
"suitesNotExecutedRecentlyCount" INTEGER NOT NULL DEFAULT 0,
|
|
36
|
+
"lastUpdatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
37
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- CreateIndex
|
|
41
|
+
CREATE UNIQUE INDEX "TestCaseMetrics_testCaseId_key" ON "TestCaseMetrics"("testCaseId");
|
|
42
|
+
|
|
43
|
+
-- CreateIndex
|
|
44
|
+
CREATE INDEX "TestCaseMetrics_isRepeatedlyFailing_idx" ON "TestCaseMetrics"("isRepeatedlyFailing");
|
|
45
|
+
|
|
46
|
+
-- CreateIndex
|
|
47
|
+
CREATE INDEX "TestCaseMetrics_isFlaky_idx" ON "TestCaseMetrics"("isFlaky");
|
|
48
|
+
|
|
49
|
+
-- CreateIndex
|
|
50
|
+
CREATE UNIQUE INDEX "TestSuiteMetrics_testSuiteId_key" ON "TestSuiteMetrics"("testSuiteId");
|
|
51
|
+
|
|
52
|
+
-- CreateIndex
|
|
53
|
+
CREATE INDEX "TestSuiteMetrics_lastExecutedAt_idx" ON "TestSuiteMetrics"("lastExecutedAt");
|
|
54
|
+
|
|
55
|
+
-- CreateIndex
|
|
56
|
+
CREATE INDEX "TestRun_completedAt_idx" ON "TestRun"("completedAt");
|
|
57
|
+
|
|
58
|
+
-- CreateIndex
|
|
59
|
+
CREATE INDEX "TestRun_result_idx" ON "TestRun"("result");
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
-- RedefineTables
|
|
2
|
-
PRAGMA defer_foreign_keys=ON;
|
|
3
|
-
PRAGMA foreign_keys=OFF;
|
|
4
|
-
CREATE TABLE "new_TemplateTestCaseStepParameter" (
|
|
5
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
-
"name" TEXT NOT NULL,
|
|
7
|
-
"defaultValue" TEXT NOT NULL,
|
|
8
|
-
"order" INTEGER NOT NULL,
|
|
9
|
-
"testCaseStepId" TEXT NOT NULL,
|
|
10
|
-
"locatorId" TEXT,
|
|
11
|
-
"type" TEXT NOT NULL,
|
|
12
|
-
"defaultLocatorId" TEXT,
|
|
13
|
-
CONSTRAINT "TemplateTestCaseStepParameter_defaultLocatorId_fkey" FOREIGN KEY ("defaultLocatorId") REFERENCES "Locator" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
14
|
-
CONSTRAINT "TemplateTestCaseStepParameter_testCaseStepId_fkey" FOREIGN KEY ("testCaseStepId") REFERENCES "TemplateTestCaseStep" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
15
|
-
);
|
|
16
|
-
INSERT INTO "new_TemplateTestCaseStepParameter" ("defaultLocatorId", "defaultValue", "id", "locatorId", "name", "order", "testCaseStepId", "type") SELECT "defaultLocatorId", "defaultValue", "id", "locatorId", "name", "order", "testCaseStepId", "type" FROM "TemplateTestCaseStepParameter";
|
|
17
|
-
DROP TABLE "TemplateTestCaseStepParameter";
|
|
18
|
-
ALTER TABLE "new_TemplateTestCaseStepParameter" RENAME TO "TemplateTestCaseStepParameter";
|
|
19
|
-
CREATE TABLE "new_TestCaseStepParameter" (
|
|
20
|
-
"id" TEXT NOT NULL PRIMARY KEY,
|
|
21
|
-
"name" TEXT NOT NULL,
|
|
22
|
-
"value" TEXT NOT NULL,
|
|
23
|
-
"order" INTEGER NOT NULL,
|
|
24
|
-
"testCaseStepId" TEXT NOT NULL,
|
|
25
|
-
"locatorId" TEXT,
|
|
26
|
-
"type" TEXT NOT NULL,
|
|
27
|
-
CONSTRAINT "TestCaseStepParameter_locatorId_fkey" FOREIGN KEY ("locatorId") REFERENCES "Locator" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
28
|
-
CONSTRAINT "TestCaseStepParameter_testCaseStepId_fkey" FOREIGN KEY ("testCaseStepId") REFERENCES "TestCaseStep" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
29
|
-
);
|
|
30
|
-
INSERT INTO "new_TestCaseStepParameter" ("id", "locatorId", "name", "order", "testCaseStepId", "type", "value") SELECT "id", "locatorId", "name", "order", "testCaseStepId", "type", "value" FROM "TestCaseStepParameter";
|
|
31
|
-
DROP TABLE "TestCaseStepParameter";
|
|
32
|
-
ALTER TABLE "new_TestCaseStepParameter" RENAME TO "TestCaseStepParameter";
|
|
33
|
-
PRAGMA foreign_keys=ON;
|
|
34
|
-
PRAGMA defer_foreign_keys=OFF;
|
|
1
|
+
-- RedefineTables
|
|
2
|
+
PRAGMA defer_foreign_keys=ON;
|
|
3
|
+
PRAGMA foreign_keys=OFF;
|
|
4
|
+
CREATE TABLE "new_TemplateTestCaseStepParameter" (
|
|
5
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
+
"name" TEXT NOT NULL,
|
|
7
|
+
"defaultValue" TEXT NOT NULL,
|
|
8
|
+
"order" INTEGER NOT NULL,
|
|
9
|
+
"testCaseStepId" TEXT NOT NULL,
|
|
10
|
+
"locatorId" TEXT,
|
|
11
|
+
"type" TEXT NOT NULL,
|
|
12
|
+
"defaultLocatorId" TEXT,
|
|
13
|
+
CONSTRAINT "TemplateTestCaseStepParameter_defaultLocatorId_fkey" FOREIGN KEY ("defaultLocatorId") REFERENCES "Locator" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
14
|
+
CONSTRAINT "TemplateTestCaseStepParameter_testCaseStepId_fkey" FOREIGN KEY ("testCaseStepId") REFERENCES "TemplateTestCaseStep" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
15
|
+
);
|
|
16
|
+
INSERT INTO "new_TemplateTestCaseStepParameter" ("defaultLocatorId", "defaultValue", "id", "locatorId", "name", "order", "testCaseStepId", "type") SELECT "defaultLocatorId", "defaultValue", "id", "locatorId", "name", "order", "testCaseStepId", "type" FROM "TemplateTestCaseStepParameter";
|
|
17
|
+
DROP TABLE "TemplateTestCaseStepParameter";
|
|
18
|
+
ALTER TABLE "new_TemplateTestCaseStepParameter" RENAME TO "TemplateTestCaseStepParameter";
|
|
19
|
+
CREATE TABLE "new_TestCaseStepParameter" (
|
|
20
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
21
|
+
"name" TEXT NOT NULL,
|
|
22
|
+
"value" TEXT NOT NULL,
|
|
23
|
+
"order" INTEGER NOT NULL,
|
|
24
|
+
"testCaseStepId" TEXT NOT NULL,
|
|
25
|
+
"locatorId" TEXT,
|
|
26
|
+
"type" TEXT NOT NULL,
|
|
27
|
+
CONSTRAINT "TestCaseStepParameter_locatorId_fkey" FOREIGN KEY ("locatorId") REFERENCES "Locator" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
28
|
+
CONSTRAINT "TestCaseStepParameter_testCaseStepId_fkey" FOREIGN KEY ("testCaseStepId") REFERENCES "TestCaseStep" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
29
|
+
);
|
|
30
|
+
INSERT INTO "new_TestCaseStepParameter" ("id", "locatorId", "name", "order", "testCaseStepId", "type", "value") SELECT "id", "locatorId", "name", "order", "testCaseStepId", "type", "value" FROM "TestCaseStepParameter";
|
|
31
|
+
DROP TABLE "TestCaseStepParameter";
|
|
32
|
+
ALTER TABLE "new_TestCaseStepParameter" RENAME TO "TestCaseStepParameter";
|
|
33
|
+
PRAGMA foreign_keys=ON;
|
|
34
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
ALTER TABLE "ReportStep" ADD COLUMN "screenshotPath" TEXT;
|
|
1
|
+
ALTER TABLE "ReportStep" ADD COLUMN "screenshotPath" TEXT;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
|
|
3
|
+
import path from 'path'
|
|
4
|
+
import { promises as fs } from 'fs'
|
|
5
|
+
import { fileURLToPath } from 'url'
|
|
6
|
+
import { buildStepRegistry } from './lib/template-step-registry'
|
|
7
|
+
|
|
8
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
9
|
+
const repoRoot = path.join(__dirname, '..')
|
|
10
|
+
const registryRoot = path.join(repoRoot, 'packages', 'appraisejs', 'registry', 'template-steps')
|
|
11
|
+
const fragmentsRoot = path.join(registryRoot, 'fragments')
|
|
12
|
+
|
|
13
|
+
async function writeRegistry(): Promise<void> {
|
|
14
|
+
const { manifest, fragments } = await buildStepRegistry(repoRoot)
|
|
15
|
+
|
|
16
|
+
await fs.rm(registryRoot, { recursive: true, force: true })
|
|
17
|
+
await fs.mkdir(fragmentsRoot, { recursive: true })
|
|
18
|
+
|
|
19
|
+
await fs.writeFile(path.join(registryRoot, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\n')
|
|
20
|
+
|
|
21
|
+
for (const fragment of fragments) {
|
|
22
|
+
const fragmentPath = path.join(registryRoot, fragment.path)
|
|
23
|
+
await fs.mkdir(path.dirname(fragmentPath), { recursive: true })
|
|
24
|
+
await fs.writeFile(fragmentPath, fragment.content)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
console.log(`Generated template-step registry with ${manifest.steps.length} step(s) at ${registryRoot}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
writeRegistry().catch(error => {
|
|
31
|
+
console.error(error)
|
|
32
|
+
process.exit(1)
|
|
33
|
+
})
|
|
@@ -5,16 +5,25 @@ import { createRequire } from 'module'
|
|
|
5
5
|
import path from 'path'
|
|
6
6
|
|
|
7
7
|
const require = createRequire(import.meta.url)
|
|
8
|
-
const playwrightPackageJsonPath = require.resolve('playwright/package.json')
|
|
9
|
-
const playwrightCliPath = path.join(path.dirname(playwrightPackageJsonPath), 'cli.js')
|
|
10
|
-
const browserArgs = process.argv.slice(2)
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Installs Playwright browsers for the current platform.
|
|
11
|
+
* On Linux, also installs OS-level browser dependencies.
|
|
12
|
+
*/
|
|
13
|
+
async function main(): Promise<void> {
|
|
14
|
+
const playwrightPackageJsonPath = require.resolve('playwright/package.json')
|
|
15
|
+
const playwrightCliPath = path.join(path.dirname(playwrightPackageJsonPath), 'cli.js')
|
|
16
|
+
const browserArgs = process.argv.slice(2)
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
await execa(process.execPath, [playwrightCliPath, 'install-deps', ...browserArgs], {
|
|
18
|
+
await execa(process.execPath, [playwrightCliPath, 'install', ...browserArgs], {
|
|
18
19
|
stdio: 'inherit',
|
|
19
20
|
})
|
|
21
|
+
|
|
22
|
+
if (process.platform === 'linux') {
|
|
23
|
+
await execa(process.execPath, [playwrightCliPath, 'install-deps', ...browserArgs], {
|
|
24
|
+
stdio: 'inherit',
|
|
25
|
+
})
|
|
26
|
+
}
|
|
20
27
|
}
|
|
28
|
+
|
|
29
|
+
await main()
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
|
|
3
|
+
import path from 'path'
|
|
4
|
+
import { existsSync, promises as fs } from 'fs'
|
|
5
|
+
import { spawn } from 'child_process'
|
|
6
|
+
import { installTemplateStepPayload, type TemplateStepInstallPayload } from './lib/template-step-installer'
|
|
7
|
+
|
|
8
|
+
type CliOptions = {
|
|
9
|
+
payloadFile: string
|
|
10
|
+
overwrite: boolean
|
|
11
|
+
dryRun: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function parseArgs(argv: string[]): CliOptions {
|
|
15
|
+
let payloadFile = ''
|
|
16
|
+
let overwrite = false
|
|
17
|
+
let dryRun = false
|
|
18
|
+
|
|
19
|
+
for (let index = 0; index < argv.length; index++) {
|
|
20
|
+
const current = argv[index]
|
|
21
|
+
if (current === '--payload-file') {
|
|
22
|
+
payloadFile = argv[index + 1] ?? ''
|
|
23
|
+
index++
|
|
24
|
+
continue
|
|
25
|
+
}
|
|
26
|
+
if (current === '--overwrite') {
|
|
27
|
+
overwrite = true
|
|
28
|
+
continue
|
|
29
|
+
}
|
|
30
|
+
if (current === '--dry-run') {
|
|
31
|
+
dryRun = true
|
|
32
|
+
continue
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!payloadFile) {
|
|
37
|
+
throw new Error('Missing required --payload-file argument.')
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
payloadFile,
|
|
42
|
+
overwrite,
|
|
43
|
+
dryRun,
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function detectPackageManager(projectRoot: string): 'npm' | 'pnpm' | 'yarn' | 'bun' {
|
|
48
|
+
const userAgent = process.env.npm_config_user_agent ?? ''
|
|
49
|
+
if (userAgent.startsWith('pnpm/')) return 'pnpm'
|
|
50
|
+
if (userAgent.startsWith('yarn/')) return 'yarn'
|
|
51
|
+
if (userAgent.startsWith('bun/')) return 'bun'
|
|
52
|
+
if (userAgent.startsWith('npm/')) return 'npm'
|
|
53
|
+
|
|
54
|
+
if (existsSync(path.join(projectRoot, 'pnpm-lock.yaml'))) return 'pnpm'
|
|
55
|
+
if (existsSync(path.join(projectRoot, 'yarn.lock'))) return 'yarn'
|
|
56
|
+
if (existsSync(path.join(projectRoot, 'bun.lockb'))) return 'bun'
|
|
57
|
+
return 'npm'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function getRunArgs(packageManager: 'npm' | 'pnpm' | 'yarn' | 'bun', scriptName: string): string[] {
|
|
61
|
+
if (packageManager === 'npm' || packageManager === 'pnpm' || packageManager === 'bun') {
|
|
62
|
+
return ['run', scriptName]
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return ['run', scriptName]
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function runScript(projectRoot: string, packageManager: 'npm' | 'pnpm' | 'yarn' | 'bun', scriptName: string): Promise<void> {
|
|
69
|
+
await new Promise<void>((resolve, reject) => {
|
|
70
|
+
const child = spawn(packageManager, getRunArgs(packageManager, scriptName), {
|
|
71
|
+
cwd: projectRoot,
|
|
72
|
+
stdio: 'inherit',
|
|
73
|
+
env: process.env,
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
child.on('error', reject)
|
|
77
|
+
child.on('close', code => {
|
|
78
|
+
if (code === 0) {
|
|
79
|
+
resolve()
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
reject(new Error(`${packageManager} run ${scriptName} exited with code ${code}`))
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async function readPayload(payloadFile: string): Promise<TemplateStepInstallPayload> {
|
|
89
|
+
const raw = await fs.readFile(payloadFile, 'utf8')
|
|
90
|
+
return JSON.parse(raw) as TemplateStepInstallPayload
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function main(): Promise<void> {
|
|
94
|
+
const options = parseArgs(process.argv.slice(2))
|
|
95
|
+
const projectRoot = process.cwd()
|
|
96
|
+
const payloadFile = path.resolve(projectRoot, options.payloadFile)
|
|
97
|
+
const payload = await readPayload(payloadFile)
|
|
98
|
+
|
|
99
|
+
const result = await installTemplateStepPayload(payload, {
|
|
100
|
+
projectRoot,
|
|
101
|
+
overwrite: options.overwrite,
|
|
102
|
+
dryRun: options.dryRun,
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
console.log(result.reason)
|
|
106
|
+
console.log(`Target file: ${path.relative(projectRoot, result.targetFilePath)}`)
|
|
107
|
+
|
|
108
|
+
if (options.dryRun) {
|
|
109
|
+
if (result.changed) {
|
|
110
|
+
console.log('Dry run: would run sync-template-step-groups')
|
|
111
|
+
console.log('Dry run: would run sync-template-steps')
|
|
112
|
+
}
|
|
113
|
+
return
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (!result.changed) {
|
|
117
|
+
return
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const packageManager = detectPackageManager(projectRoot)
|
|
121
|
+
await runScript(projectRoot, packageManager, 'sync-template-step-groups')
|
|
122
|
+
await runScript(projectRoot, packageManager, 'sync-template-steps')
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
main().catch(error => {
|
|
126
|
+
console.error(error instanceof Error ? error.message : String(error))
|
|
127
|
+
process.exit(1)
|
|
128
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { extractLocatorGroupName, extractTestSuiteNameFromFilename } from './filename-utils'
|
|
3
|
+
|
|
4
|
+
describe('filename utils', () => {
|
|
5
|
+
it('extractTestSuiteNameFromFilename handles .feature extension', () => {
|
|
6
|
+
expect(extractTestSuiteNameFromFilename('login.feature')).toBe('login')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('extractTestSuiteNameFromFilename handles nested unix path', () => {
|
|
10
|
+
expect(extractTestSuiteNameFromFilename('/a/b/login-validation.feature')).toBe('login-validation')
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('extractTestSuiteNameFromFilename handles windows path', () => {
|
|
14
|
+
expect(extractTestSuiteNameFromFilename('a\\b\\suite.feature')).toBe('suite')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('extractLocatorGroupName handles json extension', () => {
|
|
18
|
+
expect(extractLocatorGroupName('buttons.json')).toBe('buttons')
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('extractLocatorGroupName handles nested path', () => {
|
|
22
|
+
expect(extractLocatorGroupName('/a/b/users.json')).toBe('users')
|
|
23
|
+
})
|
|
24
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { extractModulePathFromAutomationFile } from '../../src/lib/template-sync-utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Extracts test-suite identity from a `.feature` filename.
|
|
5
|
+
*/
|
|
6
|
+
export function extractTestSuiteNameFromFilename(filePath: string): string {
|
|
7
|
+
const fileName = filePath.split(/[/\\]/).pop() || ''
|
|
8
|
+
return fileName.replace(/\.feature$/, '')
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Extracts locator group name from a locator `.json` file path.
|
|
13
|
+
*/
|
|
14
|
+
export function extractLocatorGroupName(filePath: string): string {
|
|
15
|
+
const fileName = filePath.split(/[/\\]/).pop() || ''
|
|
16
|
+
return fileName.replace('.json', '')
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Resolves module path from a locator file under `automation/locators`.
|
|
21
|
+
*/
|
|
22
|
+
export function extractModulePathFromLocatorFile(filePath: string, baseDir: string): string {
|
|
23
|
+
return extractModulePathFromAutomationFile(filePath, baseDir, 'locators')
|
|
24
|
+
}
|