diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd084447..050b7103 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,7 +66,7 @@ jobs: working-directory: packages/api - name: Install CLI dependencies - run: pnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile --ignore-scripts working-directory: cli - name: Run CLI unit tests diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md deleted file mode 100644 index e5d4a4b6..00000000 --- a/.planning/REQUIREMENTS.md +++ /dev/null @@ -1,135 +0,0 @@ -# Requirements: Copy/Move Test Cases Between Projects - -**Defined:** 2026-03-20 -**Core Value:** Teams can plan, execute, and track testing across manual and automated workflows in one place — with AI assistance to reduce repetitive work. -**Issue:** GitHub #79 - -## v0.17.0 Requirements - -Requirements for cross-project test case copy/move. Each maps to roadmap phases. - -### Dialog & Selection - -- [x] **DLGSEL-01**: User can select one or more test cases and choose "Copy/Move to Project" from context menu -- [x] **DLGSEL-02**: User can select "Copy/Move to Project" from bulk actions toolbar -- [ ] **DLGSEL-03**: User can pick a target project from a list filtered to projects they have write access to -- [ ] **DLGSEL-04**: User can pick a target folder in the destination project via folder picker -- [ ] **DLGSEL-05**: User can choose between Move (removes from source) or Copy (leaves source unchanged) operation -- [ ] **DLGSEL-06**: User sees a pre-flight collision check and can resolve naming conflicts before any writes begin - -### Data Carry-Over - -- [x] **DATA-01**: Copied/moved cases carry over all steps to the target project -- [x] **DATA-02**: Copied/moved cases carry over custom field values to the target project -- [x] **DATA-03**: Copied/moved cases carry over tags to the target project -- [x] **DATA-04**: Copied/moved cases carry over issue links to the target project -- [x] **DATA-05**: Copied/moved cases carry over attachments by URL reference (no re-upload) -- [x] **DATA-06**: Moved cases preserve their full version history in the target project -- [x] **DATA-07**: Copied cases start at version 1 with fresh version history -- [x] **DATA-08**: Shared step groups are recreated in the target project so steps remain shared -- [x] **DATA-09**: User is prompted when a shared step group name already exists in the target — reuse existing or create new - -### Compatibility - -- [x] **COMPAT-01**: User sees a warning if source and target projects use different templates -- [x] **COMPAT-02**: Admin/Project Admin users can auto-assign missing templates to the target project (enabled by default) -- [x] **COMPAT-03**: If a test case uses a workflow state not in the target project, user can associate missing states with the target -- [x] **COMPAT-04**: Non-admin users see a warning that cases with unmatched workflow states will use the target project's default state - -### Bulk Operations - -- [x] **BULK-01**: Bulk copy/move of 100+ cases is processed asynchronously via BullMQ with progress polling -- [x] **BULK-02**: User sees a progress indicator during bulk operations -- [x] **BULK-03**: User can cancel an in-flight bulk operation -- [x] **BULK-04**: Per-case errors are reported to the user after operation completes - -### Entry Points - -- [x] **ENTRY-01**: Copy/Move to Project button appears between Create Test Run and Export in the repository toolbar -- [x] **ENTRY-02**: Copy/Move to Project option appears in the test case context menu (right-click) -- [x] **ENTRY-03**: Copy/Move to Project appears as an action in the bulk edit modal footer - -### Documentation - -- [x] **DOCS-01**: User-facing documentation covers copy/move workflow, template/workflow handling, and conflict resolution - -### Testing - -- [x] **TEST-01**: E2E tests verify copy and move operations end-to-end including data carry-over -- [x] **TEST-02**: E2E tests verify template compatibility warnings and workflow state mapping -- [x] **TEST-03**: Unit tests verify the copy/move worker logic including error handling and partial failure recovery -- [x] **TEST-04**: Unit tests verify shared step group recreation and collision handling - -### Folder Tree - -- [x] **TREE-01**: User can right-click a folder and choose Copy/Move to copy/move the entire folder tree with all contained cases -- [x] **TREE-02**: Folder hierarchy is recreated in the target project preserving parent-child structure -- [x] **TREE-03**: All cases within the folder tree are processed with the same compatibility handling (templates, workflows, collisions) -- [x] **TREE-04**: User can choose to merge into an existing folder or create the tree fresh in the target - -## Future Requirements - -None — this is a self-contained feature per issue #79. - -## Out of Scope - -| Feature | Reason | -| ------- | ------ | -| Shared/cross-project test case library | Fundamentally different architecture, out of scope per issue #79 | -| Per-user template preferences | Not in issue #79 | -| Cross-project linked case references | Cases linked to cases not in target are dropped | -| Drag-and-drop cross-project move from TreeView | UX enhancement for v0.17.x | -| Per-case rename on conflict | Batch strategy (skip/rename/overwrite) is sufficient for v0.17.0 | - -## Traceability - -Which phases cover which requirements. Updated during roadmap creation. - -| Requirement | Phase | Status | -|-------------|-------|---------| -| DLGSEL-01 | 31 | Complete | -| DLGSEL-02 | 31 | Complete | -| DLGSEL-03 | 30 | Pending | -| DLGSEL-04 | 30 | Pending | -| DLGSEL-05 | 30 | Pending | -| DLGSEL-06 | 30 | Pending | -| DATA-01 | 28 | Complete | -| DATA-02 | 28 | Complete | -| DATA-03 | 28 | Complete | -| DATA-04 | 28 | Complete | -| DATA-05 | 28 | Complete | -| DATA-06 | 28 | Complete | -| DATA-07 | 28 | Complete | -| DATA-08 | 28 | Complete | -| DATA-09 | 28 | Complete | -| COMPAT-01 | 29 | Complete | -| COMPAT-02 | 29 | Complete | -| COMPAT-03 | 29 | Complete | -| COMPAT-04 | 29 | Complete | -| BULK-01 | 29 | Complete | -| BULK-02 | 30 | Complete | -| BULK-03 | 29 | Complete | -| BULK-04 | 30 | Complete | -| ENTRY-01 | 31 | Complete | -| ENTRY-02 | 31 | Complete | -| ENTRY-03 | 31 | Complete | -| DOCS-01 | 32 | Complete | -| TEST-01 | 32 | Complete | -| TEST-02 | 32 | Complete | -| TEST-03 | 32 | Complete | -| TEST-04 | 32 | Complete | -| TREE-01 | 33 | Complete | -| TREE-02 | 33 | Complete | -| TREE-03 | 33 | Complete | -| TREE-04 | 33 | Complete | - -**Coverage:** - -- v0.17.0 requirements: 35 total -- Mapped to phases: 35 -- Unmapped: 0 ✓ - ---- - -*Requirements defined: 2026-03-20* -*Last updated: 2026-03-20 after adding Phase 33 (Folder Tree Copy/Move)* diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index cbf18dd9..7b719e0f 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -4,9 +4,9 @@ - ✅ **v1.0 AI Bulk Auto-Tagging** - Phases 1-4 (shipped 2026-03-08) - ✅ **v1.1 ZenStack Upgrade Regression Tests** - Phases 5-8 (shipped 2026-03-17) -- 📋 **v2.0 Comprehensive Test Coverage** - Phases 9-24 (planned) +- ✅ **v2.0 Comprehensive Test Coverage** - Phases 9-24 (shipped 2026-03-21) - ✅ **v2.1 Per-Project Export Template Assignment** - Phases 25-27 (shipped 2026-03-19) -- 🚧 **v0.17.0 Copy/Move Test Cases Between Projects** - Phases 28-32 (in progress) +- ✅ **v0.17.0 Copy/Move Test Cases Between Projects** - Phases 28-33 (shipped 2026-03-21) ## Phases @@ -30,503 +30,53 @@ -### 📋 v2.0 Comprehensive Test Coverage (Phases 9-24) +
+✅ v2.0 Comprehensive Test Coverage (Phases 9-24) - SHIPPED 2026-03-21 + +- [x] **Phase 9: Authentication E2E and API Tests** - All auth flows and API token behavior verified +- [x] **Phase 10: Test Case Repository E2E Tests** - All repository workflows verified end-to-end +- [x] **Phase 11: Repository Components and Hooks** - Repository UI components and hooks tested +- [x] **Phase 12: Test Execution E2E Tests** - Test run creation and execution workflows verified +- [x] **Phase 13: Run Components, Sessions E2E, and Session Components** - Run UI and session workflows verified +- [x] **Phase 14: Project Management E2E and Components** - Project workflows verified with component coverage +- [x] **Phase 15: AI Feature E2E and API Tests** - AI features verified with mocked LLM +- [x] **Phase 16: AI Component Tests** - AI UI components tested with all states +- [x] **Phase 17: Administration E2E Tests** - All admin workflows verified end-to-end +- [x] **Phase 18: Administration Component Tests** - Admin UI components tested +- [x] **Phase 19: Reporting E2E and Component Tests** - Reporting and analytics verified +- [x] **Phase 20: Search E2E and Component Tests** - Search functionality verified +- [x] **Phase 21: Integrations E2E, Components, and API Tests** - Integration workflows verified +- [x] **Phase 22: Custom API Route Tests** - All custom API endpoints verified +- [x] **Phase 23: General Components** - Shared UI components tested +- [x] **Phase 24: Hooks, Notifications, and Workers** - Hooks, notifications, and workers tested -- [x] **Phase 9: Authentication E2E and API Tests** - All auth flows and API token behavior verified (completed 2026-03-19) -- [ ] **Phase 10: Test Case Repository E2E Tests** - All repository workflows verified end-to-end -- [ ] **Phase 11: Repository Components and Hooks** - Repository UI components and hooks tested with edge cases -- [ ] **Phase 12: Test Execution E2E Tests** - Test run creation and execution workflows verified -- [ ] **Phase 13: Run Components, Sessions E2E, and Session Components** - Run UI components and session workflows verified -- [ ] **Phase 14: Project Management E2E and Components** - Project workflows verified with component coverage -- [ ] **Phase 15: AI Feature E2E and API Tests** - AI features verified end-to-end and via API with mocked LLM -- [ ] **Phase 16: AI Component Tests** - AI UI components tested with all states and mocked data -- [ ] **Phase 17: Administration E2E Tests** - All admin management workflows verified end-to-end -- [ ] **Phase 18: Administration Component Tests** - Admin UI components tested with all states -- [ ] **Phase 19: Reporting E2E and Component Tests** - Reporting and analytics verified with component coverage -- [ ] **Phase 20: Search E2E and Component Tests** - Search functionality verified end-to-end and via components -- [ ] **Phase 21: Integrations E2E, Components, and API Tests** - Integration workflows verified across all layers -- [ ] **Phase 22: Custom API Route Tests** - All custom API endpoints verified with auth and error handling -- [ ] **Phase 23: General Components** - Shared UI components tested with edge cases and accessibility -- [ ] **Phase 24: Hooks, Notifications, and Workers** - Custom hooks, notification flows, and workers unit tested +
✅ v2.1 Per-Project Export Template Assignment (Phases 25-27) - SHIPPED 2026-03-19 -- [x] **Phase 25: Default Template Schema** - Project model extended with optional default export template relation (completed 2026-03-19) -- [x] **Phase 26: Admin Assignment UI** - Admin can assign, unassign, and set a default export template per project (completed 2026-03-19) -- [x] **Phase 27: Export Dialog Filtering** - Export dialog shows only project-assigned templates with project default pre-selected (completed 2026-03-19) +- [x] **Phase 25: Default Template Schema** - Project model extended with optional default export template relation +- [x] **Phase 26: Admin Assignment UI** - Admin can assign, unassign, and set a default export template per project +- [x] **Phase 27: Export Dialog Filtering** - Export dialog shows only project-assigned templates with project default pre-selected
-### 🚧 v0.17.0 Copy/Move Test Cases Between Projects (Phases 28-32) +
+✅ v0.17.0 Copy/Move Test Cases Between Projects (Phases 28-33) - SHIPPED 2026-03-21 -**Milestone Goal:** Users can move or copy test cases directly between projects without export/import cycles, with intelligent handling of templates, workflows, and bulk operations. +- [x] **Phase 28: Queue and Worker** - BullMQ worker processes copy/move jobs with full data carry-over +- [x] **Phase 29: API Endpoints and Access Control** - Pre-flight checks, compatibility resolution, job management +- [x] **Phase 30: Dialog UI and Polling** - Multi-step dialog with progress tracking and collision resolution +- [x] **Phase 31: Entry Points** - Copy/Move wired into context menu, bulk toolbar, repository toolbar +- [x] **Phase 32: Testing and Documentation** - E2E, unit tests, and user documentation +- [x] **Phase 33: Folder Tree Copy/Move** - Copy/move entire folder hierarchies with content -- [x] **Phase 28: Queue and Worker** - BullMQ worker processes copy/move jobs with full data carry-over (completed 2026-03-20) -- [x] **Phase 29: API Endpoints and Access Control** - Pre-flight checks, compatibility resolution, and job management endpoints (completed 2026-03-20) -- [x] **Phase 30: Dialog UI and Polling** - Multi-step copy/move dialog with progress tracking and collision resolution (completed 2026-03-20) -- [x] **Phase 31: Entry Points** - Copy/Move action wired into context menu, bulk toolbar, and repository toolbar (completed 2026-03-20) -- [x] **Phase 32: Testing and Documentation** - E2E, unit tests, and user documentation covering the full feature (completed 2026-03-20) +
## Phase Details -### Phase 9: Authentication E2E and API Tests -**Goal**: All authentication flows are verified end-to-end and API token behavior is confirmed -**Depends on**: Phase 8 (v1.1 complete) -**Requirements**: AUTH-01, AUTH-02, AUTH-03, AUTH-04, AUTH-05, AUTH-06, AUTH-07, AUTH-08 -**Success Criteria** (what must be TRUE): - - 1. E2E test passes for sign-in/sign-out with valid credentials and correctly rejects invalid credentials - 2. E2E test passes for the complete sign-up flow including email verification - 3. E2E test passes for 2FA (setup, code entry, backup code recovery) with mocked authenticator - 4. E2E tests pass for magic link, SSO (Google/Microsoft/SAML), and password change with session persistence - 5. Component tests pass for all auth pages covering error states, and API tests confirm token auth, creation, revocation, and scope enforcement -**Plans:** 4/4 plans complete - -Plans: -- [ ] 09-01-PLAN.md -- Sign-in/sign-out and sign-up with email verification E2E tests -- [ ] 09-02-PLAN.md -- 2FA, SSO, magic link, and password change E2E tests -- [ ] 09-03-PLAN.md -- Auth page component tests (signin, signup, 2FA setup, 2FA verify) -- [ ] 09-04-PLAN.md -- API token authentication, creation, revocation, and scope tests - -### Phase 10: Test Case Repository E2E Tests -**Goal**: All test case repository workflows are verified end-to-end -**Depends on**: Phase 9 -**Requirements**: REPO-01, REPO-02, REPO-03, REPO-04, REPO-05, REPO-06, REPO-07, REPO-08, REPO-09, REPO-10 -**Success Criteria** (what must be TRUE): - - 1. E2E tests pass for test case CRUD including all custom field types (text, select, date, user, etc.) - 2. E2E tests pass for folder operations including create, rename, move, delete, and nested hierarchies - 3. E2E tests pass for bulk operations (multi-select, bulk edit, bulk delete, bulk move to folder) - 4. E2E tests pass for search/filter (text search, custom field filters, tag filters, state filters) and import/export (CSV, JSON, markdown) - 5. E2E tests pass for shared steps, version history, tag management, issue linking, and drag-and-drop reordering -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 11: Repository Components and Hooks -**Goal**: Test case repository UI components and data hooks are fully tested with edge cases -**Depends on**: Phase 10 -**Requirements**: REPO-11, REPO-12, REPO-13, REPO-14 -**Success Criteria** (what must be TRUE): - - 1. Component tests pass for the test case editor covering TipTap rich text, custom fields, steps, and attachment uploads - 2. Component tests pass for the repository table covering sorting, pagination, column visibility, and view switching - 3. Component tests pass for folder tree, breadcrumbs, and navigation with empty and nested states - 4. Hook tests pass for useRepositoryCasesWithFilteredFields, field hooks, and filter hooks with mock data -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 12: Test Execution E2E Tests -**Goal**: All test run creation and execution workflows are verified end-to-end -**Depends on**: Phase 10 -**Requirements**: RUN-01, RUN-02, RUN-03, RUN-04, RUN-05, RUN-06 -**Success Criteria** (what must be TRUE): - - 1. E2E test passes for the test run creation wizard (name, milestone, configuration group, case selection) - 2. E2E test passes for step-by-step case execution including result recording, status updates, and attachments - 3. E2E test passes for bulk status updates and case assignment across multiple cases in a run - 4. E2E test passes for run completion workflow with status enforcement and multi-configuration test runs - 5. E2E test passes for test result import via API (JUnit XML format) -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 13: Run Components, Sessions E2E, and Session Components -**Goal**: Test run UI components and all exploratory session workflows are verified -**Depends on**: Phase 12 -**Requirements**: RUN-07, RUN-08, RUN-09, RUN-10, SESS-01, SESS-02, SESS-03, SESS-04, SESS-05, SESS-06 -**Success Criteria** (what must be TRUE): - - 1. Component tests pass for test run detail view (case list, execution panel, result recording) including TestRunCaseDetails and TestResultHistory - 2. Component tests pass for MagicSelectButton/Dialog with mocked LLM responses covering success, loading, and error states - 3. E2E tests pass for session creation with template, configuration, and milestone selection - 4. E2E tests pass for session execution (add results with status/notes/attachments) and session completion with summary view - 5. Component and hook tests pass for SessionResultForm, SessionResultsList, CompleteSessionDialog, and session hooks -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 14: Project Management E2E and Components -**Goal**: All project management workflows are verified end-to-end with component coverage -**Depends on**: Phase 9 -**Requirements**: PROJ-01, PROJ-02, PROJ-03, PROJ-04, PROJ-05, PROJ-06, PROJ-07, PROJ-08, PROJ-09 -**Success Criteria** (what must be TRUE): - - 1. E2E test passes for the 5-step project creation wizard (name, description, template, members, configurations) - 2. E2E tests pass for project settings (general, integrations, AI models, quickscript, share links) - 3. E2E tests pass for milestone CRUD (create, edit, nest, complete, cascade delete) and project documentation editor with mocked AI writing assistant - 4. E2E tests pass for member management (add, remove, role changes) and project overview dashboard (stats, activity, assignments) - 5. Component and hook tests pass for ProjectCard, ProjectMenu, milestone components, and project permission hooks -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 15: AI Feature E2E and API Tests -**Goal**: All AI-powered features are verified end-to-end and via API with mocked LLM providers -**Depends on**: Phase 9 -**Requirements**: AI-01, AI-02, AI-03, AI-04, AI-05, AI-08, AI-09 -**Success Criteria** (what must be TRUE): - - 1. E2E test passes for AI test case generation wizard (source input, template, configure, review) with mocked LLM - 2. E2E test passes for auto-tag flow (configure, analyze, review suggestions, apply) with mocked LLM - 3. E2E test passes for magic select in test runs and QuickScript generation with mocked LLM - 4. E2E test passes for writing assistant in TipTap editor with mocked LLM - 5. API tests pass for all LLM and auto-tag endpoints (generate-test-cases, magic-select, chat, parse-markdown, submit, status, cancel, apply) -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 16: AI Component Tests -**Goal**: All AI feature UI components are tested with edge cases and mocked data -**Depends on**: Phase 15 -**Requirements**: AI-06, AI-07 -**Success Criteria** (what must be TRUE): - - 1. Component tests pass for AutoTagWizardDialog, AutoTagReviewDialog, AutoTagProgress, and TagChip covering all states (loading, empty, error, success) - 2. Component tests pass for QuickScript dialog, template selector, and AI preview pane with mocked LLM responses -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 17: Administration E2E Tests -**Goal**: All admin management workflows are verified end-to-end -**Depends on**: Phase 9 -**Requirements**: ADM-01, ADM-02, ADM-03, ADM-04, ADM-05, ADM-06, ADM-07, ADM-08, ADM-09, ADM-10, ADM-11 -**Success Criteria** (what must be TRUE): - - 1. E2E tests pass for user management (list, edit, deactivate, reset 2FA, revoke API keys) and group management (create, edit, assign users, assign to projects) - 2. E2E tests pass for role management (create, edit permissions per area) and SSO configuration (add/edit providers, force SSO, email domain restrictions) - 3. E2E tests pass for workflow management (create, edit, reorder states) and status management (create, edit flags, scope assignment) - 4. E2E tests pass for configuration management (categories, variants, groups) and audit log (view, filter, CSV export) - 5. E2E tests pass for Elasticsearch admin (settings, reindex), LLM integration management, and app config management -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 18: Administration Component Tests -**Goal**: Admin UI components are tested with all states and form interactions -**Depends on**: Phase 17 -**Requirements**: ADM-12, ADM-13 -**Success Criteria** (what must be TRUE): - - 1. Component tests pass for QueueManagement, ElasticsearchAdmin, and audit log viewer covering loading, empty, error, and populated states - 2. Component tests pass for user edit form, group edit form, and role permissions matrix covering validation and error states -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 19: Reporting E2E and Component Tests -**Goal**: All reporting and analytics workflows are verified with component coverage -**Depends on**: Phase 9 -**Requirements**: RPT-01, RPT-02, RPT-03, RPT-04, RPT-05, RPT-06, RPT-07, RPT-08 -**Success Criteria** (what must be TRUE): - - 1. E2E test passes for the report builder (create report, select dimensions/metrics, generate chart) - 2. E2E tests pass for pre-built reports (automation trends, flaky tests, test case health, issue coverage) and report drill-down/filtering - 3. E2E tests pass for share links (create, access public/password-protected/authenticated) and forecasting (milestone forecast, duration estimates) - 4. Component tests pass for ReportBuilder, ReportChart, DrillDownDrawer, and ReportFilters with all data states - 5. Component tests pass for all chart types (donut, gantt, bubble, sunburst, line, bar) and share link components (ShareDialog, PasswordGate, SharedReportViewer) -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 20: Search E2E and Component Tests -**Goal**: All search functionality is verified end-to-end with component coverage -**Depends on**: Phase 9 -**Requirements**: SRCH-01, SRCH-02, SRCH-03, SRCH-04, SRCH-05 -**Success Criteria** (what must be TRUE): - - 1. E2E test passes for global search (Cmd+K, cross-entity results, result navigation to correct page) - 2. E2E tests pass for advanced search operators (exact phrase, required/excluded terms, wildcards, field:value syntax) - 3. E2E test passes for faceted search filters (custom field values, tags, states, date ranges) - 4. Component tests pass for UnifiedSearch, GlobalSearchSheet, search result components, and FacetedSearchFilters with all data states - 5. Component tests pass for result display components (CustomFieldDisplay, DateTimeDisplay, UserDisplay) covering all field types -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 21: Integrations E2E, Components, and API Tests -**Goal**: All third-party integration workflows are verified end-to-end with component and API coverage -**Depends on**: Phase 9 -**Requirements**: INTG-01, INTG-02, INTG-03, INTG-04, INTG-05, INTG-06 -**Success Criteria** (what must be TRUE): - - 1. E2E tests pass for issue tracker setup (Jira, GitHub, Azure DevOps) and issue operations (create, link, sync status) with mocked APIs - 2. E2E test passes for code repository setup and QuickScript file context with mocked APIs - 3. Component tests pass for UnifiedIssueManager, CreateIssueDialog, SearchIssuesDialog, and integration configuration forms - 4. API tests pass for integration endpoints (test-connection, create-issue, search, sync) with mocked external services -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 22: Custom API Route Tests -**Goal**: All custom API endpoints are verified with correct behavior, auth enforcement, and error handling -**Depends on**: Phase 9 -**Requirements**: CAPI-01, CAPI-02, CAPI-03, CAPI-04, CAPI-05, CAPI-06, CAPI-07, CAPI-08, CAPI-09, CAPI-10 -**Success Criteria** (what must be TRUE): - - 1. API tests pass for project endpoints (cases/bulk-edit, cases/fetch-many, folders/stats) with auth and tenant isolation verified - 2. API tests pass for test run endpoints (summary, attachments, import, completed, summaries) and session summary endpoint - 3. API tests pass for milestone endpoints (descendants, forecast, summary) and share link endpoints (access, password-verify, report data) - 4. API tests pass for all report builder endpoints (all report types, drill-down queries) and admin endpoints (elasticsearch, queues, trash, user management) - 5. API tests pass for search, tag/issue count aggregation, file upload/download, health, metadata, and OpenAPI documentation endpoints -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 23: General Components -**Goal**: All shared UI components are tested with full edge case and error state coverage -**Depends on**: Phase 9 -**Requirements**: COMP-01, COMP-02, COMP-03, COMP-04, COMP-05, COMP-06, COMP-07, COMP-08 -**Success Criteria** (what must be TRUE): - - 1. Component tests pass for Header, UserDropdownMenu, and NotificationBell covering all notification states (empty, unread count, loading) - 2. Component tests pass for comment system (CommentEditor, CommentList, MentionSuggestion) and attachment components (display, upload, preview carousel) - 3. Component tests pass for DataTable (sorting, filtering, column visibility, row selection) and form components (ConfigurationSelect, FolderSelect, MilestoneSelect, DatePickerField) - 4. Component tests pass for onboarding dialogs, TipTap editor extensions (image resize, tables, code blocks), and DnD components (drag previews, drag interactions) -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning - -### Phase 24: Hooks, Notifications, and Workers -**Goal**: All custom hooks, notification flows, and background workers are unit tested -**Depends on**: Phase 9 -**Requirements**: HOOK-01, HOOK-02, HOOK-03, HOOK-04, HOOK-05, NOTIF-01, NOTIF-02, NOTIF-03, WORK-01, WORK-02, WORK-03 -**Success Criteria** (what must be TRUE): - - 1. Hook tests pass for ZenStack-generated data fetching hooks (useFindMany*, useCreate*, useUpdate*, useDelete*) with mocked data - 2. Hook tests pass for permission hooks (useProjectPermissions, useUserAccess, role-based hooks) covering all permission states - 3. Hook tests pass for UI state hooks (useExportData, useReportColumns, filter/sort hooks) and form hooks (useForm integrations, validation) - 4. Hook tests pass for integration hooks (useAutoTagJob, useIntegration, useLlm) with mocked providers - 5. Component tests pass for NotificationBell, NotificationContent, and NotificationPreferences; API tests pass for notification dispatch; unit tests pass for emailWorker, repoCacheWorker, and autoTagWorker -**Plans**: 2 plans - -Plans: -- [ ] 10-01-PLAN.md -- Gap-fill: test case edit/delete and bulk move to folder -- [ ] 10-02-PLAN.md -- Gap-fill: shared steps CRUD and versioning +_All phases complete and archived. See `.planning/milestones/` for historical details._ --- -### Phase 25: Default Template Schema -**Goal**: The Project model exposes an optional default export template so that the application can persist and query per-project default selections -**Depends on**: Nothing (SCHEMA-01 already complete; this extends it) -**Requirements**: SCHEMA-02 -**Success Criteria** (what must be TRUE): - - 1. The Project model has an optional relation to CaseExportTemplate representing the project's default export template - 2. Setting and clearing the default template for a project persists correctly in the database - 3. ZenStack/Prisma generation succeeds and the new relation is queryable via generated hooks -**Plans**: 1 plan - -Plans: -- [ ] 25-01-PLAN.md -- Add defaultCaseExportTemplate relation to Project model and regenerate - -### Phase 26: Admin Assignment UI -**Goal**: Admins can assign or unassign export templates to a project and designate one as the default, directly from project settings -**Depends on**: Phase 25 -**Requirements**: ADMIN-01, ADMIN-02 -**Success Criteria** (what must be TRUE): - - 1. Admin can navigate to project settings and see a list of all enabled export templates with their assignment status for that project - 2. Admin can assign an export template to a project and the assignment is reflected immediately in the UI - 3. Admin can unassign an export template from a project and it no longer appears in the project's assigned list - 4. Admin can mark one assigned template as the project default, and the selection persists across page reloads -**Plans**: 2 plans - -Plans: -- [ ] 26-01-PLAN.md -- Update ZenStack access rules for project admin write access -- [ ] 26-02-PLAN.md -- Build ExportTemplateAssignmentSection and integrate into quickscript page - -### Phase 27: Export Dialog Filtering -**Goal**: The export dialog shows only the templates relevant to the current project, with the project default pre-selected, while gracefully falling back when no assignments exist -**Depends on**: Phase 26 -**Requirements**: EXPORT-01, EXPORT-02, EXPORT-03 -**Success Criteria** (what must be TRUE): - - 1. When a project has assigned templates, the export dialog lists only those templates (not all global templates) - 2. When a project has a default template set, the export dialog opens with that template pre-selected - 3. When a project has no assigned templates, the export dialog shows all enabled templates (backward compatible fallback) -**Plans**: 1 plan - -Plans: -- [ ] 27-01-PLAN.md -- Filter QuickScript dialog templates by project assignment and pre-select project default - ---- - -### Phase 28: Queue and Worker - -**Goal**: The copy/move BullMQ worker processes jobs end-to-end, carrying over all case data and handling version history correctly, before any API or UI is built on top -**Depends on**: Phase 27 (v2.1 complete) -**Requirements**: DATA-01, DATA-02, DATA-03, DATA-04, DATA-05, DATA-06, DATA-07, DATA-08, DATA-09 -**Success Criteria** (what must be TRUE): - - 1. A copied case in the target project contains all original steps, custom field values, tags, issue links, and attachment records (pointing to the same S3 URLs) - 2. A copied case starts at version 1 in the target project with no prior version history - 3. A moved case in the target project retains its full version history from the source project - 4. Shared step groups are recreated as proper SharedStepGroups in the target project with all items copied - 5. When a shared step group name already exists in the target, the worker correctly applies the user-chosen resolution (reuse existing or create new) -**Plans**: 2 plans - -Plans: -- [ ] 28-01-PLAN.md -- Queue registration and copy/move worker implementation -- [ ] 28-02-PLAN.md -- Unit tests for copy/move worker processor - -### Phase 29: API Endpoints and Access Control - -**Goal**: The copy/move API layer enforces permissions, resolves template and workflow compatibility, detects collisions, and manages job lifecycle before any UI is connected -**Depends on**: Phase 28 -**Requirements**: COMPAT-01, COMPAT-02, COMPAT-03, COMPAT-04, BULK-01, BULK-03 -**Success Criteria** (what must be TRUE): - - 1. A user without write access to the target project receives a permission error before any job is enqueued - 2. A user attempting a move without delete access on the source project receives a permission error - 3. When source and target use different templates, the API response includes a template mismatch warning; admin users can auto-assign the missing template via the same endpoint - 4. When cases have workflow states not present in the target, the API response identifies the missing states so they can be associated or mapped to the target default - 5. A user can cancel an in-flight bulk job via the cancel endpoint, and the worker stops processing subsequent cases -**Plans**: 3 plans - -Plans: -- [ ] 29-01-PLAN.md -- Shared schemas and preflight endpoint (template/workflow compat + collision detection) -- [ ] 29-02-PLAN.md -- Status polling and cancel endpoints -- [ ] 29-03-PLAN.md -- Submit endpoint with admin auto-assign and job enqueue - -### Phase 30: Dialog UI and Polling - -**Goal**: Users can complete a copy/move operation entirely through the dialog, from target selection through progress tracking to a final summary of outcomes -**Depends on**: Phase 29 -**Requirements**: DLGSEL-03, DLGSEL-04, DLGSEL-05, DLGSEL-06, BULK-02, BULK-04 -**Success Criteria** (what must be TRUE): - - 1. User can select a target project from a picker that shows only projects they have write access to, then pick a target folder within that project - 2. User can choose Copy or Move and sees a clear description of what each operation does before confirming - 3. When a pre-flight collision check finds naming conflicts, user sees the list of conflicting case names and chooses a resolution strategy before any writes begin - 4. During a bulk operation, user sees a live progress indicator showing cases processed out of total - 5. After operation completes, user sees a per-case summary distinguishing successful copies/moves from cases that failed with their individual error reason -**Plans**: 2 plans - -Plans: -- [ ] 30-01-PLAN.md -- useCopyMoveJob polling hook, schema notification type, worker notification, and NotificationContent extension -- [ ] 30-02-PLAN.md -- CopyMoveDialog three-step wizard component with tests and visual verification - -### Phase 31: Entry Points - -**Goal**: The copy/move dialog is reachable from every UI location where users interact with test cases -**Depends on**: Phase 30 -**Requirements**: DLGSEL-01, DLGSEL-02, ENTRY-01, ENTRY-02, ENTRY-03 -**Success Criteria** (what must be TRUE): - - 1. The repository toolbar shows a "Copy/Move to Project" button positioned between "Create Test Run" and "Export" - 2. Right-clicking a test case row reveals a "Copy/Move to Project" option in the context menu - 3. The bulk edit modal footer includes "Copy/Move to Project" as an available bulk action when one or more cases are selected -**Plans**: 1 plan - -Plans: -- [ ] 31-01-PLAN.md -- Wire CopyMoveDialog into toolbar, context menu, and bulk edit modal - -### Phase 32: Testing and Documentation - -**Goal**: The copy/move feature is fully verified across critical data-integrity scenarios and documented for users -**Depends on**: Phase 31 -**Requirements**: TEST-01, TEST-02, TEST-03, TEST-04, DOCS-01 -**Success Criteria** (what must be TRUE): - - 1. E2E tests pass for end-to-end copy and move operations including verification that steps, tags, attachments, and field values appear correctly in the target project - 2. E2E tests pass for template compatibility warning flow and workflow state mapping, covering both admin auto-assign and non-admin warning paths - 3. Unit tests pass for worker logic covering field option ID remapping across template boundaries, shared step group flattening, and partial failure recovery - 4. Unit tests pass for shared step group collision handling (reuse vs. create new) and for move version history preservation - 5. User documentation is published covering the copy/move workflow, how template and workflow conflicts are handled, and how to resolve naming collisions -**Plans**: 2 plans - -Plans: -- [ ] 32-01-PLAN.md -- E2E API tests for copy/move endpoints (TEST-01, TEST-02) and worker test verification (TEST-03, TEST-04) -- [ ] 32-02-PLAN.md -- User-facing documentation for copy/move feature (DOCS-01) - -### Phase 33: Folder Tree Copy/Move - -**Goal**: Users can copy or move an entire folder (with all subfolders and contained test cases) to another project, preserving the folder hierarchy -**Depends on**: Phase 31 -**Requirements**: TREE-01, TREE-02, TREE-03, TREE-04 -**Success Criteria** (what must be TRUE): - - 1. User can right-click a folder in the tree view and choose Copy/Move to open the CopyMoveDialog with all cases from that folder tree pre-selected - 2. The folder hierarchy is recreated in the target project preserving parent-child structure - 3. All cases within the folder tree are processed with the same compatibility handling as individual case copy/move - 4. User can choose to place the copied/moved tree inside an existing folder or at root level in the target -**Plans**: 2 plans - -Plans: -- [ ] 33-01-PLAN.md -- Worker folder tree recreation, API schema extension, and unit tests -- [ ] 33-02-PLAN.md -- TreeView context menu entry, CopyMoveDialog folder mode, and wiring - ---- - -## Progress - -**Execution Order:** -Phases execute in numeric order: 9 → 10 → 11 → 12 → 13 → 14 → 15 → 16 → 17 → 18 → 19 → 20 → 21 → 22 → 23 → 24 → 25 → 26 → 27 → 28 → 29 → 30 → 31 → 32 - -| Phase | Milestone | Plans Complete | Status | Completed | -|-------|-----------|----------------|--------|-----------| -| 1. Schema Foundation | v1.0 | 1/1 | Complete | 2026-03-08 | -| 2. Alert Service and Pipeline | v1.0 | 3/3 | Complete | 2026-03-08 | -| 3. Settings Page UI | v1.0 | 1/1 | Complete | 2026-03-08 | -| 4. (v1.0 complete) | v1.0 | 0/0 | Complete | 2026-03-08 | -| 5. CRUD Operations | v1.1 | 4/4 | Complete | 2026-03-17 | -| 6. Relations and Queries | v1.1 | 2/2 | Complete | 2026-03-17 | -| 7. Access Control | v1.1 | 2/2 | Complete | 2026-03-17 | -| 8. Error Handling and Batch Operations | v1.1 | 2/2 | Complete | 2026-03-17 | -| 9. Authentication E2E and API Tests | v2.0 | 4/4 | Complete | 2026-03-19 | -| 10. Test Case Repository E2E Tests | v2.0 | 0/2 | Planning complete | - | -| 11. Repository Components and Hooks | v2.0 | 0/TBD | Not started | - | -| 12. Test Execution E2E Tests | v2.0 | 0/TBD | Not started | - | -| 13. Run Components, Sessions E2E, and Session Components | v2.0 | 0/TBD | Not started | - | -| 14. Project Management E2E and Components | v2.0 | 0/TBD | Not started | - | -| 15. AI Feature E2E and API Tests | v2.0 | 0/TBD | Not started | - | -| 16. AI Component Tests | v2.0 | 0/TBD | Not started | - | -| 17. Administration E2E Tests | v2.0 | 0/TBD | Not started | - | -| 18. Administration Component Tests | v2.0 | 0/TBD | Not started | - | -| 19. Reporting E2E and Component Tests | v2.0 | 0/TBD | Not started | - | -| 20. Search E2E and Component Tests | v2.0 | 0/TBD | Not started | - | -| 21. Integrations E2E, Components, and API Tests | v2.0 | 0/TBD | Not started | - | -| 22. Custom API Route Tests | v2.0 | 0/TBD | Not started | - | -| 23. General Components | v2.0 | 0/TBD | Not started | - | -| 24. Hooks, Notifications, and Workers | v2.0 | 0/TBD | Not started | - | -| 25. Default Template Schema | v2.1 | 1/1 | Complete | 2026-03-19 | -| 26. Admin Assignment UI | v2.1 | 2/2 | Complete | 2026-03-19 | -| 27. Export Dialog Filtering | v2.1 | 1/1 | Complete | 2026-03-19 | -| 28. Queue and Worker | v0.17.0 | 2/2 | Complete | 2026-03-20 | -| 29. API Endpoints and Access Control | v0.17.0 | 3/3 | Complete | 2026-03-20 | -| 30. Dialog UI and Polling | v0.17.0 | 2/2 | Complete | 2026-03-20 | -| 31. Entry Points | 1/1 | Complete | 2026-03-20 | - | -| 32. Testing and Documentation | 2/2 | Complete | 2026-03-20 | - | -| 33. Folder Tree Copy/Move | 2/2 | Complete | 2026-03-21 | - | +*Last updated: 2026-03-21 after completing all milestones* diff --git a/.planning/STATE.md b/.planning/STATE.md index f541ae64..a115df8b 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,33 +4,33 @@ milestone: v2.0 milestone_name: Comprehensive Test Coverage status: completed stopped_at: Completed 33-02-PLAN.md (Phase 33 Plan 02 — folder copy/move UI entry point) -last_updated: "2026-03-21T03:34:32.880Z" -last_activity: "2026-03-20 — Completed 29-02: status polling and cancel endpoints with multi-tenant isolation" +last_updated: "2026-03-21T17:18:20.987Z" +last_activity: 2026-03-21 — All v2.0 phases confirmed complete progress: - total_phases: 27 + total_phases: 25 completed_phases: 23 total_plans: 59 completed_plans: 62 - percent: 24 + percent: 100 --- # State ## Project Reference -See: .planning/PROJECT.md (updated 2026-03-20) +See: .planning/PROJECT.md (updated 2026-03-21) **Core value:** Teams can plan, execute, and track testing across manual and automated workflows in one place — with AI assistance to reduce repetitive work. -**Current focus:** v0.17.0 Copy/Move Test Cases Between Projects — Phase 29 in progress +**Current focus:** v2.0 Comprehensive Test Coverage — All phases complete, running lifecycle ## Current Position -Phase: 29 of 32 (API Endpoints and Access Control) -Plan: 02 of 04 (complete) -Status: Phase 29 plan 02 complete — ready for 29-03 -Last activity: 2026-03-20 — Completed 29-02: status polling and cancel endpoints with multi-tenant isolation +Phase: 24 of 24 (all complete) +Plan: All complete +Status: Running milestone lifecycle (audit → complete → cleanup) +Last activity: 2026-03-21 — All v2.0 phases confirmed complete -Progress: [██░░░░░░░░] 24% (v0.17.0 phases — 4 of ~14 plans complete) +Progress: [██████████] 100% (v2.0 phases — 16 of 16 complete) ## Performance Metrics diff --git a/testplanit/app/[locale]/projects/repository/[projectId]/Cases.test.tsx b/testplanit/app/[locale]/projects/repository/[projectId]/Cases.test.tsx index d35e3ad4..4ed64d90 100644 --- a/testplanit/app/[locale]/projects/repository/[projectId]/Cases.test.tsx +++ b/testplanit/app/[locale]/projects/repository/[projectId]/Cases.test.tsx @@ -72,6 +72,7 @@ vi.mock("next-auth/react", async (importOriginal) => { vi.mock("~/lib/hooks", () => ({ useFindManyRepositoryFolders: vi.fn(() => ({ data: [], isLoading: false })), useCountRepositoryCases: vi.fn(() => ({ data: 0, isLoading: false, refetch: vi.fn() })), + useCountProjects: vi.fn(() => ({ data: 0, isLoading: false })), useFindManyTemplates: vi.fn(() => ({ data: [], isLoading: false })), useFindUniqueProjects: vi.fn(() => ({ data: null, isLoading: false })), useFindManyProjectLlmIntegration: vi.fn(() => ({ data: [], isLoading: false })), diff --git a/testplanit/app/api/repository/copy-move/preflight/route.test.ts b/testplanit/app/api/repository/copy-move/preflight/route.test.ts index d633c234..e5277274 100644 --- a/testplanit/app/api/repository/copy-move/preflight/route.test.ts +++ b/testplanit/app/api/repository/copy-move/preflight/route.test.ts @@ -83,7 +83,7 @@ const baseTargetWorkflowAssignments = [ }, ]; -const baseSourceWorkflowStates = [ +const _baseSourceWorkflowStates = [ { id: 100, name: "Not Started" }, ]; diff --git a/testplanit/components/AttachmentsCarousel.test.tsx b/testplanit/components/AttachmentsCarousel.test.tsx new file mode 100644 index 00000000..2e64fde0 --- /dev/null +++ b/testplanit/components/AttachmentsCarousel.test.tsx @@ -0,0 +1,357 @@ +import type { Attachments } from "@prisma/client"; +import { fireEvent, render, screen } from "@testing-library/react"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { AttachmentsCarousel } from "./AttachmentsCarousel"; + +const mockUpdateAttachments = vi.fn(); + +vi.mock("next-auth/react", () => ({ + useSession: vi.fn(() => ({ + data: { + user: { + preferences: { + dateFormat: "MM/DD/YYYY", + timeFormat: "HH:mm", + timezone: "Etc/UTC", + }, + }, + }, + })), +})); + +vi.mock("next-intl", () => ({ + useTranslations: vi.fn(() => (key: string) => key.split(".").pop() ?? key), +})); + +vi.mock("~/lib/hooks", () => ({ + useUpdateAttachments: vi.fn(() => ({ + mutateAsync: mockUpdateAttachments, + })), +})); + +vi.mock("~/utils/storageUrl", () => ({ + getStorageUrlClient: vi.fn((url: string) => `https://storage.example.com/${url}`), +})); + +vi.mock("@/components/AttachmentPreview", () => ({ + AttachmentPreview: ({ attachment, size }: any) => ( +
+ {attachment.name} +
+ ), +})); + +vi.mock("@/components/DateFormatter", () => ({ + DateFormatter: ({ date }: any) => ( + {String(date)} + ), +})); + +vi.mock("@/components/tables/UserNameCell", () => ({ + UserNameCell: ({ userId }: any) => ( + {userId} + ), +})); + +vi.mock("@/components/ui/button", () => ({ + Button: ({ children, onClick, disabled, variant, ...props }: any) => ( + + ), +})); + +vi.mock("@/components/ui/carousel", () => { + const listeners: Record = {}; + let selectedSnap = 0; + const mockApi = { + scrollTo: vi.fn((index: number) => { + selectedSnap = index; + listeners["select"]?.forEach((fn) => fn()); + }), + selectedScrollSnap: vi.fn(() => selectedSnap), + on: vi.fn((event: string, fn: Function) => { + if (!listeners[event]) listeners[event] = []; + listeners[event].push(fn); + }), + off: vi.fn(), + }; + return { + Carousel: ({ children, setApi }: any) => { + if (setApi) setTimeout(() => setApi(mockApi), 0); + return
{children}
; + }, + CarouselContent: ({ children }: any) => ( +
{children}
+ ), + CarouselItem: ({ children }: any) => ( +
{children}
+ ), + }; +}); + +vi.mock("@/components/ui/dialog", () => ({ + Dialog: ({ children, open, onOpenChange }: any) => ( + open ?
onOpenChange?.(false)}>{children}
: null + ), + DialogContent: ({ children }: any) =>
{children}
, + DialogDescription: ({ children }: any) =>
{children}
, + DialogFooter: ({ children }: any) =>
{children}
, + DialogHeader: ({ children }: any) =>
{children}
, + DialogTitle: ({ children }: any) =>
{children}
, +})); + +vi.mock("@/components/ui/input", () => ({ + Input: ({ value, onChange, ...props }: any) => ( + + ), +})); + +vi.mock("@/components/ui/popover", () => ({ + Popover: ({ children, open }: any) => ( +
{children}
+ ), + PopoverContent: ({ children }: any) =>
{children}
, + PopoverTrigger: ({ children }: any) =>
{children}
, +})); + +vi.mock("@/components/ui/separator", () => ({ + Separator: () =>
, +})); + +vi.mock("@/components/ui/textarea", () => ({ + Textarea: ({ value, onChange, ...props }: any) => ( +