create-appraisejs 0.1.6 → 0.1.8-alpha
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 +45 -45
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/copy-template.d.ts +2 -1
- package/dist/copy-template.d.ts.map +1 -1
- package/dist/copy-template.js +10 -7
- package/dist/copy-template.js.map +1 -1
- package/dist/copy-template.test.js +19 -0
- package/dist/copy-template.test.js.map +1 -1
- package/package.json +69 -67
- package/templates/default/.vscode/settings.json +5 -0
- package/templates/default/appraisejs.config.json +1 -1
- package/templates/default/components.json +24 -24
- package/templates/default/cucumber.mjs +16 -0
- package/templates/default/eslint.config.mjs +15 -15
- package/templates/default/next.config.ts +13 -7
- package/templates/default/package-lock.json +13732 -14321
- package/templates/default/package.json +11 -9
- package/templates/default/postcss.config.mjs +8 -8
- package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
- package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
- package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
- package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
- package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
- package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
- package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
- package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
- package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
- package/templates/default/prisma/schema.prisma +554 -554
- package/templates/default/scripts/regenerate-features.ts +94 -94
- package/templates/default/scripts/setup-env.ts +19 -19
- package/templates/default/scripts/sync-all.ts +341 -341
- package/templates/default/scripts/sync-appraise-base-template.ts +52 -2
- package/templates/default/scripts/sync-environments.ts +323 -323
- package/templates/default/scripts/sync-locator-groups.ts +413 -413
- package/templates/default/scripts/sync-locators.ts +402 -402
- package/templates/default/scripts/sync-modules.ts +349 -349
- package/templates/default/scripts/sync-tags.ts +292 -292
- package/templates/default/scripts/sync-template-step-groups.ts +399 -399
- package/templates/default/scripts/sync-template-steps.ts +806 -806
- package/templates/default/scripts/sync-test-cases.ts +905 -905
- package/templates/default/scripts/sync-test-suites.ts +411 -411
- package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
- package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
- package/templates/default/src/actions/environments/environment-actions.ts +205 -205
- package/templates/default/src/actions/locator/locator-actions.ts +547 -547
- package/templates/default/src/actions/locator-groups/locator-group-actions.ts +344 -344
- package/templates/default/src/actions/modules/module-actions.ts +133 -133
- package/templates/default/src/actions/reports/report-actions.ts +613 -613
- package/templates/default/src/actions/review/review-actions.ts +147 -147
- package/templates/default/src/actions/tags/tag-actions.ts +104 -104
- package/templates/default/src/actions/template-step/template-step-actions.ts +332 -332
- package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +278 -278
- package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
- package/templates/default/src/actions/test-case/test-case-actions.ts +419 -419
- package/templates/default/src/actions/test-run/test-run-actions.ts +1185 -1185
- package/templates/default/src/actions/test-suite/test-suite-actions.ts +253 -253
- package/templates/default/src/actions/user/user-actions.ts +13 -13
- package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
- package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
- package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
- package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/environments/page.tsx +59 -59
- package/templates/default/src/app/(base)/layout.tsx +10 -10
- package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
- package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
- package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/locator-groups/page.tsx +61 -61
- package/templates/default/src/app/(base)/locators/create/page.tsx +38 -38
- package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
- package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -90
- package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
- package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +45 -45
- package/templates/default/src/app/(base)/locators/page.tsx +65 -65
- package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
- package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
- package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
- package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
- package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
- package/templates/default/src/app/(base)/modules/page.tsx +59 -59
- package/templates/default/src/app/(base)/reports/[id]/page.tsx +517 -517
- package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
- package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
- package/templates/default/src/app/(base)/reports/overview-chart.tsx +46 -46
- package/templates/default/src/app/(base)/reports/page.tsx +98 -98
- package/templates/default/src/app/(base)/reports/report-metric-card.tsx +16 -16
- package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
- package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
- package/templates/default/src/app/(base)/reports/report-view-table-columns.tsx +131 -131
- package/templates/default/src/app/(base)/reports/report-view-table.tsx +82 -82
- package/templates/default/src/app/(base)/reports/test-cases/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/view-logs-button.tsx +60 -60
- package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
- package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
- package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
- package/templates/default/src/app/(base)/tags/page.tsx +58 -58
- package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -147
- package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -45
- package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -167
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -32
- package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
- package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
- package/templates/default/src/app/(base)/template-steps/page.tsx +59 -59
- package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
- package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
- package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
- package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -24
- package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
- package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
- package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -84
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -262
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -76
- package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
- package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -73
- package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
- package/templates/default/src/app/(base)/test-cases/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
- package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
- package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +90 -90
- package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +35 -35
- package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +56 -56
- package/templates/default/src/app/(base)/test-runs/create/page.tsx +47 -47
- package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +508 -512
- package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
- package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
- package/templates/default/src/app/(base)/test-suites/create/page.tsx +45 -45
- package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +55 -55
- package/templates/default/src/app/(base)/test-suites/page.tsx +82 -82
- package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +269 -269
- package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +97 -97
- package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -29
- package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
- package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
- package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
- package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
- package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
- package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
- package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +133 -133
- package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +420 -420
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
- package/templates/default/src/app/globals.css +147 -147
- package/templates/default/src/app/layout.tsx +171 -171
- package/templates/default/src/app/page.tsx +64 -64
- package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/default/src/components/base-node.tsx +21 -21
- package/templates/default/src/components/chart/pie-chart.tsx +73 -73
- package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -460
- package/templates/default/src/components/data-state/empty-state.tsx +40 -40
- package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
- package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/default/src/components/devtools/providers.tsx +19 -13
- package/templates/default/src/components/diagram/button-edge.tsx +54 -54
- package/templates/default/src/components/diagram/dynamic-parameters.tsx +438 -438
- package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
- package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
- package/templates/default/src/components/diagram/node-form.tsx +262 -262
- package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
- package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
- package/templates/default/src/components/form/error-message.tsx +7 -7
- package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
- package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
- package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/default/src/components/logo.tsx +15 -15
- package/templates/default/src/components/navigation/command-badge.tsx +34 -34
- package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
- package/templates/default/src/components/navigation/entity-search-command.tsx +116 -116
- package/templates/default/src/components/navigation/nav-card.tsx +31 -31
- package/templates/default/src/components/navigation/nav-command.tsx +508 -508
- package/templates/default/src/components/navigation/nav-link.tsx +60 -60
- package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
- package/templates/default/src/components/node-header.tsx +159 -159
- package/templates/default/src/components/reports/test-case-logs-modal.tsx +253 -253
- package/templates/default/src/components/table/table-actions.tsx +172 -172
- package/templates/default/src/components/test-run/download-logs-button.tsx +99 -99
- package/templates/default/src/components/test-run/log-viewer.tsx +445 -445
- package/templates/default/src/components/test-run/test-run-details.tsx +611 -611
- package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
- package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
- package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
- package/templates/default/src/components/theme/theme-provider.tsx +8 -8
- package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/default/src/components/typography/page-header.tsx +7 -7
- package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
- package/templates/default/src/components/ui/alert.tsx +43 -43
- package/templates/default/src/components/ui/avatar.tsx +40 -40
- package/templates/default/src/components/ui/badge.tsx +29 -29
- package/templates/default/src/components/ui/button.tsx +47 -47
- package/templates/default/src/components/ui/calendar.tsx +158 -158
- package/templates/default/src/components/ui/card.tsx +43 -43
- package/templates/default/src/components/ui/checkbox.tsx +28 -28
- package/templates/default/src/components/ui/command.tsx +135 -135
- package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
- package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
- package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
- package/templates/default/src/components/ui/data-table.tsx +267 -267
- package/templates/default/src/components/ui/dialog.tsx +97 -97
- package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/src/components/ui/input.tsx +22 -22
- package/templates/default/src/components/ui/kbd.tsx +28 -28
- package/templates/default/src/components/ui/label.tsx +19 -19
- package/templates/default/src/components/ui/loading.tsx +12 -12
- package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
- package/templates/default/src/components/ui/multi-select.tsx +142 -142
- package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
- package/templates/default/src/components/ui/popover.tsx +33 -33
- package/templates/default/src/components/ui/progress.tsx +25 -25
- package/templates/default/src/components/ui/radio-group.tsx +44 -44
- package/templates/default/src/components/ui/scroll-area.tsx +40 -40
- package/templates/default/src/components/ui/select.tsx +151 -144
- package/templates/default/src/components/ui/separator.tsx +22 -22
- package/templates/default/src/components/ui/skeleton.tsx +7 -7
- package/templates/default/src/components/ui/table.tsx +76 -76
- package/templates/default/src/components/ui/tabs.tsx +55 -55
- package/templates/default/src/components/ui/textarea.tsx +21 -21
- package/templates/default/src/components/ui/toast.tsx +113 -113
- package/templates/default/src/components/ui/toaster.tsx +26 -26
- package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -87
- package/templates/default/src/config/db-config.ts +10 -10
- package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
- package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -20
- package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
- package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
- package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -23
- package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
- package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
- package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
- package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
- package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
- package/templates/default/src/constants/form-opts/test-run-form-opts.ts +31 -31
- package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
- package/templates/default/src/hooks/use-toast.ts +187 -187
- package/templates/default/src/lib/bidirectional-sync.ts +432 -432
- package/templates/default/src/lib/database-sync.ts +531 -531
- package/templates/default/src/lib/environment-file-utils.ts +221 -221
- package/templates/default/src/lib/feature-file-generator.ts +411 -411
- package/templates/default/src/lib/gherkin-parser.ts +259 -259
- package/templates/default/src/lib/locator-group-file-utils.ts +370 -370
- package/templates/default/src/lib/metrics/metric-calculator.ts +613 -613
- package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
- package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
- package/templates/default/src/lib/test-case-utils.ts +6 -6
- package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
- package/templates/default/src/lib/test-run/process-manager.ts +191 -191
- package/templates/default/src/lib/test-run/report-parser.ts +316 -316
- package/templates/default/src/lib/test-run/test-run-executor.ts +144 -144
- package/templates/default/src/lib/test-run/winston-logger.ts +95 -95
- package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
- package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/default/src/lib/utils/template-step-file-generator.ts +167 -167
- package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +723 -723
- package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
- package/templates/default/src/lib/utils.ts +31 -31
- package/templates/default/src/tests/config/executor/world.ts +41 -41
- package/templates/default/src/tests/executor.ts +80 -80
- package/templates/default/src/tests/hooks/hooks.ts +99 -99
- package/templates/default/src/tests/mapping/locator-map.json +1 -1
- package/templates/default/src/tests/steps/actions/click.step.ts +62 -62
- package/templates/default/src/tests/steps/actions/navigation.step.ts +73 -72
- package/templates/default/src/tests/steps/validations/active_state_assertion.step.ts +34 -34
- package/templates/default/src/tests/steps/validations/navigation_assertion.step.ts +24 -23
- package/templates/default/src/tests/steps/validations/text_assertion.step.ts +111 -111
- package/templates/default/src/tests/steps/validations/visibility_assertion.step.ts +30 -30
- package/templates/default/src/tests/support/parameter-types.ts +12 -12
- package/templates/default/src/tests/utils/cache.util.ts +260 -260
- package/templates/default/src/tests/utils/cli.util.ts +177 -177
- package/templates/default/src/tests/utils/environment.util.ts +65 -65
- package/templates/default/src/tests/utils/locator.util.ts +248 -248
- package/templates/default/src/tests/utils/random-data.util.ts +44 -44
- package/templates/default/src/tests/utils/spawner.util.ts +617 -617
- package/templates/default/src/types/diagram/diagram.ts +34 -34
- package/templates/default/src/types/diagram/template-step.ts +11 -11
- package/templates/default/src/types/executor/browser.type.ts +1 -1
- package/templates/default/src/types/form/actionHandler.ts +6 -6
- package/templates/default/src/types/locator/locator.type.ts +11 -11
- package/templates/default/src/types/step/step.type.ts +1 -1
- package/templates/default/src/types/table/data-table.ts +6 -6
- package/templates/default/tailwind.config.ts +62 -62
- package/templates/default/.env +0 -2
- package/templates/default/next-env.d.ts +0 -6
- package/templates/default/prisma/prisma/dev.db +0 -0
- package/templates/default/src/tests/config/environments/environments.json +0 -14
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import { DataTableColumnHeader } from '@/components/ui/data-table-column-header'
|
|
4
|
-
import { TestCase, TestCaseStep, Tag } from '@prisma/client'
|
|
5
|
-
import { ColumnDef } from '@tanstack/react-table'
|
|
6
|
-
import { Checkbox } from '@/components/ui/checkbox'
|
|
7
|
-
import { deleteTestCaseAction } from '@/actions/test-case/test-case-actions'
|
|
8
|
-
import TableActions from '@/components/table/table-actions'
|
|
9
|
-
import { formatDateTime } from '@/lib/utils'
|
|
10
|
-
import { Badge } from '@/components/ui/badge'
|
|
11
|
-
|
|
12
|
-
export const testCaseTableCols: ColumnDef<TestCase & { steps: TestCaseStep[]; tags?: Tag[] }>[] = [
|
|
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
|
-
accessorKey: 'title',
|
|
36
|
-
header: ({ column }) => <DataTableColumnHeader column={column} title="Title" />,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
accessorKey: 'description',
|
|
40
|
-
header: ({ column }) => <DataTableColumnHeader column={column} title="Description" />,
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
accessorKey: 'tags',
|
|
44
|
-
header: ({ column }) => <DataTableColumnHeader column={column} title="Tags" />,
|
|
45
|
-
cell: ({ row }) => {
|
|
46
|
-
const testCase = row.original
|
|
47
|
-
const tags = testCase.tags || []
|
|
48
|
-
return (
|
|
49
|
-
<div className="flex flex-wrap gap-1">
|
|
50
|
-
{tags.length > 0 ? tags.map(tag => <Badge key={tag.id}>{tag.name}</Badge>) : '-'}
|
|
51
|
-
</div>
|
|
52
|
-
)
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
accessorKey: 'steps',
|
|
57
|
-
header: ({ column }) => <DataTableColumnHeader column={column} title="Steps" />,
|
|
58
|
-
cell: ({ row }) => {
|
|
59
|
-
const testCase = row.original
|
|
60
|
-
return <div>{testCase.steps.length}</div>
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
accessorKey: 'createdAt',
|
|
65
|
-
header: ({ column }) => <DataTableColumnHeader column={column} title="Created At" />,
|
|
66
|
-
cell: ({ row }) => {
|
|
67
|
-
return formatDateTime(row.original.createdAt)
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
accessorKey: 'updatedAt',
|
|
72
|
-
header: ({ column }) => <DataTableColumnHeader column={column} title="Updated At" />,
|
|
73
|
-
cell: ({ row }) => {
|
|
74
|
-
return formatDateTime(row.original.updatedAt)
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: 'actions',
|
|
79
|
-
cell: ({ row }) => {
|
|
80
|
-
const testCase = row.original
|
|
81
|
-
|
|
82
|
-
return (
|
|
83
|
-
<TableActions
|
|
84
|
-
modifyLink={`/test-cases/modify/${testCase.id}`}
|
|
85
|
-
deleteHandler={() => deleteTestCaseAction([testCase.id])}
|
|
86
|
-
/>
|
|
87
|
-
)
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
]
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { DataTableColumnHeader } from '@/components/ui/data-table-column-header'
|
|
4
|
+
import { TestCase, TestCaseStep, Tag } from '@prisma/client'
|
|
5
|
+
import { ColumnDef } from '@tanstack/react-table'
|
|
6
|
+
import { Checkbox } from '@/components/ui/checkbox'
|
|
7
|
+
import { deleteTestCaseAction } from '@/actions/test-case/test-case-actions'
|
|
8
|
+
import TableActions from '@/components/table/table-actions'
|
|
9
|
+
import { formatDateTime } from '@/lib/utils'
|
|
10
|
+
import { Badge } from '@/components/ui/badge'
|
|
11
|
+
|
|
12
|
+
export const testCaseTableCols: ColumnDef<TestCase & { steps: TestCaseStep[]; tags?: Tag[] }>[] = [
|
|
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
|
+
accessorKey: 'title',
|
|
36
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Title" />,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
accessorKey: 'description',
|
|
40
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Description" />,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
accessorKey: 'tags',
|
|
44
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Tags" />,
|
|
45
|
+
cell: ({ row }) => {
|
|
46
|
+
const testCase = row.original
|
|
47
|
+
const tags = testCase.tags || []
|
|
48
|
+
return (
|
|
49
|
+
<div className="flex flex-wrap gap-1">
|
|
50
|
+
{tags.length > 0 ? tags.map(tag => <Badge key={tag.id}>{tag.name}</Badge>) : '-'}
|
|
51
|
+
</div>
|
|
52
|
+
)
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
accessorKey: 'steps',
|
|
57
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Steps" />,
|
|
58
|
+
cell: ({ row }) => {
|
|
59
|
+
const testCase = row.original
|
|
60
|
+
return <div>{testCase.steps.length}</div>
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
accessorKey: 'createdAt',
|
|
65
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Created At" />,
|
|
66
|
+
cell: ({ row }) => {
|
|
67
|
+
return formatDateTime(row.original.createdAt)
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
accessorKey: 'updatedAt',
|
|
72
|
+
header: ({ column }) => <DataTableColumnHeader column={column} title="Updated At" />,
|
|
73
|
+
cell: ({ row }) => {
|
|
74
|
+
return formatDateTime(row.original.updatedAt)
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'actions',
|
|
79
|
+
cell: ({ row }) => {
|
|
80
|
+
const testCase = row.original
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<TableActions
|
|
84
|
+
modifyLink={`/test-cases/modify/${testCase.id}`}
|
|
85
|
+
deleteHandler={() => deleteTestCaseAction([testCase.id])}
|
|
86
|
+
/>
|
|
87
|
+
)
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
]
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { deleteTestCaseAction, getAllTestCasesAction } from '@/actions/test-case/test-case-actions'
|
|
2
|
-
import { DataTable } from '@/components/ui/data-table'
|
|
3
|
-
import { TestCase, TestCaseStep } from '@prisma/client'
|
|
4
|
-
import { testCaseTableCols } from './test-case-table-columns'
|
|
5
|
-
import { Cog, LayoutPanelTop } from 'lucide-react'
|
|
6
|
-
|
|
7
|
-
export default async function TestCaseTable() {
|
|
8
|
-
const { data: testCases } = await getAllTestCasesAction()
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<>
|
|
12
|
-
<DataTable
|
|
13
|
-
columns={testCaseTableCols}
|
|
14
|
-
data={testCases as (TestCase & { steps: TestCaseStep[] })[]}
|
|
15
|
-
filterColumn="title"
|
|
16
|
-
filterPlaceholder="Filter by title..."
|
|
17
|
-
modifyLink="/test-cases/modify"
|
|
18
|
-
deleteAction={deleteTestCaseAction}
|
|
19
|
-
multiOptionCreateButton={true}
|
|
20
|
-
createButtonOptions={[
|
|
21
|
-
{
|
|
22
|
-
label: 'From Scratch',
|
|
23
|
-
link: '/test-cases/create',
|
|
24
|
-
icon: <Cog className="h-4 w-4" />,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
label: 'From Template',
|
|
28
|
-
link: '/test-cases/create-from-template',
|
|
29
|
-
icon: <LayoutPanelTop className="h-4 w-4" />,
|
|
30
|
-
},
|
|
31
|
-
]}
|
|
32
|
-
/>
|
|
33
|
-
</>
|
|
34
|
-
)
|
|
35
|
-
}
|
|
1
|
+
import { deleteTestCaseAction, getAllTestCasesAction } from '@/actions/test-case/test-case-actions'
|
|
2
|
+
import { DataTable } from '@/components/ui/data-table'
|
|
3
|
+
import { TestCase, TestCaseStep } from '@prisma/client'
|
|
4
|
+
import { testCaseTableCols } from './test-case-table-columns'
|
|
5
|
+
import { Cog, LayoutPanelTop } from 'lucide-react'
|
|
6
|
+
|
|
7
|
+
export default async function TestCaseTable() {
|
|
8
|
+
const { data: testCases } = await getAllTestCasesAction()
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<>
|
|
12
|
+
<DataTable
|
|
13
|
+
columns={testCaseTableCols}
|
|
14
|
+
data={testCases as (TestCase & { steps: TestCaseStep[] })[]}
|
|
15
|
+
filterColumn="title"
|
|
16
|
+
filterPlaceholder="Filter by title..."
|
|
17
|
+
modifyLink="/test-cases/modify"
|
|
18
|
+
deleteAction={deleteTestCaseAction}
|
|
19
|
+
multiOptionCreateButton={true}
|
|
20
|
+
createButtonOptions={[
|
|
21
|
+
{
|
|
22
|
+
label: 'From Scratch',
|
|
23
|
+
link: '/test-cases/create',
|
|
24
|
+
icon: <Cog className="h-4 w-4" />,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
label: 'From Template',
|
|
28
|
+
link: '/test-cases/create-from-template',
|
|
29
|
+
icon: <LayoutPanelTop className="h-4 w-4" />,
|
|
30
|
+
},
|
|
31
|
+
]}
|
|
32
|
+
/>
|
|
33
|
+
</>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { getTestRunByIdAction } from '@/actions/test-run/test-run-actions'
|
|
2
|
-
import { TestRunDetails } from '@/components/test-run/test-run-details'
|
|
3
|
-
import { TestRunHeader } from '@/components/test-run/test-run-header'
|
|
4
|
-
import { LogViewer } from '@/components/test-run/log-viewer'
|
|
5
|
-
import { Separator } from '@/components/ui/separator'
|
|
6
|
-
import { TestRun, TestRunTestCase, Tag, Environment, Report } from '@prisma/client'
|
|
7
|
-
import { Metadata } from 'next'
|
|
8
|
-
|
|
9
|
-
export const metadata: Metadata = {
|
|
10
|
-
title: 'Appraise | Test Run Details',
|
|
11
|
-
description: 'View test run execution details and live logs',
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface TestRunDetailPageProps {
|
|
15
|
-
params: Promise<{ id: string }>
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default async function TestRunDetailPage({ params }: TestRunDetailPageProps) {
|
|
19
|
-
const { id } = await params
|
|
20
|
-
const response = await getTestRunByIdAction(id)
|
|
21
|
-
|
|
22
|
-
if (response.error || !response.data) {
|
|
23
|
-
return (
|
|
24
|
-
<div className="flex items-center justify-center p-8">
|
|
25
|
-
<div className="text-center">
|
|
26
|
-
<h2 className="text-2xl font-bold">Test Run Not Found</h2>
|
|
27
|
-
<p className="mt-2 text-muted-foreground">
|
|
28
|
-
{response.error || 'The test run you are looking for does not exist.'}
|
|
29
|
-
</p>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// TypeScript now knows response.data is defined
|
|
36
|
-
const testRun = response.data as TestRun & {
|
|
37
|
-
testCases: (TestRunTestCase & { testCase: { title: string; description: string } })[]
|
|
38
|
-
tags: Tag[]
|
|
39
|
-
environment: Environment
|
|
40
|
-
reports: Report[]
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<>
|
|
45
|
-
<TestRunHeader initialTestRun={testRun} />
|
|
46
|
-
|
|
47
|
-
<div className="space-y-6">
|
|
48
|
-
<TestRunDetails testRun={testRun} />
|
|
49
|
-
|
|
50
|
-
<Separator />
|
|
51
|
-
|
|
52
|
-
<LogViewer testRunId={testRun.runId} status={testRun.status} />
|
|
53
|
-
</div>
|
|
54
|
-
</>
|
|
55
|
-
)
|
|
56
|
-
}
|
|
1
|
+
import { getTestRunByIdAction } from '@/actions/test-run/test-run-actions'
|
|
2
|
+
import { TestRunDetails } from '@/components/test-run/test-run-details'
|
|
3
|
+
import { TestRunHeader } from '@/components/test-run/test-run-header'
|
|
4
|
+
import { LogViewer } from '@/components/test-run/log-viewer'
|
|
5
|
+
import { Separator } from '@/components/ui/separator'
|
|
6
|
+
import { TestRun, TestRunTestCase, Tag, Environment, Report } from '@prisma/client'
|
|
7
|
+
import { Metadata } from 'next'
|
|
8
|
+
|
|
9
|
+
export const metadata: Metadata = {
|
|
10
|
+
title: 'Appraise | Test Run Details',
|
|
11
|
+
description: 'View test run execution details and live logs',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface TestRunDetailPageProps {
|
|
15
|
+
params: Promise<{ id: string }>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default async function TestRunDetailPage({ params }: TestRunDetailPageProps) {
|
|
19
|
+
const { id } = await params
|
|
20
|
+
const response = await getTestRunByIdAction(id)
|
|
21
|
+
|
|
22
|
+
if (response.error || !response.data) {
|
|
23
|
+
return (
|
|
24
|
+
<div className="flex items-center justify-center p-8">
|
|
25
|
+
<div className="text-center">
|
|
26
|
+
<h2 className="text-2xl font-bold">Test Run Not Found</h2>
|
|
27
|
+
<p className="mt-2 text-muted-foreground">
|
|
28
|
+
{response.error || 'The test run you are looking for does not exist.'}
|
|
29
|
+
</p>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// TypeScript now knows response.data is defined
|
|
36
|
+
const testRun = response.data as TestRun & {
|
|
37
|
+
testCases: (TestRunTestCase & { testCase: { title: string; description: string } })[]
|
|
38
|
+
tags: Tag[]
|
|
39
|
+
environment: Environment
|
|
40
|
+
reports: Report[]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<>
|
|
45
|
+
<TestRunHeader initialTestRun={testRun} />
|
|
46
|
+
|
|
47
|
+
<div className="space-y-6">
|
|
48
|
+
<TestRunDetails testRun={testRun} />
|
|
49
|
+
|
|
50
|
+
<Separator />
|
|
51
|
+
|
|
52
|
+
<LogViewer testRunId={testRun.runId} status={testRun.status} />
|
|
53
|
+
</div>
|
|
54
|
+
</>
|
|
55
|
+
)
|
|
56
|
+
}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { createTestRunAction, getAllTestSuiteTestCasesAction } from '@/actions/test-run/test-run-actions'
|
|
2
|
-
import PageHeader from '@/components/typography/page-header'
|
|
3
|
-
import HeaderSubtitle from '@/components/typography/page-header-subtitle'
|
|
4
|
-
import { Environment, Tag, TestCase, TestSuite } from '@prisma/client'
|
|
5
|
-
import React from 'react'
|
|
6
|
-
import TestRunForm from '../test-run-form'
|
|
7
|
-
import { getAllEnvironmentsAction } from '@/actions/environments/environment-actions'
|
|
8
|
-
import { getAllTagsAction } from '@/actions/tags/tag-actions'
|
|
9
|
-
import { Metadata } from 'next'
|
|
10
|
-
|
|
11
|
-
export const metadata: Metadata = {
|
|
12
|
-
title: 'Appraise | Create Test Run',
|
|
13
|
-
description: 'Create a new test run to execute your test cases',
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const CreateTestRun = async () => {
|
|
17
|
-
const { data: testSuiteTestCases, error: testSuiteTestCasesError } = await getAllTestSuiteTestCasesAction()
|
|
18
|
-
const { data: environments, error: environmentsError } = await getAllEnvironmentsAction()
|
|
19
|
-
const { data: tags, error: tagsError } = await getAllTagsAction()
|
|
20
|
-
|
|
21
|
-
if (testSuiteTestCasesError || environmentsError || tagsError) {
|
|
22
|
-
return <div>Error: {testSuiteTestCasesError || environmentsError || tagsError}</div>
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const testSuiteTestCasesData = testSuiteTestCases as (TestSuite & { testCases: TestCase[] })[]
|
|
26
|
-
const environmentsData = environments as Environment[]
|
|
27
|
-
const tagsData = tags as Tag[]
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<>
|
|
31
|
-
<div className="mb-8">
|
|
32
|
-
<PageHeader>Create Test Run</PageHeader>
|
|
33
|
-
<HeaderSubtitle>Create a new test run to execute your test cases</HeaderSubtitle>
|
|
34
|
-
</div>
|
|
35
|
-
<TestRunForm
|
|
36
|
-
testSuiteTestCases={testSuiteTestCasesData}
|
|
37
|
-
environments={environmentsData}
|
|
38
|
-
tags={tagsData}
|
|
39
|
-
onSubmitAction={createTestRunAction}
|
|
40
|
-
successTitle="Test Run Created"
|
|
41
|
-
successMessage="The test run has been created successfully"
|
|
42
|
-
/>
|
|
43
|
-
</>
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export default CreateTestRun
|
|
1
|
+
import { createTestRunAction, getAllTestSuiteTestCasesAction } from '@/actions/test-run/test-run-actions'
|
|
2
|
+
import PageHeader from '@/components/typography/page-header'
|
|
3
|
+
import HeaderSubtitle from '@/components/typography/page-header-subtitle'
|
|
4
|
+
import { Environment, Tag, TestCase, TestSuite } from '@prisma/client'
|
|
5
|
+
import React from 'react'
|
|
6
|
+
import TestRunForm from '../test-run-form'
|
|
7
|
+
import { getAllEnvironmentsAction } from '@/actions/environments/environment-actions'
|
|
8
|
+
import { getAllTagsAction } from '@/actions/tags/tag-actions'
|
|
9
|
+
import { Metadata } from 'next'
|
|
10
|
+
|
|
11
|
+
export const metadata: Metadata = {
|
|
12
|
+
title: 'Appraise | Create Test Run',
|
|
13
|
+
description: 'Create a new test run to execute your test cases',
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const CreateTestRun = async () => {
|
|
17
|
+
const { data: testSuiteTestCases, error: testSuiteTestCasesError } = await getAllTestSuiteTestCasesAction()
|
|
18
|
+
const { data: environments, error: environmentsError } = await getAllEnvironmentsAction()
|
|
19
|
+
const { data: tags, error: tagsError } = await getAllTagsAction()
|
|
20
|
+
|
|
21
|
+
if (testSuiteTestCasesError || environmentsError || tagsError) {
|
|
22
|
+
return <div>Error: {testSuiteTestCasesError || environmentsError || tagsError}</div>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const testSuiteTestCasesData = testSuiteTestCases as (TestSuite & { testCases: TestCase[] })[]
|
|
26
|
+
const environmentsData = environments as Environment[]
|
|
27
|
+
const tagsData = tags as Tag[]
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<>
|
|
31
|
+
<div className="mb-8">
|
|
32
|
+
<PageHeader>Create Test Run</PageHeader>
|
|
33
|
+
<HeaderSubtitle>Create a new test run to execute your test cases</HeaderSubtitle>
|
|
34
|
+
</div>
|
|
35
|
+
<TestRunForm
|
|
36
|
+
testSuiteTestCases={testSuiteTestCasesData}
|
|
37
|
+
environments={environmentsData}
|
|
38
|
+
tags={tagsData}
|
|
39
|
+
onSubmitAction={createTestRunAction}
|
|
40
|
+
successTitle="Test Run Created"
|
|
41
|
+
successMessage="The test run has been created successfully"
|
|
42
|
+
/>
|
|
43
|
+
</>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export default CreateTestRun
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import DataTableSkeleton from '@/components/loading-skeleton/data-table/data-table-skeleton'
|
|
2
|
-
import PageHeader from '@/components/typography/page-header'
|
|
3
|
-
import HeaderSubtitle from '@/components/typography/page-header-subtitle'
|
|
4
|
-
import { ListChecks } from 'lucide-react'
|
|
5
|
-
import React, { Suspense } from 'react'
|
|
6
|
-
import TestRunTable from './test-run-table'
|
|
7
|
-
import { getAllTestRunsAction } from '@/actions/test-run/test-run-actions'
|
|
8
|
-
import EmptyState from '@/components/data-state/empty-state'
|
|
9
|
-
import { Environment, Tag, TestRun, TestRunTestCase } from '@prisma/client'
|
|
10
|
-
import { Metadata } from 'next'
|
|
11
|
-
|
|
12
|
-
export const metadata: Metadata = {
|
|
13
|
-
title: 'Appraise | Test Runs',
|
|
14
|
-
description: 'Manage test runs and their execution results',
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const TestRuns = async ({searchParams}: {searchParams: Promise<{filter?: string}>}) => {
|
|
18
|
-
const resolvedSearchParams = await searchParams
|
|
19
|
-
const filter = resolvedSearchParams?.filter
|
|
20
|
-
const { data: testRuns, error: testRunsError } = await getAllTestRunsAction(filter)
|
|
21
|
-
|
|
22
|
-
if (testRunsError) {
|
|
23
|
-
return <div>Error: {testRunsError}</div>
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const testRunsData = testRuns as (TestRun & { testCases: TestRunTestCase[]; tags: Tag[]; environment: Environment })[]
|
|
27
|
-
|
|
28
|
-
if (!testRunsData || testRunsData.length === 0) {
|
|
29
|
-
return (
|
|
30
|
-
<div className="flex min-h-[calc(100vh-20rem)] items-center justify-center">
|
|
31
|
-
<EmptyState
|
|
32
|
-
icon={<ListChecks className="h-8 w-8" />}
|
|
33
|
-
title="No test runs found"
|
|
34
|
-
description="Get started by creating a test run to execute your test cases"
|
|
35
|
-
createRoute="/test-runs/create"
|
|
36
|
-
createText="Create Test Run"
|
|
37
|
-
/>
|
|
38
|
-
</div>
|
|
39
|
-
)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<>
|
|
44
|
-
<div className="mb-8">
|
|
45
|
-
<PageHeader>
|
|
46
|
-
<span className="flex items-center">
|
|
47
|
-
<ListChecks className="mr-2 h-8 w-8" />
|
|
48
|
-
Test Runs
|
|
49
|
-
</span>
|
|
50
|
-
</PageHeader>
|
|
51
|
-
<HeaderSubtitle>Test runs are the runs of the test cases.</HeaderSubtitle>
|
|
52
|
-
</div>
|
|
53
|
-
<Suspense fallback={<DataTableSkeleton />}>
|
|
54
|
-
<TestRunTable initialData={testRunsData} filter={filter as 'recentFailed' | 'all'} />
|
|
55
|
-
</Suspense>
|
|
56
|
-
</>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export default TestRuns
|
|
1
|
+
import DataTableSkeleton from '@/components/loading-skeleton/data-table/data-table-skeleton'
|
|
2
|
+
import PageHeader from '@/components/typography/page-header'
|
|
3
|
+
import HeaderSubtitle from '@/components/typography/page-header-subtitle'
|
|
4
|
+
import { ListChecks } from 'lucide-react'
|
|
5
|
+
import React, { Suspense } from 'react'
|
|
6
|
+
import TestRunTable from './test-run-table'
|
|
7
|
+
import { getAllTestRunsAction } from '@/actions/test-run/test-run-actions'
|
|
8
|
+
import EmptyState from '@/components/data-state/empty-state'
|
|
9
|
+
import { Environment, Tag, TestRun, TestRunTestCase } from '@prisma/client'
|
|
10
|
+
import { Metadata } from 'next'
|
|
11
|
+
|
|
12
|
+
export const metadata: Metadata = {
|
|
13
|
+
title: 'Appraise | Test Runs',
|
|
14
|
+
description: 'Manage test runs and their execution results',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const TestRuns = async ({searchParams}: {searchParams: Promise<{filter?: string}>}) => {
|
|
18
|
+
const resolvedSearchParams = await searchParams
|
|
19
|
+
const filter = resolvedSearchParams?.filter
|
|
20
|
+
const { data: testRuns, error: testRunsError } = await getAllTestRunsAction(filter)
|
|
21
|
+
|
|
22
|
+
if (testRunsError) {
|
|
23
|
+
return <div>Error: {testRunsError}</div>
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const testRunsData = testRuns as (TestRun & { testCases: TestRunTestCase[]; tags: Tag[]; environment: Environment })[]
|
|
27
|
+
|
|
28
|
+
if (!testRunsData || testRunsData.length === 0) {
|
|
29
|
+
return (
|
|
30
|
+
<div className="flex min-h-[calc(100vh-20rem)] items-center justify-center">
|
|
31
|
+
<EmptyState
|
|
32
|
+
icon={<ListChecks className="h-8 w-8" />}
|
|
33
|
+
title="No test runs found"
|
|
34
|
+
description="Get started by creating a test run to execute your test cases"
|
|
35
|
+
createRoute="/test-runs/create"
|
|
36
|
+
createText="Create Test Run"
|
|
37
|
+
/>
|
|
38
|
+
</div>
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<>
|
|
44
|
+
<div className="mb-8">
|
|
45
|
+
<PageHeader>
|
|
46
|
+
<span className="flex items-center">
|
|
47
|
+
<ListChecks className="mr-2 h-8 w-8" />
|
|
48
|
+
Test Runs
|
|
49
|
+
</span>
|
|
50
|
+
</PageHeader>
|
|
51
|
+
<HeaderSubtitle>Test runs are the runs of the test cases.</HeaderSubtitle>
|
|
52
|
+
</div>
|
|
53
|
+
<Suspense fallback={<DataTableSkeleton />}>
|
|
54
|
+
<TestRunTable initialData={testRunsData} filter={filter as 'recentFailed' | 'all'} />
|
|
55
|
+
</Suspense>
|
|
56
|
+
</>
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default TestRuns
|