create-appraise 0.1.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 +52 -0
- package/package.json +63 -0
- package/templates/default/.env.example +2 -0
- package/templates/default/README.md +51 -0
- package/templates/default/appraise.config.json +4 -0
- package/templates/default/components.json +24 -0
- package/templates/default/eslint.config.mjs +15 -0
- package/templates/default/next-env.d.ts +6 -0
- package/templates/default/next.config.ts +7 -0
- package/templates/default/package-lock.json +14321 -0
- package/templates/default/package.json +124 -0
- package/templates/default/postcss.config.mjs +8 -0
- package/templates/default/prisma/migrations/20251026202316_migrate_back_to_sqlite/migration.sql +257 -0
- package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -0
- package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -0
- package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -0
- package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -0
- package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -0
- package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -0
- package/templates/default/prisma/migrations/20251130190737_add_trace_path_to_test_run_test_case/migration.sql +2 -0
- package/templates/default/prisma/migrations/20251213074835_add_log_path_to_test_run/migration.sql +2 -0
- package/templates/default/prisma/migrations/20251213183952_add_name_property_for_the_test_run_entities/migration.sql +30 -0
- package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -0
- package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -0
- package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -0
- package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -0
- package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -0
- package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -0
- package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -0
- package/templates/default/prisma/migrations/migration_lock.toml +3 -0
- package/templates/default/prisma/schema.prisma +554 -0
- package/templates/default/public/favicon.ico +0 -0
- package/templates/default/public/file.svg +1 -0
- package/templates/default/public/globe.svg +1 -0
- package/templates/default/public/next.svg +1 -0
- package/templates/default/public/vercel.svg +1 -0
- package/templates/default/public/window.svg +1 -0
- package/templates/default/scripts/regenerate-features.ts +94 -0
- package/templates/default/scripts/setup-env.ts +19 -0
- package/templates/default/scripts/sync-all.ts +341 -0
- package/templates/default/scripts/sync-environments.ts +323 -0
- package/templates/default/scripts/sync-locator-groups.ts +413 -0
- package/templates/default/scripts/sync-locators.ts +402 -0
- package/templates/default/scripts/sync-modules.ts +349 -0
- package/templates/default/scripts/sync-tags.ts +292 -0
- package/templates/default/scripts/sync-template-step-groups.ts +399 -0
- package/templates/default/scripts/sync-template-steps.ts +806 -0
- package/templates/default/scripts/sync-test-cases.ts +905 -0
- package/templates/default/scripts/sync-test-suites.ts +411 -0
- package/templates/default/src/actions/conflict/conflict.action.ts +33 -0
- package/templates/default/src/actions/dashboard/dashboard-actions.ts +241 -0
- package/templates/default/src/actions/environments/environment-actions.ts +205 -0
- package/templates/default/src/actions/locator/locator-actions.ts +547 -0
- package/templates/default/src/actions/locator-groups/locator-group-actions.ts +344 -0
- package/templates/default/src/actions/modules/module-actions.ts +133 -0
- package/templates/default/src/actions/reports/report-actions.ts +614 -0
- package/templates/default/src/actions/review/review-actions.ts +147 -0
- package/templates/default/src/actions/tags/tag-actions.ts +104 -0
- package/templates/default/src/actions/template-step/template-step-actions.ts +332 -0
- package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +278 -0
- package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -0
- package/templates/default/src/actions/test-case/test-case-actions.ts +419 -0
- package/templates/default/src/actions/test-run/test-run-actions.ts +1185 -0
- package/templates/default/src/actions/test-suite/test-suite-actions.ts +253 -0
- package/templates/default/src/actions/user/user-actions.ts +13 -0
- package/templates/default/src/app/(base)/environments/create/page.tsx +28 -0
- package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -0
- package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -0
- package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -0
- package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -0
- package/templates/default/src/app/(base)/environments/page.tsx +59 -0
- package/templates/default/src/app/(base)/layout.tsx +10 -0
- package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -0
- package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -0
- package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -0
- package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -0
- package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -0
- package/templates/default/src/app/(base)/locator-groups/page.tsx +61 -0
- package/templates/default/src/app/(base)/locators/create/page.tsx +38 -0
- package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -0
- package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +90 -0
- package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -0
- package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +45 -0
- package/templates/default/src/app/(base)/locators/page.tsx +65 -0
- package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -0
- package/templates/default/src/app/(base)/modules/create/page.tsx +34 -0
- package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -0
- package/templates/default/src/app/(base)/modules/module-form.tsx +126 -0
- package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -0
- package/templates/default/src/app/(base)/modules/module-table.tsx +24 -0
- package/templates/default/src/app/(base)/modules/page.tsx +59 -0
- package/templates/default/src/app/(base)/reports/[id]/page.tsx +517 -0
- package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -0
- package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -0
- package/templates/default/src/app/(base)/reports/overview-chart.tsx +46 -0
- package/templates/default/src/app/(base)/reports/page.tsx +98 -0
- package/templates/default/src/app/(base)/reports/report-metric-card.tsx +16 -0
- package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -0
- package/templates/default/src/app/(base)/reports/report-table.tsx +72 -0
- package/templates/default/src/app/(base)/reports/report-view-table-columns.tsx +131 -0
- package/templates/default/src/app/(base)/reports/report-view-table.tsx +82 -0
- package/templates/default/src/app/(base)/reports/test-cases/page.tsx +42 -0
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -0
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -0
- package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -0
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -0
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -0
- package/templates/default/src/app/(base)/reports/view-logs-button.tsx +60 -0
- package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -0
- package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -0
- package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -0
- package/templates/default/src/app/(base)/reviews/page.tsx +26 -0
- package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -0
- package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -0
- package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -0
- package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -0
- package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -0
- package/templates/default/src/app/(base)/tags/create/page.tsx +39 -0
- package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -0
- package/templates/default/src/app/(base)/tags/page.tsx +58 -0
- package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -0
- package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -0
- package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -0
- package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -0
- package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -0
- package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -0
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -0
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -0
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -0
- package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -0
- package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -0
- package/templates/default/src/app/(base)/template-steps/page.tsx +59 -0
- package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -0
- package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -0
- package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -0
- package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -0
- package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -0
- package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -0
- package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -0
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -0
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -0
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -0
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -0
- package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -0
- package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -0
- package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -0
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -0
- package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -0
- package/templates/default/src/app/(base)/test-cases/page.tsx +60 -0
- package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -0
- package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -0
- package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +90 -0
- package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +35 -0
- package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +56 -0
- package/templates/default/src/app/(base)/test-runs/create/page.tsx +47 -0
- package/templates/default/src/app/(base)/test-runs/page.tsx +60 -0
- package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +512 -0
- package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -0
- package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -0
- package/templates/default/src/app/(base)/test-suites/create/page.tsx +45 -0
- package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +55 -0
- package/templates/default/src/app/(base)/test-suites/page.tsx +82 -0
- package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +269 -0
- package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +97 -0
- package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -0
- package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -0
- package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +13 -0
- package/templates/default/src/app/(dashboard-components)/data-card.tsx +27 -0
- package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +57 -0
- package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -0
- package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +45 -0
- package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +133 -0
- package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +420 -0
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -0
- package/templates/default/src/app/favicon.ico +0 -0
- package/templates/default/src/app/globals.css +147 -0
- package/templates/default/src/app/layout.tsx +171 -0
- package/templates/default/src/app/page.tsx +64 -0
- package/templates/default/src/assets/icons/empty-tube.tsx +23 -0
- package/templates/default/src/assets/icons/tube-plus.tsx +29 -0
- package/templates/default/src/components/base-node.tsx +21 -0
- package/templates/default/src/components/chart/pie-chart.tsx +73 -0
- package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -0
- package/templates/default/src/components/data-state/empty-state.tsx +40 -0
- package/templates/default/src/components/data-visualization/info-card.tsx +70 -0
- package/templates/default/src/components/data-visualization/info-grid.tsx +22 -0
- package/templates/default/src/components/devtools/providers.tsx +13 -0
- package/templates/default/src/components/diagram/button-edge.tsx +54 -0
- package/templates/default/src/components/diagram/dynamic-parameters.tsx +438 -0
- package/templates/default/src/components/diagram/edit-header-option.tsx +36 -0
- package/templates/default/src/components/diagram/flow-diagram.tsx +470 -0
- package/templates/default/src/components/diagram/node-form.tsx +262 -0
- package/templates/default/src/components/diagram/options-header-node.tsx +57 -0
- package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -0
- package/templates/default/src/components/form/error-message.tsx +7 -0
- package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -0
- package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -0
- package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -0
- package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -0
- package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -0
- package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -0
- package/templates/default/src/components/logo.tsx +15 -0
- package/templates/default/src/components/navigation/command-badge.tsx +34 -0
- package/templates/default/src/components/navigation/command-chain-input.tsx +51 -0
- package/templates/default/src/components/navigation/entity-search-command.tsx +116 -0
- package/templates/default/src/components/navigation/nav-card.tsx +31 -0
- package/templates/default/src/components/navigation/nav-command.tsx +508 -0
- package/templates/default/src/components/navigation/nav-link.tsx +60 -0
- package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -0
- package/templates/default/src/components/node-header.tsx +159 -0
- package/templates/default/src/components/reports/test-case-logs-modal.tsx +253 -0
- package/templates/default/src/components/table/table-actions.tsx +172 -0
- package/templates/default/src/components/test-run/download-logs-button.tsx +99 -0
- package/templates/default/src/components/test-run/log-viewer.tsx +445 -0
- package/templates/default/src/components/test-run/test-run-details.tsx +611 -0
- package/templates/default/src/components/test-run/test-run-header.tsx +149 -0
- package/templates/default/src/components/test-run/view-report-button.tsx +102 -0
- package/templates/default/src/components/theme/mode-toggle.tsx +54 -0
- package/templates/default/src/components/theme/theme-provider.tsx +8 -0
- package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -0
- package/templates/default/src/components/typography/page-header.tsx +7 -0
- package/templates/default/src/components/ui/alert-dialog.tsx +106 -0
- package/templates/default/src/components/ui/alert.tsx +43 -0
- package/templates/default/src/components/ui/avatar.tsx +40 -0
- package/templates/default/src/components/ui/badge.tsx +29 -0
- package/templates/default/src/components/ui/button.tsx +47 -0
- package/templates/default/src/components/ui/calendar.tsx +158 -0
- package/templates/default/src/components/ui/card.tsx +43 -0
- package/templates/default/src/components/ui/chart.tsx +369 -0
- package/templates/default/src/components/ui/checkbox.tsx +28 -0
- package/templates/default/src/components/ui/command.tsx +135 -0
- package/templates/default/src/components/ui/data-table-column-header.tsx +61 -0
- package/templates/default/src/components/ui/data-table-pagination.tsx +87 -0
- package/templates/default/src/components/ui/data-table-view-options.tsx +50 -0
- package/templates/default/src/components/ui/data-table.tsx +267 -0
- package/templates/default/src/components/ui/dialog.tsx +97 -0
- package/templates/default/src/components/ui/dropdown-menu.tsx +182 -0
- package/templates/default/src/components/ui/empty.tsx +104 -0
- package/templates/default/src/components/ui/input.tsx +22 -0
- package/templates/default/src/components/ui/kbd.tsx +28 -0
- package/templates/default/src/components/ui/label.tsx +19 -0
- package/templates/default/src/components/ui/loading.tsx +12 -0
- package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -0
- package/templates/default/src/components/ui/multi-select.tsx +142 -0
- package/templates/default/src/components/ui/navigation-menu.tsx +120 -0
- package/templates/default/src/components/ui/popover.tsx +33 -0
- package/templates/default/src/components/ui/progress.tsx +25 -0
- package/templates/default/src/components/ui/radio-group.tsx +44 -0
- package/templates/default/src/components/ui/scroll-area.tsx +40 -0
- package/templates/default/src/components/ui/select.tsx +144 -0
- package/templates/default/src/components/ui/separator.tsx +22 -0
- package/templates/default/src/components/ui/skeleton.tsx +7 -0
- package/templates/default/src/components/ui/table.tsx +76 -0
- package/templates/default/src/components/ui/tabs.tsx +55 -0
- package/templates/default/src/components/ui/textarea.tsx +21 -0
- package/templates/default/src/components/ui/toast.tsx +113 -0
- package/templates/default/src/components/ui/toaster.tsx +26 -0
- package/templates/default/src/components/ui/tooltip.tsx +32 -0
- package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -0
- package/templates/default/src/config/db-config.ts +10 -0
- package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -0
- package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -0
- package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -0
- package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -0
- package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -0
- package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -0
- package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -0
- package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -0
- package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -0
- package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -0
- package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -0
- package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -0
- package/templates/default/src/constants/form-opts/test-run-form-opts.ts +31 -0
- package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -0
- package/templates/default/src/hooks/use-toast.ts +187 -0
- package/templates/default/src/lib/bidirectional-sync.ts +432 -0
- package/templates/default/src/lib/database-sync.ts +531 -0
- package/templates/default/src/lib/environment-file-utils.ts +221 -0
- package/templates/default/src/lib/feature-file-generator.ts +411 -0
- package/templates/default/src/lib/gherkin-parser.ts +259 -0
- package/templates/default/src/lib/locator-group-file-utils.ts +370 -0
- package/templates/default/src/lib/metrics/metric-calculator.ts +613 -0
- package/templates/default/src/lib/module-hierarchy-builder.ts +205 -0
- package/templates/default/src/lib/path-helpers/module-path.ts +71 -0
- package/templates/default/src/lib/test-case-utils.ts +6 -0
- package/templates/default/src/lib/test-run/log-formatter.ts +83 -0
- package/templates/default/src/lib/test-run/process-manager.ts +191 -0
- package/templates/default/src/lib/test-run/report-parser.ts +316 -0
- package/templates/default/src/lib/test-run/test-run-executor.ts +144 -0
- package/templates/default/src/lib/test-run/winston-logger.ts +95 -0
- package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -0
- package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -0
- package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -0
- package/templates/default/src/lib/utils/node-param-validation.ts +81 -0
- package/templates/default/src/lib/utils/template-step-file-generator.ts +167 -0
- package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +723 -0
- package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -0
- package/templates/default/src/lib/utils.ts +31 -0
- package/templates/default/src/tests/config/environments/environments.json +14 -0
- package/templates/default/src/tests/config/executor/world.ts +41 -0
- package/templates/default/src/tests/executor.ts +80 -0
- package/templates/default/src/tests/hooks/hooks.ts +99 -0
- package/templates/default/src/tests/mapping/locator-map.json +1 -0
- package/templates/default/src/tests/steps/actions/click.step.ts +62 -0
- package/templates/default/src/tests/steps/actions/hover.step.ts +31 -0
- package/templates/default/src/tests/steps/actions/input.step.ts +149 -0
- package/templates/default/src/tests/steps/actions/navigation.step.ts +72 -0
- package/templates/default/src/tests/steps/actions/random_data.step.ts +146 -0
- package/templates/default/src/tests/steps/actions/store.step.ts +90 -0
- package/templates/default/src/tests/steps/actions/wait.step.ts +107 -0
- package/templates/default/src/tests/steps/validations/active_state_assertion.step.ts +34 -0
- package/templates/default/src/tests/steps/validations/navigation_assertion.step.ts +23 -0
- package/templates/default/src/tests/steps/validations/text_assertion.step.ts +111 -0
- package/templates/default/src/tests/steps/validations/visibility_assertion.step.ts +30 -0
- package/templates/default/src/tests/support/parameter-types.ts +12 -0
- package/templates/default/src/tests/utils/cache.util.ts +260 -0
- package/templates/default/src/tests/utils/cli.util.ts +177 -0
- package/templates/default/src/tests/utils/environment.util.ts +65 -0
- package/templates/default/src/tests/utils/locator.util.ts +248 -0
- package/templates/default/src/tests/utils/random-data.util.ts +45 -0
- package/templates/default/src/tests/utils/spawner.util.ts +617 -0
- package/templates/default/src/types/diagram/diagram.ts +34 -0
- package/templates/default/src/types/diagram/template-step.ts +11 -0
- package/templates/default/src/types/executor/browser.type.ts +1 -0
- package/templates/default/src/types/form/actionHandler.ts +6 -0
- package/templates/default/src/types/locator/locator.type.ts +11 -0
- package/templates/default/src/types/step/step.type.ts +1 -0
- package/templates/default/src/types/table/data-table.ts +6 -0
- package/templates/default/tailwind.config.ts +62 -0
- package/templates/default/tsconfig.json +28 -0
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
datasource db {
|
|
6
|
+
provider = "sqlite"
|
|
7
|
+
url = env("DATABASE_URL")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
model TestSuite {
|
|
11
|
+
id String @id @default(uuid())
|
|
12
|
+
name String
|
|
13
|
+
description String?
|
|
14
|
+
createdAt DateTime @default(now())
|
|
15
|
+
updatedAt DateTime @updatedAt
|
|
16
|
+
moduleId String
|
|
17
|
+
module Module @relation(fields: [moduleId], references: [id], onDelete: Cascade)
|
|
18
|
+
testCases TestCase[] @relation("TestSuiteTestCases")
|
|
19
|
+
tags Tag[]
|
|
20
|
+
metrics TestSuiteMetrics?
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
model Review {
|
|
24
|
+
id String @id @default(uuid())
|
|
25
|
+
testCaseId String
|
|
26
|
+
reviewerId String
|
|
27
|
+
status ReviewStatus
|
|
28
|
+
comments String?
|
|
29
|
+
createdAt DateTime @default(now())
|
|
30
|
+
updatedAt DateTime @updatedAt
|
|
31
|
+
testCase TestCase @relation(fields: [testCaseId], references: [id])
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
model LinkedJiraTicket {
|
|
35
|
+
id String @id @default(uuid())
|
|
36
|
+
testCaseId String
|
|
37
|
+
jiraTicketId String
|
|
38
|
+
jiraTicketUrl String
|
|
39
|
+
jiraStatus String?
|
|
40
|
+
createdAt DateTime @default(now())
|
|
41
|
+
updatedAt DateTime @updatedAt
|
|
42
|
+
testCase TestCase @relation(fields: [testCaseId], references: [id])
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
model TemplateStep {
|
|
46
|
+
id String @id @default(uuid())
|
|
47
|
+
name String
|
|
48
|
+
description String?
|
|
49
|
+
createdAt DateTime @default(now())
|
|
50
|
+
updatedAt DateTime @updatedAt
|
|
51
|
+
signature String
|
|
52
|
+
functionDefinition String?
|
|
53
|
+
type TemplateStepType
|
|
54
|
+
icon TemplateStepIcon
|
|
55
|
+
templateStepGroupId String
|
|
56
|
+
templateStepGroup TemplateStepGroup @relation("TemplateStepGroupSteps", fields: [templateStepGroupId], references: [id], onDelete: Cascade)
|
|
57
|
+
parameters TemplateStepParameter[]
|
|
58
|
+
TemplateTestCaseStep TemplateTestCaseStep[]
|
|
59
|
+
TestCaseStep TestCaseStep[]
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
model TemplateStepParameter {
|
|
63
|
+
id String @id @default(uuid())
|
|
64
|
+
name String
|
|
65
|
+
createdAt DateTime @default(now())
|
|
66
|
+
updatedAt DateTime @updatedAt
|
|
67
|
+
templateStepId String
|
|
68
|
+
order Int
|
|
69
|
+
type StepParameterType
|
|
70
|
+
templateStep TemplateStep @relation(fields: [templateStepId], references: [id], onDelete: Cascade)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
model TemplateStepGroup {
|
|
74
|
+
id String @id @default(uuid())
|
|
75
|
+
name String
|
|
76
|
+
description String?
|
|
77
|
+
type TemplateStepGroupType @default(ACTION)
|
|
78
|
+
createdAt DateTime @default(now())
|
|
79
|
+
updatedAt DateTime @updatedAt
|
|
80
|
+
templateSteps TemplateStep[] @relation("TemplateStepGroupSteps")
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
model TestCase {
|
|
84
|
+
id String @id @default(uuid())
|
|
85
|
+
title String
|
|
86
|
+
description String
|
|
87
|
+
createdAt DateTime @default(now())
|
|
88
|
+
updatedAt DateTime @updatedAt
|
|
89
|
+
linkedJiraTickets LinkedJiraTicket[]
|
|
90
|
+
reviews Review[]
|
|
91
|
+
steps TestCaseStep[]
|
|
92
|
+
TestSuite TestSuite[] @relation("TestSuiteTestCases")
|
|
93
|
+
TestRunTestCase TestRunTestCase[]
|
|
94
|
+
tags Tag[]
|
|
95
|
+
metrics TestCaseMetrics?
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
model TestCaseStep {
|
|
99
|
+
id String @id @default(uuid())
|
|
100
|
+
testCaseId String
|
|
101
|
+
order Int
|
|
102
|
+
gherkinStep String
|
|
103
|
+
icon TemplateStepIcon
|
|
104
|
+
label String
|
|
105
|
+
templateStepId String
|
|
106
|
+
TemplateStep TemplateStep @relation(fields: [templateStepId], references: [id], onDelete: Cascade)
|
|
107
|
+
testCase TestCase @relation(fields: [testCaseId], references: [id])
|
|
108
|
+
parameters TestCaseStepParameter[]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
model TemplateTestCase {
|
|
112
|
+
id String @id @default(uuid())
|
|
113
|
+
name String
|
|
114
|
+
description String?
|
|
115
|
+
createdAt DateTime @default(now())
|
|
116
|
+
updatedAt DateTime @updatedAt
|
|
117
|
+
steps TemplateTestCaseStep[]
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
model TemplateTestCaseStep {
|
|
121
|
+
id String @id @default(uuid())
|
|
122
|
+
order Int
|
|
123
|
+
gherkinStep String
|
|
124
|
+
icon TemplateStepIcon
|
|
125
|
+
label String
|
|
126
|
+
templateTestCaseId String
|
|
127
|
+
templateStepId String
|
|
128
|
+
TemplateStep TemplateStep @relation(fields: [templateStepId], references: [id], onDelete: Cascade)
|
|
129
|
+
templateTestCase TemplateTestCase @relation(fields: [templateTestCaseId], references: [id])
|
|
130
|
+
parameters TemplateTestCaseStepParameter[]
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
model TemplateTestCaseStepParameter {
|
|
134
|
+
id String @id @default(uuid())
|
|
135
|
+
name String
|
|
136
|
+
defaultValue String
|
|
137
|
+
order Int
|
|
138
|
+
testCaseStepId String
|
|
139
|
+
locatorId String?
|
|
140
|
+
type StepParameterType
|
|
141
|
+
defaultLocatorId String?
|
|
142
|
+
defaultLocator Locator? @relation(fields: [defaultLocatorId], references: [id])
|
|
143
|
+
templateTestCaseStep TemplateTestCaseStep @relation(fields: [testCaseStepId], references: [id], onDelete: Cascade)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
model TestCaseStepParameter {
|
|
147
|
+
id String @id @default(uuid())
|
|
148
|
+
name String
|
|
149
|
+
value String
|
|
150
|
+
order Int
|
|
151
|
+
testCaseStepId String
|
|
152
|
+
locatorId String?
|
|
153
|
+
type StepParameterType
|
|
154
|
+
Locator Locator? @relation(fields: [locatorId], references: [id])
|
|
155
|
+
testCaseStep TestCaseStep @relation(fields: [testCaseStepId], references: [id], onDelete: Cascade)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
model Locator {
|
|
159
|
+
id String @id @default(uuid())
|
|
160
|
+
name String
|
|
161
|
+
value String
|
|
162
|
+
createdAt DateTime @default(now())
|
|
163
|
+
updatedAt DateTime @updatedAt
|
|
164
|
+
locatorGroupId String?
|
|
165
|
+
locatorGroup LocatorGroup? @relation(fields: [locatorGroupId], references: [id], onDelete: Cascade)
|
|
166
|
+
TemplateTestCaseStepParameter TemplateTestCaseStepParameter[]
|
|
167
|
+
stepParameters TestCaseStepParameter[]
|
|
168
|
+
conflicts ConflictResolution[]
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
model LocatorGroup {
|
|
172
|
+
id String @id @default(uuid())
|
|
173
|
+
name String @unique
|
|
174
|
+
route String @default("/")
|
|
175
|
+
createdAt DateTime @default(now())
|
|
176
|
+
updatedAt DateTime @updatedAt
|
|
177
|
+
moduleId String
|
|
178
|
+
locators Locator[]
|
|
179
|
+
module Module @relation(fields: [moduleId], references: [id], onDelete: Cascade)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
model Module {
|
|
183
|
+
id String @id @default(uuid())
|
|
184
|
+
name String
|
|
185
|
+
parentId String?
|
|
186
|
+
createdAt DateTime @default(now())
|
|
187
|
+
updatedAt DateTime @updatedAt
|
|
188
|
+
locatorGroups LocatorGroup[]
|
|
189
|
+
parent Module? @relation("ModuleHierarchy", fields: [parentId], references: [id], onDelete: Cascade)
|
|
190
|
+
children Module[] @relation("ModuleHierarchy")
|
|
191
|
+
testSuites TestSuite[]
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
model TestRunTestCase {
|
|
195
|
+
id String @id @default(uuid())
|
|
196
|
+
testRunId String
|
|
197
|
+
testCaseId String
|
|
198
|
+
status TestRunTestCaseStatus @default(PENDING)
|
|
199
|
+
result TestRunTestCaseResult @default(UNTESTED)
|
|
200
|
+
tracePath String?
|
|
201
|
+
testRun TestRun @relation(fields: [testRunId], references: [id], onDelete: Cascade)
|
|
202
|
+
testCase TestCase @relation(fields: [testCaseId], references: [id], onDelete: Cascade)
|
|
203
|
+
reportTestCases ReportTestCase[]
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
model TestRun {
|
|
207
|
+
id String @id @default(uuid())
|
|
208
|
+
name String @unique
|
|
209
|
+
runId String @unique @default(uuid())
|
|
210
|
+
startedAt DateTime @default(now())
|
|
211
|
+
completedAt DateTime?
|
|
212
|
+
status TestRunStatus @default(QUEUED)
|
|
213
|
+
result TestRunResult @default(PENDING)
|
|
214
|
+
testCases TestRunTestCase[]
|
|
215
|
+
updatedAt DateTime @updatedAt
|
|
216
|
+
environment Environment @relation(fields: [environmentId], references: [id])
|
|
217
|
+
environmentId String
|
|
218
|
+
tags Tag[]
|
|
219
|
+
testWorkersCount Int? @default(1)
|
|
220
|
+
browserEngine BrowserEngine @default(CHROMIUM)
|
|
221
|
+
logs TestRunLog?
|
|
222
|
+
logPath String?
|
|
223
|
+
reportPath String?
|
|
224
|
+
reports Report[]
|
|
225
|
+
|
|
226
|
+
@@index([completedAt])
|
|
227
|
+
@@index([result])
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
model TestRunLog {
|
|
231
|
+
id String @id @default(uuid())
|
|
232
|
+
testRunId String @unique
|
|
233
|
+
logs String
|
|
234
|
+
createdAt DateTime @default(now())
|
|
235
|
+
updatedAt DateTime @updatedAt
|
|
236
|
+
testRun TestRun @relation(fields: [testRunId], references: [runId], onDelete: Cascade)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
model Environment {
|
|
240
|
+
id String @id @default(uuid())
|
|
241
|
+
name String @unique
|
|
242
|
+
baseUrl String
|
|
243
|
+
apiBaseUrl String?
|
|
244
|
+
username String?
|
|
245
|
+
password String?
|
|
246
|
+
createdAt DateTime @default(now())
|
|
247
|
+
updatedAt DateTime @updatedAt
|
|
248
|
+
testRuns TestRun[]
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
model Tag {
|
|
252
|
+
id String @id @default(uuid())
|
|
253
|
+
name String
|
|
254
|
+
tagExpression String
|
|
255
|
+
type TagType @default(FILTER)
|
|
256
|
+
createdAt DateTime @default(now())
|
|
257
|
+
updatedAt DateTime @updatedAt
|
|
258
|
+
testRuns TestRun[]
|
|
259
|
+
testSuites TestSuite[]
|
|
260
|
+
testCases TestCase[]
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
model ConflictResolution {
|
|
264
|
+
id String @id @default(uuid())
|
|
265
|
+
entityType EntityType
|
|
266
|
+
entityId String
|
|
267
|
+
conflictType ConflictType
|
|
268
|
+
conflictingEntityId String?
|
|
269
|
+
resolved Boolean @default(false)
|
|
270
|
+
createdAt DateTime @default(now())
|
|
271
|
+
updatedAt DateTime @updatedAt
|
|
272
|
+
locator Locator? @relation(fields: [entityId], references: [id], onDelete: Cascade)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
model ReportTestCase {
|
|
276
|
+
id String @id @default(uuid())
|
|
277
|
+
reportId String
|
|
278
|
+
testCaseId String
|
|
279
|
+
testRunTestCaseId String
|
|
280
|
+
reportScenarioId String?
|
|
281
|
+
testRunTestCase TestRunTestCase @relation(fields: [testRunTestCaseId], references: [id], onDelete: Cascade)
|
|
282
|
+
report Report @relation(fields: [reportId], references: [id], onDelete: Cascade)
|
|
283
|
+
reportScenario ReportScenario? @relation(fields: [reportScenarioId], references: [id], onDelete: SetNull)
|
|
284
|
+
duration String
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
model Report {
|
|
288
|
+
id String @id @default(uuid())
|
|
289
|
+
name String
|
|
290
|
+
description String?
|
|
291
|
+
reportPath String?
|
|
292
|
+
createdAt DateTime @default(now())
|
|
293
|
+
updatedAt DateTime @updatedAt
|
|
294
|
+
testRunId String
|
|
295
|
+
testRun TestRun @relation(fields: [testRunId], references: [id], onDelete: Cascade)
|
|
296
|
+
testCases ReportTestCase[]
|
|
297
|
+
features ReportFeature[]
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
model ReportFeature {
|
|
301
|
+
id String @id @default(uuid())
|
|
302
|
+
reportId String
|
|
303
|
+
name String
|
|
304
|
+
description String?
|
|
305
|
+
uri String
|
|
306
|
+
line Int
|
|
307
|
+
keyword String
|
|
308
|
+
createdAt DateTime @default(now())
|
|
309
|
+
updatedAt DateTime @updatedAt
|
|
310
|
+
report Report @relation(fields: [reportId], references: [id], onDelete: Cascade)
|
|
311
|
+
tags ReportFeatureTag[]
|
|
312
|
+
scenarios ReportScenario[]
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
model ReportFeatureTag {
|
|
316
|
+
id String @id @default(uuid())
|
|
317
|
+
reportFeatureId String
|
|
318
|
+
tagName String
|
|
319
|
+
line Int
|
|
320
|
+
createdAt DateTime @default(now())
|
|
321
|
+
reportFeature ReportFeature @relation(fields: [reportFeatureId], references: [id], onDelete: Cascade)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
model ReportScenario {
|
|
325
|
+
id String @id @default(uuid())
|
|
326
|
+
reportFeatureId String
|
|
327
|
+
name String
|
|
328
|
+
description String?
|
|
329
|
+
line Int
|
|
330
|
+
keyword String
|
|
331
|
+
type String
|
|
332
|
+
cucumberId String
|
|
333
|
+
createdAt DateTime @default(now())
|
|
334
|
+
updatedAt DateTime @updatedAt
|
|
335
|
+
reportFeature ReportFeature @relation(fields: [reportFeatureId], references: [id], onDelete: Cascade)
|
|
336
|
+
tags ReportScenarioTag[]
|
|
337
|
+
steps ReportStep[]
|
|
338
|
+
hooks ReportHook[]
|
|
339
|
+
reportTestCases ReportTestCase[]
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
model ReportScenarioTag {
|
|
343
|
+
id String @id @default(uuid())
|
|
344
|
+
reportScenarioId String
|
|
345
|
+
tagName String
|
|
346
|
+
line Int
|
|
347
|
+
createdAt DateTime @default(now())
|
|
348
|
+
reportScenario ReportScenario @relation(fields: [reportScenarioId], references: [id], onDelete: Cascade)
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
model ReportStep {
|
|
352
|
+
id String @id @default(uuid())
|
|
353
|
+
reportScenarioId String
|
|
354
|
+
keyword StepKeyword
|
|
355
|
+
line Int?
|
|
356
|
+
name String
|
|
357
|
+
matchLocation String?
|
|
358
|
+
status StepStatus
|
|
359
|
+
duration String
|
|
360
|
+
errorMessage String?
|
|
361
|
+
errorTrace String?
|
|
362
|
+
hidden Boolean @default(false)
|
|
363
|
+
order Int
|
|
364
|
+
createdAt DateTime @default(now())
|
|
365
|
+
updatedAt DateTime @updatedAt
|
|
366
|
+
reportScenario ReportScenario @relation(fields: [reportScenarioId], references: [id], onDelete: Cascade)
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
model ReportHook {
|
|
370
|
+
id String @id @default(uuid())
|
|
371
|
+
reportScenarioId String
|
|
372
|
+
keyword StepKeyword
|
|
373
|
+
status StepStatus
|
|
374
|
+
duration String
|
|
375
|
+
errorMessage String?
|
|
376
|
+
errorTrace String?
|
|
377
|
+
hidden Boolean @default(false)
|
|
378
|
+
createdAt DateTime @default(now())
|
|
379
|
+
updatedAt DateTime @updatedAt
|
|
380
|
+
reportScenario ReportScenario @relation(fields: [reportScenarioId], references: [id], onDelete: Cascade)
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
model TestCaseMetrics {
|
|
384
|
+
id String @id @default(uuid())
|
|
385
|
+
testCaseId String @unique
|
|
386
|
+
isRepeatedlyFailing Boolean @default(false)
|
|
387
|
+
isFlaky Boolean @default(false)
|
|
388
|
+
consecutiveFailures Int @default(0)
|
|
389
|
+
failureRate Float @default(0)
|
|
390
|
+
totalRecentRuns Int @default(0)
|
|
391
|
+
failedRecentRuns Int @default(0)
|
|
392
|
+
lastExecutedAt DateTime?
|
|
393
|
+
lastFailedAt DateTime?
|
|
394
|
+
lastPassedAt DateTime?
|
|
395
|
+
createdAt DateTime @default(now())
|
|
396
|
+
updatedAt DateTime @updatedAt
|
|
397
|
+
testCase TestCase @relation(fields: [testCaseId], references: [id], onDelete: Cascade)
|
|
398
|
+
|
|
399
|
+
@@index([isRepeatedlyFailing])
|
|
400
|
+
@@index([isFlaky])
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
model TestSuiteMetrics {
|
|
404
|
+
id String @id @default(uuid())
|
|
405
|
+
testSuiteId String @unique
|
|
406
|
+
lastExecutedAt DateTime?
|
|
407
|
+
createdAt DateTime @default(now())
|
|
408
|
+
updatedAt DateTime @updatedAt
|
|
409
|
+
testSuite TestSuite @relation(fields: [testSuiteId], references: [id], onDelete: Cascade)
|
|
410
|
+
|
|
411
|
+
@@index([lastExecutedAt])
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
model DashboardMetrics {
|
|
415
|
+
id String @id @default(uuid())
|
|
416
|
+
failedRecentRunsCount Int @default(0)
|
|
417
|
+
repeatedlyFailingTestsCount Int @default(0)
|
|
418
|
+
flakyTestsCount Int @default(0)
|
|
419
|
+
suitesNotExecutedRecentlyCount Int @default(0)
|
|
420
|
+
lastUpdatedAt DateTime @default(now())
|
|
421
|
+
createdAt DateTime @default(now())
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
enum TagType {
|
|
425
|
+
IDENTIFIER
|
|
426
|
+
FILTER
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
enum TestRunStatus {
|
|
430
|
+
QUEUED
|
|
431
|
+
RUNNING
|
|
432
|
+
CANCELLING
|
|
433
|
+
COMPLETED
|
|
434
|
+
CANCELLED
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
enum TestRunTestCaseStatus {
|
|
438
|
+
PENDING
|
|
439
|
+
RUNNING
|
|
440
|
+
COMPLETED
|
|
441
|
+
CANCELLED
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
enum TestRunTestCaseResult {
|
|
445
|
+
PASSED
|
|
446
|
+
FAILED
|
|
447
|
+
UNTESTED
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
enum TestRunResult {
|
|
451
|
+
PENDING
|
|
452
|
+
PASSED
|
|
453
|
+
FAILED
|
|
454
|
+
CANCELLED
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
enum Role {
|
|
458
|
+
ADMIN
|
|
459
|
+
TESTER
|
|
460
|
+
REVIEWER
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
enum ReviewStatus {
|
|
464
|
+
PENDING
|
|
465
|
+
APPROVED
|
|
466
|
+
CHANGES_REQUESTED
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
enum TestCaseStatus {
|
|
470
|
+
PENDING
|
|
471
|
+
IN_PROGRESS
|
|
472
|
+
COMPLETED
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
enum TestCaseResult {
|
|
476
|
+
PASSED
|
|
477
|
+
FAILED
|
|
478
|
+
BLOCKED
|
|
479
|
+
SKIPPED
|
|
480
|
+
RETEST
|
|
481
|
+
UNTESTED
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
enum TemplateStepType {
|
|
485
|
+
ACTION
|
|
486
|
+
ASSERTION
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
enum StepParameterType {
|
|
490
|
+
NUMBER
|
|
491
|
+
STRING
|
|
492
|
+
DATE
|
|
493
|
+
BOOLEAN
|
|
494
|
+
LOCATOR
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
enum StepParameterValueType {
|
|
498
|
+
STRING
|
|
499
|
+
NUMBER
|
|
500
|
+
LOCATOR
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
enum TemplateStepIcon {
|
|
504
|
+
MOUSE
|
|
505
|
+
NAVIGATION
|
|
506
|
+
INPUT
|
|
507
|
+
DOWNLOAD
|
|
508
|
+
API
|
|
509
|
+
STORE
|
|
510
|
+
FORMAT
|
|
511
|
+
DATA
|
|
512
|
+
UPLOAD
|
|
513
|
+
WAIT
|
|
514
|
+
VALIDATION
|
|
515
|
+
DEBUG
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
enum BrowserEngine {
|
|
519
|
+
CHROMIUM
|
|
520
|
+
FIREFOX
|
|
521
|
+
WEBKIT
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
enum TemplateStepGroupType {
|
|
525
|
+
ACTION
|
|
526
|
+
VALIDATION
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
enum EntityType {
|
|
530
|
+
LOCATOR
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
enum ConflictType {
|
|
534
|
+
DUPLICATE_NAME
|
|
535
|
+
DUPLICATE_VALUE
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
enum StepStatus {
|
|
539
|
+
PASSED
|
|
540
|
+
FAILED
|
|
541
|
+
SKIPPED
|
|
542
|
+
PENDING
|
|
543
|
+
UNDEFINED
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
enum StepKeyword {
|
|
547
|
+
GIVEN
|
|
548
|
+
WHEN
|
|
549
|
+
THEN
|
|
550
|
+
AND
|
|
551
|
+
BUT
|
|
552
|
+
BEFORE
|
|
553
|
+
AFTER
|
|
554
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|
|
@@ -0,0 +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()
|
|
@@ -0,0 +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:./prisma/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!')
|