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,82 @@
|
|
|
1
|
+
import { DataTable } from '@/components/ui/data-table'
|
|
2
|
+
import { reportViewTableCols } from './report-view-table-columns'
|
|
3
|
+
import { Prisma } from '@prisma/client'
|
|
4
|
+
|
|
5
|
+
type ReportDetailWithRelations = Prisma.ReportGetPayload<{
|
|
6
|
+
include: {
|
|
7
|
+
testRun: {
|
|
8
|
+
include: {
|
|
9
|
+
environment: true
|
|
10
|
+
tags: true
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
features: {
|
|
14
|
+
include: {
|
|
15
|
+
tags: true
|
|
16
|
+
scenarios: {
|
|
17
|
+
include: {
|
|
18
|
+
tags: true
|
|
19
|
+
steps: true
|
|
20
|
+
hooks: true
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
testCases: {
|
|
26
|
+
include: {
|
|
27
|
+
testRunTestCase: {
|
|
28
|
+
include: {
|
|
29
|
+
testCase: {
|
|
30
|
+
include: {
|
|
31
|
+
tags: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
reportScenario: {
|
|
37
|
+
include: {
|
|
38
|
+
tags: true
|
|
39
|
+
steps: {
|
|
40
|
+
orderBy: {
|
|
41
|
+
order: 'asc'
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
hooks: true
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}>
|
|
51
|
+
|
|
52
|
+
interface ReportViewTableProps {
|
|
53
|
+
report: ReportDetailWithRelations
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const ReportViewTable = ({ report }: ReportViewTableProps) => {
|
|
57
|
+
// Type guard to validate the data structure
|
|
58
|
+
const isValidReportTestCaseData = (testCases: unknown): testCases is ReportDetailWithRelations['testCases'] => {
|
|
59
|
+
if (!Array.isArray(testCases)) return false
|
|
60
|
+
return testCases.every(
|
|
61
|
+
item => item && typeof item === 'object' && 'id' in item && 'testRunTestCase' in item && 'reportScenario' in item,
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!isValidReportTestCaseData(report.testCases)) {
|
|
66
|
+
return <div>Error: Invalid report test case data format</div>
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
<DataTable
|
|
72
|
+
columns={reportViewTableCols}
|
|
73
|
+
data={report.testCases}
|
|
74
|
+
filterColumn="testCaseTitle"
|
|
75
|
+
filterPlaceholder="Filter by test case title..."
|
|
76
|
+
showSelectedRows={false}
|
|
77
|
+
/>
|
|
78
|
+
</>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export default ReportViewTable
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import PageHeader from '@/components/typography/page-header'
|
|
2
|
+
import HeaderSubtitle from '@/components/typography/page-header-subtitle'
|
|
3
|
+
import { Code } from 'lucide-react'
|
|
4
|
+
import { Suspense } from 'react'
|
|
5
|
+
import DataTableSkeleton from '@/components/loading-skeleton/data-table/data-table-skeleton'
|
|
6
|
+
import { Metadata } from 'next'
|
|
7
|
+
import TestCasesMetricTable from './test-cases-metric-table'
|
|
8
|
+
|
|
9
|
+
export const metadata: Metadata = {
|
|
10
|
+
title: 'Appraise | Test Cases Metrics Report',
|
|
11
|
+
description: 'Manage test cases report for identifying elements on pages',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const TestCasesMetricsReport = async ({searchParams}: {searchParams: Promise<{filter?: string}>}) => {
|
|
15
|
+
const resolvedSearchParams = await searchParams
|
|
16
|
+
const filter = resolvedSearchParams?.filter as 'repeatedlyFailing' | 'flaky' | undefined
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<>
|
|
20
|
+
<div className="mb-8">
|
|
21
|
+
<div className="flex items-center justify-between">
|
|
22
|
+
<div>
|
|
23
|
+
<PageHeader>
|
|
24
|
+
<span className="flex items-center">
|
|
25
|
+
<Code className="mr-2 h-8 w-8" />
|
|
26
|
+
Test Cases Report
|
|
27
|
+
</span>
|
|
28
|
+
</PageHeader>
|
|
29
|
+
<HeaderSubtitle>
|
|
30
|
+
Test cases are the individual tests that are used to test a specific feature or functionality
|
|
31
|
+
</HeaderSubtitle>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<Suspense fallback={<DataTableSkeleton />}>
|
|
36
|
+
<TestCasesMetricTable filter={filter || 'repeatedlyFailing'} />
|
|
37
|
+
</Suspense>
|
|
38
|
+
</>
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default TestCasesMetricsReport
|
package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { DataTableColumnHeader } from '@/components/ui/data-table-column-header'
|
|
4
|
+
import { ColumnDef } from '@tanstack/react-table'
|
|
5
|
+
import TableActions from '@/components/table/table-actions'
|
|
6
|
+
import { Tag, TestCase, TestCaseMetrics } from '@prisma/client'
|
|
7
|
+
import { deleteTestCaseAction } from '@/actions/test-case/test-case-actions'
|
|
8
|
+
import { formatDateTime } from '@/lib/utils'
|
|
9
|
+
import { Checkbox } from '@/components/ui/checkbox'
|
|
10
|
+
|
|
11
|
+
export const testCasesMetricTableCols: ColumnDef<TestCaseMetrics & { testCase: TestCase & { tags: Tag[] } }>[] =
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
id: 'select',
|
|
15
|
+
header: ({ table }) => (
|
|
16
|
+
<Checkbox
|
|
17
|
+
checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}
|
|
18
|
+
onCheckedChange={value => table.toggleAllPageRowsSelected(!!value)}
|
|
19
|
+
aria-label="Select all"
|
|
20
|
+
className="mr-2"
|
|
21
|
+
/>
|
|
22
|
+
),
|
|
23
|
+
cell: ({ row }) => (
|
|
24
|
+
<Checkbox
|
|
25
|
+
checked={row.getIsSelected()}
|
|
26
|
+
onCheckedChange={value => row.toggleSelected(!!value)}
|
|
27
|
+
aria-label="Select row"
|
|
28
|
+
className="mr-2"
|
|
29
|
+
/>
|
|
30
|
+
),
|
|
31
|
+
enableSorting: false,
|
|
32
|
+
enableHiding: false,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: 'testCase.title',
|
|
36
|
+
accessorKey: 'testCase.title',
|
|
37
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Test Case Title" />,
|
|
38
|
+
cell: ({ row }) => {
|
|
39
|
+
const testCase = row.original.testCase
|
|
40
|
+
return <div>{testCase.title}</div>
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
accessorKey: 'testCase.description',
|
|
45
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Test Case Description" />,
|
|
46
|
+
cell: ({ row }) => {
|
|
47
|
+
const testCase = row.original.testCase
|
|
48
|
+
return <div>{testCase.description}</div>
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
accessorKey: 'consecutiveFailures',
|
|
53
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Consecutive Failures" />,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
accessorKey: 'failureRate',
|
|
57
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Failure Rate" />,
|
|
58
|
+
cell: ({ row }) => {
|
|
59
|
+
const testCaseMetrics = row.original
|
|
60
|
+
return <div>{testCaseMetrics.failureRate * 100}%</div>
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
accessorKey: 'totalRecentRuns',
|
|
65
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Total Recent Runs" />,
|
|
66
|
+
cell: ({ row }) => {
|
|
67
|
+
const testCaseMetrics = row.original
|
|
68
|
+
return <div>{testCaseMetrics.totalRecentRuns}</div>
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
accessorKey: 'failedRecentRuns',
|
|
73
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Failed Recent Runs" />,
|
|
74
|
+
cell: ({ row }) => {
|
|
75
|
+
const testCaseMetrics = row.original
|
|
76
|
+
return <div>{testCaseMetrics.failedRecentRuns}</div>
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
accessorKey: 'lastExecutedAt',
|
|
81
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Last Executed At" />,
|
|
82
|
+
cell: ({ row }) => {
|
|
83
|
+
const testCaseMetrics = row.original
|
|
84
|
+
return <div>{testCaseMetrics.lastExecutedAt ? formatDateTime(testCaseMetrics.lastExecutedAt) : '-'}</div>
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
accessorKey: 'lastFailedAt',
|
|
89
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Last Failed At" />,
|
|
90
|
+
cell: ({ row }) => {
|
|
91
|
+
const testCaseMetrics = row.original
|
|
92
|
+
return <div>{testCaseMetrics.lastFailedAt ? formatDateTime(testCaseMetrics.lastFailedAt) : '-'}</div>
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
accessorKey: 'lastPassedAt',
|
|
97
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Last Passed At" />,
|
|
98
|
+
cell: ({ row }) => {
|
|
99
|
+
const testCaseMetrics = row.original
|
|
100
|
+
return <div>{testCaseMetrics.lastPassedAt ? formatDateTime(testCaseMetrics.lastPassedAt) : '-'}</div>
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'actions',
|
|
105
|
+
cell: ({ row }) => {
|
|
106
|
+
const testCaseId = row.original.testCaseId
|
|
107
|
+
return (
|
|
108
|
+
<TableActions
|
|
109
|
+
modifyLink={`/test-cases/modify/${testCaseId}`}
|
|
110
|
+
deleteHandler={() => deleteTestCaseAction([testCaseId])}
|
|
111
|
+
/>
|
|
112
|
+
)
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DataTable } from '@/components/ui/data-table'
|
|
2
|
+
import { testCasesMetricTableCols } from './test-cases-metric-table-columns'
|
|
3
|
+
import { TestCaseMetrics, TestCase, Tag } from '@prisma/client'
|
|
4
|
+
import { getAllTestCaseMetricsAction } from '@/actions/reports/report-actions'
|
|
5
|
+
import { deleteTestCaseAction } from '@/actions/test-case/test-case-actions'
|
|
6
|
+
|
|
7
|
+
const TestCasesMetricTable = async ({ filter }: { filter: 'repeatedlyFailing' | 'flaky' }) => {
|
|
8
|
+
const { data: testCaseMetrics, error: testCaseMetricsError } = await getAllTestCaseMetricsAction(filter)
|
|
9
|
+
|
|
10
|
+
if (testCaseMetricsError) {
|
|
11
|
+
return <div>Error: {testCaseMetricsError}</div>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<DataTable
|
|
17
|
+
columns={testCasesMetricTableCols}
|
|
18
|
+
data={testCaseMetrics as (TestCaseMetrics & { testCase: TestCase & { tags: Tag[] } })[]}
|
|
19
|
+
filterColumn="testCase.title"
|
|
20
|
+
filterPlaceholder="Filter by name..."
|
|
21
|
+
deleteAction={deleteTestCaseAction}
|
|
22
|
+
/>
|
|
23
|
+
</>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default TestCasesMetricTable
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import PageHeader from '@/components/typography/page-header'
|
|
2
|
+
import HeaderSubtitle from '@/components/typography/page-header-subtitle'
|
|
3
|
+
import { TestTubes } from 'lucide-react'
|
|
4
|
+
import { Suspense } from 'react'
|
|
5
|
+
import DataTableSkeleton from '@/components/loading-skeleton/data-table/data-table-skeleton'
|
|
6
|
+
import { Metadata } from 'next'
|
|
7
|
+
import TestSuitesMetricTable from './test-suites-metric-table'
|
|
8
|
+
|
|
9
|
+
export const metadata: Metadata = {
|
|
10
|
+
title: 'Appraise | Test Suites Metrics Report',
|
|
11
|
+
description: 'Manage test suites report for identifying test suites that are not executed recently',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const TestSuitesMetricsReport = async ({searchParams}: {searchParams: Promise<{filter?: string}>}) => {
|
|
15
|
+
const resolvedSearchParams = await searchParams
|
|
16
|
+
const filter = resolvedSearchParams?.filter as 'notExecutedRecently' | undefined
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<>
|
|
20
|
+
<div className="mb-8">
|
|
21
|
+
<div className="flex items-center justify-between">
|
|
22
|
+
<div>
|
|
23
|
+
<PageHeader>
|
|
24
|
+
<span className="flex items-center">
|
|
25
|
+
<TestTubes className="mr-2 h-8 w-8" />
|
|
26
|
+
Test Suites Report
|
|
27
|
+
</span>
|
|
28
|
+
</PageHeader>
|
|
29
|
+
<HeaderSubtitle>
|
|
30
|
+
Test suites are collections of tests that are used to test a specific feature or functionality
|
|
31
|
+
</HeaderSubtitle>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<Suspense fallback={<DataTableSkeleton />}>
|
|
36
|
+
<TestSuitesMetricTable filter={filter || 'notExecutedRecently'} />
|
|
37
|
+
</Suspense>
|
|
38
|
+
</>
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default TestSuitesMetricsReport
|
package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { DataTableColumnHeader } from '@/components/ui/data-table-column-header'
|
|
4
|
+
import { ColumnDef } from '@tanstack/react-table'
|
|
5
|
+
import TableActions from '@/components/table/table-actions'
|
|
6
|
+
import { Tag, TestCase, TestSuite, TestSuiteMetrics } from '@prisma/client'
|
|
7
|
+
import { formatDateTime } from '@/lib/utils'
|
|
8
|
+
import { Checkbox } from '@/components/ui/checkbox'
|
|
9
|
+
import { deleteTestSuiteAction } from '@/actions/test-suite/test-suite-actions'
|
|
10
|
+
|
|
11
|
+
export const testSuitesMetricTableCols: ColumnDef<TestSuiteMetrics & { testSuite: TestSuite & { tags: Tag[]; testCases: TestCase[] } }>[] =
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
id: 'select',
|
|
15
|
+
header: ({ table }) => (
|
|
16
|
+
<Checkbox
|
|
17
|
+
checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}
|
|
18
|
+
onCheckedChange={value => table.toggleAllPageRowsSelected(!!value)}
|
|
19
|
+
aria-label="Select all"
|
|
20
|
+
className="mr-2"
|
|
21
|
+
/>
|
|
22
|
+
),
|
|
23
|
+
cell: ({ row }) => (
|
|
24
|
+
<Checkbox
|
|
25
|
+
checked={row.getIsSelected()}
|
|
26
|
+
onCheckedChange={value => row.toggleSelected(!!value)}
|
|
27
|
+
aria-label="Select row"
|
|
28
|
+
className="mr-2"
|
|
29
|
+
/>
|
|
30
|
+
),
|
|
31
|
+
enableSorting: false,
|
|
32
|
+
enableHiding: false,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: 'testSuite.name',
|
|
36
|
+
accessorKey: 'testSuite.name',
|
|
37
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Test Suite Name" />,
|
|
38
|
+
cell: ({ row }) => {
|
|
39
|
+
const testSuite = row.original.testSuite
|
|
40
|
+
return <div>{testSuite.name}</div>
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
accessorKey: 'testSuite.description',
|
|
45
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Test Suite Description" />,
|
|
46
|
+
cell: ({ row }) => {
|
|
47
|
+
const testSuite = row.original.testSuite
|
|
48
|
+
return <div>{testSuite.description}</div>
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
accessorKey: 'testSuite.testCases.length',
|
|
53
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Total Test Cases" />,
|
|
54
|
+
cell: ({ row }) => {
|
|
55
|
+
const testSuite = row.original.testSuite
|
|
56
|
+
return <div>{testSuite.testCases.length}</div>
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
accessorKey: 'lastExecutedAt',
|
|
61
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Last Executed At" />,
|
|
62
|
+
cell: ({ row }) => {
|
|
63
|
+
const testSuiteMetrics = row.original
|
|
64
|
+
return <div>{formatDateTime(testSuiteMetrics.lastExecutedAt)}</div>
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'actions',
|
|
69
|
+
cell: ({ row }) => {
|
|
70
|
+
const testSuite = row.original.testSuite
|
|
71
|
+
return (
|
|
72
|
+
<TableActions
|
|
73
|
+
modifyLink={`/test-suites/modify/${testSuite.id}`}
|
|
74
|
+
deleteHandler={() => deleteTestSuiteAction([testSuite.id])}
|
|
75
|
+
/>
|
|
76
|
+
)
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { deleteTestSuiteAction } from '@/actions/test-suite/test-suite-actions'
|
|
2
|
+
import { DataTable } from '@/components/ui/data-table'
|
|
3
|
+
import { TestCase, Tag, TestSuiteMetrics, TestSuite } from '@prisma/client'
|
|
4
|
+
import { getAllTestSuiteMetricsAction } from '@/actions/reports/report-actions'
|
|
5
|
+
import { testSuitesMetricTableCols } from './test-suites-metric-table-columns'
|
|
6
|
+
|
|
7
|
+
const TestSuitesMetricTable = async ({ filter }: { filter: 'notExecutedRecently' }) => {
|
|
8
|
+
const { data: testSuiteMetrics, error: testSuiteMetricsError } = await getAllTestSuiteMetricsAction(filter)
|
|
9
|
+
|
|
10
|
+
if (testSuiteMetricsError) {
|
|
11
|
+
return <div>Error: {testSuiteMetricsError}</div>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<DataTable
|
|
17
|
+
columns={testSuitesMetricTableCols}
|
|
18
|
+
data={testSuiteMetrics as (TestSuiteMetrics & { testSuite: TestSuite & { tags: Tag[]; testCases: TestCase[] } })[]}
|
|
19
|
+
filterColumn="testSuite.name"
|
|
20
|
+
filterPlaceholder="Filter by name..."
|
|
21
|
+
deleteAction={deleteTestSuiteAction}
|
|
22
|
+
/>
|
|
23
|
+
</>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default TestSuitesMetricTable
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react'
|
|
4
|
+
import { Button } from '@/components/ui/button'
|
|
5
|
+
import { Eye } from 'lucide-react'
|
|
6
|
+
import { TestCaseLogsModal } from '@/components/reports/test-case-logs-modal'
|
|
7
|
+
import { ReportScenario, StepStatus } from '@prisma/client'
|
|
8
|
+
|
|
9
|
+
type ReportScenarioWithDetails = (ReportScenario & {
|
|
10
|
+
tags: Array<{ tagName: string }>
|
|
11
|
+
steps: Array<{
|
|
12
|
+
id: string
|
|
13
|
+
keyword: string
|
|
14
|
+
name: string
|
|
15
|
+
status: StepStatus
|
|
16
|
+
duration: string
|
|
17
|
+
errorMessage: string | null
|
|
18
|
+
errorTrace: string | null
|
|
19
|
+
order: number
|
|
20
|
+
}>
|
|
21
|
+
hooks: Array<{
|
|
22
|
+
id: string
|
|
23
|
+
keyword: string
|
|
24
|
+
status: StepStatus
|
|
25
|
+
duration: string
|
|
26
|
+
errorMessage: string | null
|
|
27
|
+
errorTrace: string | null
|
|
28
|
+
}>
|
|
29
|
+
}) | null
|
|
30
|
+
|
|
31
|
+
interface ViewLogsButtonProps {
|
|
32
|
+
reportScenario: ReportScenarioWithDetails
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function ViewLogsButton({ reportScenario }: ViewLogsButtonProps) {
|
|
36
|
+
const [isModalOpen, setIsModalOpen] = useState(false)
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<>
|
|
40
|
+
<Button
|
|
41
|
+
variant="outline"
|
|
42
|
+
size="sm"
|
|
43
|
+
className="flex items-center gap-2"
|
|
44
|
+
onClick={() => setIsModalOpen(true)}
|
|
45
|
+
disabled={!reportScenario}
|
|
46
|
+
>
|
|
47
|
+
<Eye className="h-4 w-4" />
|
|
48
|
+
View Logs
|
|
49
|
+
</Button>
|
|
50
|
+
{reportScenario && (
|
|
51
|
+
<TestCaseLogsModal
|
|
52
|
+
open={isModalOpen}
|
|
53
|
+
onOpenChange={setIsModalOpen}
|
|
54
|
+
reportScenario={reportScenario}
|
|
55
|
+
/>
|
|
56
|
+
)}
|
|
57
|
+
</>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Create review page temporarily commented out - will be reworked later
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { Metadata } from 'next'
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
Create review functionality temporarily disabled
|
|
7
|
+
Will be re-implemented without user dependencies
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const metadata: Metadata = {
|
|
11
|
+
title: 'Appraise | Create Review',
|
|
12
|
+
description: 'Review creation will be implemented later',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const CreateReview = () => {
|
|
16
|
+
return (
|
|
17
|
+
<div className="p-8">
|
|
18
|
+
<h1 className="text-2xl font-bold">Create Review</h1>
|
|
19
|
+
<p className="mt-4 text-muted-foreground">
|
|
20
|
+
Review creation will be implemented later without user authentication dependencies.
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default CreateReview
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Created reviews table temporarily commented out - will be reworked later
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
Created reviews table functionality temporarily disabled
|
|
6
|
+
Will be re-implemented without user dependencies
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export default function CreatedReviewsTable() {
|
|
10
|
+
return (
|
|
11
|
+
<div className="p-4">
|
|
12
|
+
<p className="text-muted-foreground">Created reviews table will be implemented later.</p>
|
|
13
|
+
</div>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Modify review page temporarily commented out - will be reworked later
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { Metadata } from 'next'
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
Modify review functionality temporarily disabled
|
|
7
|
+
Will be re-implemented without user dependencies
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const metadata: Metadata = {
|
|
11
|
+
title: 'Appraise | Modify Review',
|
|
12
|
+
description: 'Review modification will be implemented later',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const ModifyReview = () => {
|
|
16
|
+
return (
|
|
17
|
+
<div className="p-8">
|
|
18
|
+
<h1 className="text-2xl font-bold">Modify Review</h1>
|
|
19
|
+
<p className="mt-4 text-muted-foreground">
|
|
20
|
+
Review modification will be implemented later without user authentication dependencies.
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default ModifyReview
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Reviews page temporarily commented out - will be reworked later
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { Metadata } from 'next'
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
Reviews functionality temporarily disabled
|
|
7
|
+
Will be re-implemented without user dependencies
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const metadata: Metadata = {
|
|
11
|
+
title: 'Appraise | Reviews',
|
|
12
|
+
description: 'Review functionality will be implemented later',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const Reviews = () => {
|
|
16
|
+
return (
|
|
17
|
+
<div className="p-8">
|
|
18
|
+
<h1 className="text-2xl font-bold">Reviews</h1>
|
|
19
|
+
<p className="mt-4 text-muted-foreground">
|
|
20
|
+
Review functionality will be implemented later without user authentication dependencies.
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default Reviews
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Review view page temporarily commented out - will be reworked later
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { Metadata } from 'next'
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
Review view functionality temporarily disabled
|
|
7
|
+
Will be re-implemented without user dependencies
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const metadata: Metadata = {
|
|
11
|
+
title: 'Appraise | Review Details',
|
|
12
|
+
description: 'Review viewing will be implemented later',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const ReviewView = () => {
|
|
16
|
+
return (
|
|
17
|
+
<div className="p-8">
|
|
18
|
+
<h1 className="text-2xl font-bold">Review Details</h1>
|
|
19
|
+
<p className="mt-4 text-muted-foreground">
|
|
20
|
+
Review viewing will be implemented later without user authentication dependencies.
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default ReviewView
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Review form temporarily commented out - will be reworked later
|
|
2
|
+
// User references need to be updated when reviews are re-implemented
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
Original review form content commented out to prevent build errors
|
|
6
|
+
This file will be restored and updated when the review system is reworked
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export default function ReviewForm() {
|
|
10
|
+
return <div>Review form will be implemented later</div>
|
|
11
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Review table by creator columns temporarily commented out - will be reworked later
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
Review table columns functionality temporarily disabled
|
|
5
|
+
Will be re-implemented without user dependencies
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const reviewTableByCreatorColumns = []
|
|
9
|
+
export default reviewTableByCreatorColumns
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Review table by reviewer columns temporarily commented out - will be reworked later
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
Review table columns functionality temporarily disabled
|
|
5
|
+
Will be re-implemented without user dependencies
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const reviewTableByReviewerColumns = []
|
|
9
|
+
export default reviewTableByReviewerColumns
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Reviewer reviews table temporarily commented out - will be reworked later
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
Reviewer reviews table functionality temporarily disabled
|
|
6
|
+
Will be re-implemented without user dependencies
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export default function ReviewerReviewsTable() {
|
|
10
|
+
return (
|
|
11
|
+
<div className="p-4">
|
|
12
|
+
<p className="text-muted-foreground">Reviewer reviews table will be implemented later.</p>
|
|
13
|
+
</div>
|
|
14
|
+
)
|
|
15
|
+
}
|