create-appraisejs 0.1.10-alpha.8 ā 0.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -52
- package/dist/cli.e2e.test.d.ts +2 -0
- package/dist/cli.e2e.test.d.ts.map +1 -0
- package/dist/cli.e2e.test.js +73 -0
- package/dist/cli.e2e.test.js.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +65 -0
- package/dist/config.test.js.map +1 -0
- package/dist/copy-template.test.d.ts +2 -0
- package/dist/copy-template.test.d.ts.map +1 -0
- package/dist/copy-template.test.js +71 -0
- package/dist/copy-template.test.js.map +1 -0
- package/dist/download-repo.test.d.ts +2 -0
- package/dist/download-repo.test.d.ts.map +1 -0
- package/dist/download-repo.test.js +14 -0
- package/dist/download-repo.test.js.map +1 -0
- package/dist/install.test.d.ts +2 -0
- package/dist/install.test.d.ts.map +1 -0
- package/dist/install.test.js +119 -0
- package/dist/install.test.js.map +1 -0
- package/dist/prepare-template-utils.d.ts.map +1 -1
- package/dist/prepare-template-utils.js +5 -0
- package/dist/prepare-template-utils.js.map +1 -1
- package/dist/prompts.test.d.ts +2 -0
- package/dist/prompts.test.d.ts.map +1 -0
- package/dist/prompts.test.js +58 -0
- package/dist/prompts.test.js.map +1 -0
- package/dist/scaffold-gitignore.d.ts +1 -0
- package/dist/scaffold-gitignore.d.ts.map +1 -1
- package/dist/scaffold-gitignore.js +3 -0
- package/dist/scaffold-gitignore.js.map +1 -1
- package/package.json +3 -2
- package/templates/default/.appraise-template-meta.json +2 -2
- package/templates/default/.env.example +2 -2
- package/templates/default/.vscode/settings.json +2 -1
- package/templates/default/README.md +53 -53
- package/templates/default/automation/mapping/locator-map.json +1 -14
- 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/input.step.ts +84 -84
- 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 +90 -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 +16 -16
- package/templates/default/gitignore +3 -0
- package/templates/default/next-env.d.ts +6 -6
- package/templates/default/next.config.ts +11 -11
- package/templates/default/package-lock.json +146 -75
- package/templates/default/package.json +2 -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/hooks.ts +25 -3
- 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/paths.ts +66 -1
- 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/packages/locator-picker-companion/dist/cli.d.ts +1 -0
- package/templates/default/packages/locator-picker-companion/dist/cli.js +302 -0
- package/templates/default/packages/locator-picker-companion/dist/index.d.ts +3 -0
- package/templates/default/packages/locator-picker-companion/dist/index.js +3 -0
- package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.d.ts +1 -0
- package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.js +615 -0
- package/templates/default/packages/locator-picker-companion/dist/launcher.d.ts +11 -0
- package/templates/default/packages/locator-picker-companion/dist/launcher.js +59 -0
- package/templates/default/packages/locator-picker-companion/dist/selector-generator.d.ts +3 -0
- package/templates/default/packages/locator-picker-companion/dist/selector-generator.js +257 -0
- package/templates/default/packages/locator-picker-companion/dist/session-file.d.ts +22 -0
- package/templates/default/packages/locator-picker-companion/dist/session-file.js +150 -0
- package/templates/default/packages/locator-picker-companion/dist/types.d.ts +31 -0
- package/templates/default/packages/locator-picker-companion/dist/types.js +1 -0
- package/templates/default/packages/locator-picker-companion/package.json +17 -0
- package/templates/default/packages/locator-picker-companion/src/cli.ts +428 -0
- package/templates/default/packages/locator-picker-companion/src/index.ts +3 -0
- package/templates/default/packages/locator-picker-companion/src/injected-picker-script.ts +771 -0
- package/templates/default/packages/locator-picker-companion/src/launcher.ts +77 -0
- package/templates/default/packages/locator-picker-companion/src/selector-generator.ts +339 -0
- package/templates/default/packages/locator-picker-companion/src/session-file.ts +226 -0
- package/templates/default/packages/locator-picker-companion/src/types.ts +42 -0
- package/templates/default/packages/locator-picker-companion/tsconfig.json +14 -0
- 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 -0
- package/templates/default/prisma/migrations/20260318120000_add_test_suite_context_to_test_run_test_case/migration.sql +20 -0
- package/templates/default/prisma/migrations/20260318173512_add_support_of_test_suite_level_runs/migration.sql +2 -0
- package/templates/default/prisma/schema.prisma +4 -0
- package/templates/default/scripts/install-playwright.ts +20 -0
- package/templates/default/scripts/protect-seeded-files.ts +38 -38
- package/templates/default/scripts/regenerate-features.ts +94 -94
- package/templates/default/scripts/setup-env.ts +19 -19
- package/templates/default/scripts/sync-all.ts +22 -66
- package/templates/default/scripts/sync-appraise-base-template.ts +57 -19
- package/templates/default/scripts/sync-environments.ts +40 -21
- package/templates/default/scripts/sync-locator-groups.ts +410 -410
- package/templates/default/scripts/sync-locators.ts +398 -398
- package/templates/default/scripts/sync-modules.ts +341 -341
- package/templates/default/scripts/sync-tags.ts +2 -3
- package/templates/default/scripts/sync-template-step-groups.ts +0 -3
- package/templates/default/scripts/sync-template-steps.ts +37 -11
- package/templates/default/scripts/sync-test-cases.ts +68 -16
- package/templates/default/scripts/sync-test-suites.ts +7 -5
- package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
- package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
- package/templates/default/src/actions/environments/environment-actions.ts +188 -188
- package/templates/default/src/actions/locator/locator-actions.ts +490 -490
- package/templates/default/src/actions/locator-groups/locator-group-actions.ts +6 -3
- package/templates/default/src/actions/locator-picker/locator-picker-actions.ts +243 -0
- package/templates/default/src/actions/modules/module-actions.ts +135 -135
- package/templates/default/src/actions/reports/report-actions.ts +51 -49
- package/templates/default/src/actions/review/review-actions.ts +147 -147
- package/templates/default/src/actions/settings/sync-actions.ts +46 -0
- package/templates/default/src/actions/tags/tag-actions.ts +107 -107
- package/templates/default/src/actions/template-step/template-step-actions.ts +38 -4
- package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +10 -3
- package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
- package/templates/default/src/actions/test-case/test-case-actions.ts +356 -356
- package/templates/default/src/actions/test-run/test-run-actions.ts +222 -129
- package/templates/default/src/actions/test-suite/test-suite-actions.ts +95 -17
- package/templates/default/src/actions/user/user-actions.ts +13 -13
- package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
- package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
- package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
- package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -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)/locator-groups/page.tsx +20 -8
- package/templates/default/src/app/(base)/locators/create/create-locator-workspace.tsx +542 -0
- package/templates/default/src/app/(base)/locators/create/page.tsx +32 -19
- package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
- package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -73
- package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
- package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +56 -27
- package/templates/default/src/app/(base)/locators/page.tsx +13 -13
- package/templates/default/src/app/(base)/locators/picker/page.tsx +7 -0
- package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
- package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
- package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
- package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
- package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
- package/templates/default/src/app/(base)/modules/page.tsx +59 -59
- package/templates/default/src/app/(base)/reports/[id]/page.tsx +40 -33
- package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
- package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
- package/templates/default/src/app/(base)/reports/overview-chart.tsx +49 -46
- package/templates/default/src/app/(base)/reports/page.tsx +98 -98
- package/templates/default/src/app/(base)/reports/report-metric-card.tsx +78 -16
- 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/report-view-table-columns.tsx +12 -1
- package/templates/default/src/app/(base)/reports/report-view-table.tsx +1 -0
- package/templates/default/src/app/(base)/reports/test-cases/page.tsx +40 -42
- 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 -60
- package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
- package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/settings/page.tsx +30 -0
- package/templates/default/src/app/(base)/settings/settings-sync-panel.tsx +261 -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.tsx +147 -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 +45 -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.tsx +167 -167
- 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 +32 -32
- package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
- package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
- package/templates/default/src/app/(base)/template-steps/page.tsx +58 -58
- package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
- package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
- package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
- package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -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.tsx +84 -84
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -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 +76 -76
- package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
- package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -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 +2 -2
- package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
- package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
- package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +6 -71
- package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +2 -2
- package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +4 -1
- package/templates/default/src/app/(base)/test-runs/create/page.tsx +11 -9
- package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +37 -44
- 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-suites/create/page.tsx +3 -2
- package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +2 -1
- package/templates/default/src/app/(base)/test-suites/page.tsx +57 -21
- package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +16 -17
- package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +2 -1
- package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -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.ts +52 -0
- package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +97 -34
- package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +4 -1
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -147
- package/templates/default/src/app/globals.css +147 -147
- package/templates/default/src/app/layout.tsx +4 -0
- package/templates/default/src/app/page.tsx +2 -0
- 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.tsx +460 -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.tsx +474 -474
- package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
- package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
- package/templates/default/src/components/diagram/node-form.tsx +262 -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/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/logo.tsx +15 -15
- 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 +116 -116
- package/templates/default/src/components/navigation/nav-card.tsx +31 -31
- package/templates/default/src/components/navigation/nav-command.tsx +13 -0
- 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/node-header.tsx +159 -159
- package/templates/default/src/components/reports/test-case-logs-modal.tsx +310 -253
- package/templates/default/src/components/table/table-actions.tsx +172 -172
- package/templates/default/src/components/test-case/test-case-columns.tsx +76 -0
- package/templates/default/src/components/test-case/test-case-picker.tsx +244 -0
- package/templates/default/src/components/test-run/download-logs-button.tsx +92 -99
- package/templates/default/src/components/test-run/log-viewer.tsx +1 -14
- package/templates/default/src/components/test-run/test-run-details.tsx +15 -2
- package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
- package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
- package/templates/default/src/components/test-suite/test-suite-picker.tsx +444 -0
- 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.tsx +261 -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.tsx +142 -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.tsx +87 -87
- package/templates/default/src/config/db-config.ts +10 -10
- 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-form-opts.ts +20 -20
- 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/review-form-opts.ts +23 -23
- 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-run-form-opts.ts +5 -3
- 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/paths.ts +42 -12
- package/templates/default/src/lib/automation/projection-service.ts +2 -1
- package/templates/default/src/lib/bidirectional-sync.ts +432 -432
- package/templates/default/src/lib/database-sync.ts +2 -7
- package/templates/default/src/lib/environment-file-utils.ts +184 -184
- package/templates/default/src/lib/executor/local-executor-adapter.ts +24 -25
- package/templates/default/src/lib/executor/types.ts +2 -2
- package/templates/default/src/lib/feature-file-generator.ts +5 -66
- package/templates/default/src/lib/gherkin-parser.ts +259 -259
- package/templates/default/src/lib/locator-group-file-utils.ts +307 -307
- package/templates/default/src/lib/locator-picker/session-manager.ts +452 -0
- package/templates/default/src/lib/locator-picker/suggestions.ts +124 -0
- package/templates/default/src/lib/metrics/metric-calculator.ts +5 -0
- 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/process/task-spawner.ts +39 -2
- package/templates/default/src/lib/sync/projected-feature-utils.ts +113 -0
- package/templates/default/src/lib/sync/sync-executor.ts +130 -0
- package/templates/default/src/lib/sync/sync-pending-counts.test.ts +239 -0
- package/templates/default/src/lib/sync/sync-pending-counts.ts +1358 -0
- package/templates/default/src/lib/sync/sync-registry.ts +149 -0
- package/templates/default/src/lib/tag-utils.ts +28 -0
- 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/matching.ts +117 -0
- package/templates/default/src/lib/test-run/process-manager.ts +2 -0
- package/templates/default/src/lib/test-run/report-parser.ts +352 -316
- package/templates/default/src/lib/test-run/test-run-executor.ts +13 -15
- package/templates/default/src/lib/test-run/winston-logger.ts +64 -66
- package/templates/default/src/lib/test-suite-identifier-service.ts +76 -0
- package/templates/default/src/lib/test-suite-utils.ts +6 -0
- 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 +104 -104
- package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +0 -8
- 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/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 +6 -6
- package/templates/default/src/types/locator/locator.type.ts +11 -11
- package/templates/default/src/types/locator-picker.ts +65 -0
- 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/src/types/test-case-picker.ts +6 -0
- package/templates/default/src/types/test-suite-picker.ts +18 -0
- package/templates/default/tailwind.config.ts +62 -62
- package/templates/default/tsconfig.json +4 -1
- package/templates/default/appraisejs.config.json +0 -1
|
@@ -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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "ReportStep" ADD COLUMN "screenshotPath" TEXT;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
PRAGMA foreign_keys=OFF;
|
|
2
|
+
CREATE TABLE "new_TestRunTestCase" (
|
|
3
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
4
|
+
"testRunId" TEXT NOT NULL,
|
|
5
|
+
"testCaseId" TEXT NOT NULL,
|
|
6
|
+
"testSuiteId" TEXT,
|
|
7
|
+
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
8
|
+
"result" TEXT NOT NULL DEFAULT 'UNTESTED',
|
|
9
|
+
"tracePath" TEXT,
|
|
10
|
+
CONSTRAINT "TestRunTestCase_testRunId_fkey" FOREIGN KEY ("testRunId") REFERENCES "TestRun" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
11
|
+
CONSTRAINT "TestRunTestCase_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES "TestCase" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
12
|
+
CONSTRAINT "TestRunTestCase_testSuiteId_fkey" FOREIGN KEY ("testSuiteId") REFERENCES "TestSuite" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
13
|
+
);
|
|
14
|
+
INSERT INTO "new_TestRunTestCase" ("id", "testRunId", "testCaseId", "testSuiteId", "status", "result", "tracePath")
|
|
15
|
+
SELECT "id", "testRunId", "testCaseId", NULL, "status", "result", "tracePath" FROM "TestRunTestCase";
|
|
16
|
+
DROP TABLE "TestRunTestCase";
|
|
17
|
+
ALTER TABLE "new_TestRunTestCase" RENAME TO "TestRunTestCase";
|
|
18
|
+
CREATE INDEX "TestRunTestCase_testSuiteId_idx" ON "TestRunTestCase"("testSuiteId");
|
|
19
|
+
PRAGMA foreign_key_check;
|
|
20
|
+
PRAGMA foreign_keys=ON;
|
|
@@ -18,6 +18,7 @@ model TestSuite {
|
|
|
18
18
|
testCases TestCase[] @relation("TestSuiteTestCases")
|
|
19
19
|
tags Tag[]
|
|
20
20
|
metrics TestSuiteMetrics?
|
|
21
|
+
testRuns TestRunTestCase[]
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
model Review {
|
|
@@ -195,11 +196,13 @@ model TestRunTestCase {
|
|
|
195
196
|
id String @id @default(uuid())
|
|
196
197
|
testRunId String
|
|
197
198
|
testCaseId String
|
|
199
|
+
testSuiteId String?
|
|
198
200
|
status TestRunTestCaseStatus @default(PENDING)
|
|
199
201
|
result TestRunTestCaseResult @default(UNTESTED)
|
|
200
202
|
tracePath String?
|
|
201
203
|
testRun TestRun @relation(fields: [testRunId], references: [id], onDelete: Cascade)
|
|
202
204
|
testCase TestCase @relation(fields: [testCaseId], references: [id], onDelete: Cascade)
|
|
205
|
+
testSuite TestSuite? @relation(fields: [testSuiteId], references: [id], onDelete: SetNull)
|
|
203
206
|
reportTestCases ReportTestCase[]
|
|
204
207
|
}
|
|
205
208
|
|
|
@@ -359,6 +362,7 @@ model ReportStep {
|
|
|
359
362
|
duration String
|
|
360
363
|
errorMessage String?
|
|
361
364
|
errorTrace String?
|
|
365
|
+
screenshotPath String?
|
|
362
366
|
hidden Boolean @default(false)
|
|
363
367
|
order Int
|
|
364
368
|
createdAt DateTime @default(now())
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
|
|
3
|
+
import { execa } from 'execa'
|
|
4
|
+
import { createRequire } from 'module'
|
|
5
|
+
import path from 'path'
|
|
6
|
+
|
|
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
|
+
|
|
12
|
+
await execa(process.execPath, [playwrightCliPath, 'install', ...browserArgs], {
|
|
13
|
+
stdio: 'inherit',
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
if (process.platform === 'linux') {
|
|
17
|
+
await execa(process.execPath, [playwrightCliPath, 'install-deps', ...browserArgs], {
|
|
18
|
+
stdio: 'inherit',
|
|
19
|
+
})
|
|
20
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
|
|
3
|
-
import fs from 'fs'
|
|
4
|
-
import path from 'path'
|
|
5
|
-
|
|
6
|
-
const SEEDED_TEMPLATE_PATHS = ['prisma/dev.db', 'automation/config/environments/environments.json']
|
|
7
|
-
|
|
8
|
-
function trimTrailingBlankLines(lines: string[]): string[] {
|
|
9
|
-
const trimmed = [...lines]
|
|
10
|
-
while (trimmed.length > 0 && trimmed[trimmed.length - 1] === '') {
|
|
11
|
-
trimmed.pop()
|
|
12
|
-
}
|
|
13
|
-
return trimmed
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function setSeededTemplateFilesTracked(content: string, tracked: boolean): string {
|
|
17
|
-
const managedLines = new Set(SEEDED_TEMPLATE_PATHS.flatMap(filePath => [filePath, `!${filePath}`]))
|
|
18
|
-
const lines = trimTrailingBlankLines(content.split(/\r?\n/)).filter(line => !managedLines.has(line.trim()))
|
|
19
|
-
|
|
20
|
-
for (const filePath of SEEDED_TEMPLATE_PATHS) {
|
|
21
|
-
lines.push(tracked ? `!${filePath}` : filePath)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return `${lines.join('\n')}\n`
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const gitignorePath = path.join(process.cwd(), '.gitignore')
|
|
28
|
-
const packagedGitignorePath = path.join(process.cwd(), 'gitignore')
|
|
29
|
-
const sourceGitignorePath = fs.existsSync(gitignorePath) ? gitignorePath : packagedGitignorePath
|
|
30
|
-
const currentGitignore = fs.existsSync(sourceGitignorePath) ? fs.readFileSync(sourceGitignorePath, 'utf8') : ''
|
|
31
|
-
|
|
32
|
-
fs.writeFileSync(gitignorePath, setSeededTemplateFilesTracked(currentGitignore, false))
|
|
33
|
-
|
|
34
|
-
if (sourceGitignorePath === packagedGitignorePath && fs.existsSync(packagedGitignorePath)) {
|
|
35
|
-
fs.rmSync(packagedGitignorePath, { force: true })
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
console.log('Updated .gitignore to ignore seeded local files.')
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
|
|
3
|
+
import fs from 'fs'
|
|
4
|
+
import path from 'path'
|
|
5
|
+
|
|
6
|
+
const SEEDED_TEMPLATE_PATHS = ['prisma/dev.db', 'automation/config/environments/environments.json']
|
|
7
|
+
|
|
8
|
+
function trimTrailingBlankLines(lines: string[]): string[] {
|
|
9
|
+
const trimmed = [...lines]
|
|
10
|
+
while (trimmed.length > 0 && trimmed[trimmed.length - 1] === '') {
|
|
11
|
+
trimmed.pop()
|
|
12
|
+
}
|
|
13
|
+
return trimmed
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function setSeededTemplateFilesTracked(content: string, tracked: boolean): string {
|
|
17
|
+
const managedLines = new Set(SEEDED_TEMPLATE_PATHS.flatMap(filePath => [filePath, `!${filePath}`]))
|
|
18
|
+
const lines = trimTrailingBlankLines(content.split(/\r?\n/)).filter(line => !managedLines.has(line.trim()))
|
|
19
|
+
|
|
20
|
+
for (const filePath of SEEDED_TEMPLATE_PATHS) {
|
|
21
|
+
lines.push(tracked ? `!${filePath}` : filePath)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return `${lines.join('\n')}\n`
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const gitignorePath = path.join(process.cwd(), '.gitignore')
|
|
28
|
+
const packagedGitignorePath = path.join(process.cwd(), 'gitignore')
|
|
29
|
+
const sourceGitignorePath = fs.existsSync(gitignorePath) ? gitignorePath : packagedGitignorePath
|
|
30
|
+
const currentGitignore = fs.existsSync(sourceGitignorePath) ? fs.readFileSync(sourceGitignorePath, 'utf8') : ''
|
|
31
|
+
|
|
32
|
+
fs.writeFileSync(gitignorePath, setSeededTemplateFilesTracked(currentGitignore, false))
|
|
33
|
+
|
|
34
|
+
if (sourceGitignorePath === packagedGitignorePath && fs.existsSync(packagedGitignorePath)) {
|
|
35
|
+
fs.rmSync(packagedGitignorePath, { force: true })
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
console.log('Updated .gitignore to ignore seeded local files.')
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Script to synchronize feature files between database and filesystem
|
|
5
|
-
* This performs bidirectional sync - both DB->FS and FS->DB
|
|
6
|
-
* Run this after merging changes or database migrations to ensure sync
|
|
7
|
-
*
|
|
8
|
-
* Usage: npx tsx scripts/regenerate-features.ts [--dry-run]
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { performBidirectionalSync, performDryRunSync } from '../src/lib/bidirectional-sync'
|
|
12
|
-
import { join } from 'path'
|
|
13
|
-
|
|
14
|
-
async function main() {
|
|
15
|
-
try {
|
|
16
|
-
const isDryRun = process.argv.includes('--dry-run')
|
|
17
|
-
const featuresBaseDir = join(process.cwd(), 'src', 'tests', 'features')
|
|
18
|
-
|
|
19
|
-
if (isDryRun) {
|
|
20
|
-
console.log('š Performing dry run of bidirectional sync...')
|
|
21
|
-
console.log('This will show what would be changed without making any modifications.\n')
|
|
22
|
-
|
|
23
|
-
const dryRunResult = await performDryRunSync(featuresBaseDir)
|
|
24
|
-
|
|
25
|
-
console.log('\nš Dry run results:')
|
|
26
|
-
console.log(`š Would generate ${dryRunResult.wouldGenerate.length} feature files:`)
|
|
27
|
-
dryRunResult.wouldGenerate.forEach((filePath, index) => {
|
|
28
|
-
const relativePath = filePath.replace(process.cwd(), '.')
|
|
29
|
-
console.log(` ${index + 1}. ${relativePath}`)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
console.log(`\nš Would update ${dryRunResult.wouldUpdate.length} feature files:`)
|
|
33
|
-
dryRunResult.wouldUpdate.forEach((filePath, index) => {
|
|
34
|
-
const relativePath = filePath.replace(process.cwd(), '.')
|
|
35
|
-
console.log(` ${index + 1}. ${relativePath}`)
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
console.log(`\nā Would create ${dryRunResult.wouldCreate.testSuites.length} test suites:`)
|
|
39
|
-
dryRunResult.wouldCreate.testSuites.forEach((item, index) => {
|
|
40
|
-
console.log(` ${index + 1}. ${item}`)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
console.log(`\nš Would create ${dryRunResult.wouldCreate.testCases.length} test cases:`)
|
|
44
|
-
dryRunResult.wouldCreate.testCases.forEach((item, index) => {
|
|
45
|
-
console.log(` ${index + 1}. ${item}`)
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
console.log(`\nš§ Would create ${dryRunResult.wouldCreate.templateSteps.length} template steps:`)
|
|
49
|
-
dryRunResult.wouldCreate.templateSteps.forEach((item, index) => {
|
|
50
|
-
console.log(` ${index + 1}. ${item}`)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
console.log(`\nš·ļø Would create ${dryRunResult.wouldCreate.tags.length} tags:`)
|
|
54
|
-
dryRunResult.wouldCreate.tags.forEach((tag, index) => {
|
|
55
|
-
console.log(` ${index + 1}. ${tag}`)
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
console.log('\nš” To perform the actual sync, run without --dry-run flag')
|
|
59
|
-
} else {
|
|
60
|
-
console.log('š Starting bidirectional sync between database and feature files...')
|
|
61
|
-
console.log('This will sync both directions:')
|
|
62
|
-
console.log(' š Feature files ā Database (create missing test suites/cases)')
|
|
63
|
-
console.log(' šļø Database ā Feature files (generate/update feature files)')
|
|
64
|
-
console.log('')
|
|
65
|
-
|
|
66
|
-
const syncResult = await performBidirectionalSync(featuresBaseDir)
|
|
67
|
-
|
|
68
|
-
console.log('\nā
Bidirectional sync completed successfully!')
|
|
69
|
-
console.log(`š Summary:`)
|
|
70
|
-
console.log(` š Generated feature files: ${syncResult.generatedFeatureFiles}`)
|
|
71
|
-
console.log(` š Updated feature files: ${syncResult.updatedFeatureFiles}`)
|
|
72
|
-
console.log(` šļø Merged test suites: ${syncResult.mergedTestSuites}`)
|
|
73
|
-
console.log(` š Added scenarios: ${syncResult.addedScenarios}`)
|
|
74
|
-
console.log(` š Total processed: ${syncResult.totalProcessed}`)
|
|
75
|
-
|
|
76
|
-
if (syncResult.errors.length > 0) {
|
|
77
|
-
console.log(`\nā ļø Errors encountered: ${syncResult.errors.length}`)
|
|
78
|
-
syncResult.errors.forEach((error, index) => {
|
|
79
|
-
console.log(` ${index + 1}. ${error}`)
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
console.log('\nš” Tips:')
|
|
84
|
-
console.log(' - Run with --dry-run to see what would be changed')
|
|
85
|
-
console.log(' - This script is safe to run multiple times')
|
|
86
|
-
console.log(' - Changes are automatically merged, not overwritten')
|
|
87
|
-
}
|
|
88
|
-
} catch (error) {
|
|
89
|
-
console.error('\nā Error during sync:', error)
|
|
90
|
-
process.exit(1)
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
main()
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Script to synchronize feature files between database and filesystem
|
|
5
|
+
* This performs bidirectional sync - both DB->FS and FS->DB
|
|
6
|
+
* Run this after merging changes or database migrations to ensure sync
|
|
7
|
+
*
|
|
8
|
+
* Usage: npx tsx scripts/regenerate-features.ts [--dry-run]
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { performBidirectionalSync, performDryRunSync } from '../src/lib/bidirectional-sync'
|
|
12
|
+
import { join } from 'path'
|
|
13
|
+
|
|
14
|
+
async function main() {
|
|
15
|
+
try {
|
|
16
|
+
const isDryRun = process.argv.includes('--dry-run')
|
|
17
|
+
const featuresBaseDir = join(process.cwd(), 'src', 'tests', 'features')
|
|
18
|
+
|
|
19
|
+
if (isDryRun) {
|
|
20
|
+
console.log('š Performing dry run of bidirectional sync...')
|
|
21
|
+
console.log('This will show what would be changed without making any modifications.\n')
|
|
22
|
+
|
|
23
|
+
const dryRunResult = await performDryRunSync(featuresBaseDir)
|
|
24
|
+
|
|
25
|
+
console.log('\nš Dry run results:')
|
|
26
|
+
console.log(`š Would generate ${dryRunResult.wouldGenerate.length} feature files:`)
|
|
27
|
+
dryRunResult.wouldGenerate.forEach((filePath, index) => {
|
|
28
|
+
const relativePath = filePath.replace(process.cwd(), '.')
|
|
29
|
+
console.log(` ${index + 1}. ${relativePath}`)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
console.log(`\nš Would update ${dryRunResult.wouldUpdate.length} feature files:`)
|
|
33
|
+
dryRunResult.wouldUpdate.forEach((filePath, index) => {
|
|
34
|
+
const relativePath = filePath.replace(process.cwd(), '.')
|
|
35
|
+
console.log(` ${index + 1}. ${relativePath}`)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
console.log(`\nā Would create ${dryRunResult.wouldCreate.testSuites.length} test suites:`)
|
|
39
|
+
dryRunResult.wouldCreate.testSuites.forEach((item, index) => {
|
|
40
|
+
console.log(` ${index + 1}. ${item}`)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
console.log(`\nš Would create ${dryRunResult.wouldCreate.testCases.length} test cases:`)
|
|
44
|
+
dryRunResult.wouldCreate.testCases.forEach((item, index) => {
|
|
45
|
+
console.log(` ${index + 1}. ${item}`)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
console.log(`\nš§ Would create ${dryRunResult.wouldCreate.templateSteps.length} template steps:`)
|
|
49
|
+
dryRunResult.wouldCreate.templateSteps.forEach((item, index) => {
|
|
50
|
+
console.log(` ${index + 1}. ${item}`)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
console.log(`\nš·ļø Would create ${dryRunResult.wouldCreate.tags.length} tags:`)
|
|
54
|
+
dryRunResult.wouldCreate.tags.forEach((tag, index) => {
|
|
55
|
+
console.log(` ${index + 1}. ${tag}`)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
console.log('\nš” To perform the actual sync, run without --dry-run flag')
|
|
59
|
+
} else {
|
|
60
|
+
console.log('š Starting bidirectional sync between database and feature files...')
|
|
61
|
+
console.log('This will sync both directions:')
|
|
62
|
+
console.log(' š Feature files ā Database (create missing test suites/cases)')
|
|
63
|
+
console.log(' šļø Database ā Feature files (generate/update feature files)')
|
|
64
|
+
console.log('')
|
|
65
|
+
|
|
66
|
+
const syncResult = await performBidirectionalSync(featuresBaseDir)
|
|
67
|
+
|
|
68
|
+
console.log('\nā
Bidirectional sync completed successfully!')
|
|
69
|
+
console.log(`š Summary:`)
|
|
70
|
+
console.log(` š Generated feature files: ${syncResult.generatedFeatureFiles}`)
|
|
71
|
+
console.log(` š Updated feature files: ${syncResult.updatedFeatureFiles}`)
|
|
72
|
+
console.log(` šļø Merged test suites: ${syncResult.mergedTestSuites}`)
|
|
73
|
+
console.log(` š Added scenarios: ${syncResult.addedScenarios}`)
|
|
74
|
+
console.log(` š Total processed: ${syncResult.totalProcessed}`)
|
|
75
|
+
|
|
76
|
+
if (syncResult.errors.length > 0) {
|
|
77
|
+
console.log(`\nā ļø Errors encountered: ${syncResult.errors.length}`)
|
|
78
|
+
syncResult.errors.forEach((error, index) => {
|
|
79
|
+
console.log(` ${index + 1}. ${error}`)
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
console.log('\nš” Tips:')
|
|
84
|
+
console.log(' - Run with --dry-run to see what would be changed')
|
|
85
|
+
console.log(' - This script is safe to run multiple times')
|
|
86
|
+
console.log(' - Changes are automatically merged, not overwritten')
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.error('\nā Error during sync:', error)
|
|
90
|
+
process.exit(1)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
main()
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
|
|
3
|
-
import fs from 'fs'
|
|
4
|
-
import path from 'path'
|
|
5
|
-
|
|
6
|
-
const envContent = `# Database configuration for local development
|
|
7
|
-
DATABASE_URL="file:./dev.db"
|
|
8
|
-
`
|
|
9
|
-
|
|
10
|
-
const envPath = path.join(process.cwd(), '.env')
|
|
11
|
-
|
|
12
|
-
if (!fs.existsSync(envPath)) {
|
|
13
|
-
fs.writeFileSync(envPath, envContent)
|
|
14
|
-
console.log('? Created .env file with SQLite configuration')
|
|
15
|
-
} else {
|
|
16
|
-
console.log('?? .env file already exists, skipping creation')
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
console.log('?? Environment setup complete!')
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
|
|
3
|
+
import fs from 'fs'
|
|
4
|
+
import path from 'path'
|
|
5
|
+
|
|
6
|
+
const envContent = `# Database configuration for local development
|
|
7
|
+
DATABASE_URL="file:./dev.db"
|
|
8
|
+
`
|
|
9
|
+
|
|
10
|
+
const envPath = path.join(process.cwd(), '.env')
|
|
11
|
+
|
|
12
|
+
if (!fs.existsSync(envPath)) {
|
|
13
|
+
fs.writeFileSync(envPath, envContent)
|
|
14
|
+
console.log('? Created .env file with SQLite configuration')
|
|
15
|
+
} else {
|
|
16
|
+
console.log('?? .env file already exists, skipping creation')
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
console.log('?? Environment setup complete!')
|