Commit Graph

3 Commits

Author SHA1 Message Date
Jason
c2031c9b5c test: add comprehensive tests for hooks and components
Add extensive unit and component tests covering import/export, settings,
and provider list functionality, advancing to Sprint 2 of test development.

Hook Tests:
- useImportExport (11 tests):
  * File selection success/failure flows
  * Import process with success/failure/exception paths
  * Export functionality with error handling
  * User cancellation scenarios
  * State management (clear selection, reset status)
  * Fake timers for async callback testing

- useSettingsForm (5 tests):
  * Settings normalization on initialization
  * Language persistence from localStorage
  * Field updates with language sync
  * Reset functionality with initial language restoration
  * Optimization to avoid redundant language changes

Component Tests:
- ProviderList (3 tests):
  * Loading state with skeleton placeholders
  * Empty state with create callback
  * Render order from useDragSort with action callbacks
  * Props pass-through (isCurrent, isEditMode, dragHandleProps)
  * Mock ProviderCard to isolate component under test

Technical Highlights:
- Fake timers (vi.useFakeTimers) for async control
- i18n mock with changeLanguage spy
- Partial mock of @dnd-kit/sortable using vi.importActual
- ProviderCard render spy for props verification
- Comprehensive error handling coverage

Test Coverage:
  ✓ 19 new test cases (11 + 5 + 3)
  ✓ Total: 35 tests passing
  ✓ Execution time: 865ms
  ✓ TypeScript: 0 errors

Related: Import/export, settings management, provider list rendering
Sprint Progress: Sprint 1 complete, Sprint 2 in progress (component tests)
2025-10-25 11:16:38 +08:00
Jason
89aef39c74 test: add useProviderActions hook unit tests
- Add comprehensive tests for provider CRUD operations:
  * addProvider: trigger mutation correctly
  * updateProvider: update provider and refresh tray menu
  * deleteProvider: call delete mutation
  * isLoading: track all mutation pending states
- Test Claude plugin integration sync logic:
  * Conditional sync based on app type (claude vs codex)
  * Integration toggle handling (enabled/disabled)
  * Error handling with custom/fallback messages
  * Official vs custom provider category detection
- Test usage script save functionality:
  * Update provider meta and invalidate cache on success
  * Display error toast with custom/fallback messages on failure
- Mock React Query mutations, Tauri API, and toast notifications
- Fix TypeScript spread operator issues in mock definitions
- Cover all success/failure paths and edge cases

Test Coverage:
  ✓ 12 test cases covering provider actions
  ✓ Plugin sync: 5 scenarios (app type, toggle, errors)
  ✓ CRUD operations: add, update, delete
  ✓ Usage script: save success/failure
  ✓ Estimated 95%+ code coverage

Related: Provider management, Claude plugin integration, usage scripts
Total Tests: 16 passed (4 useDragSort + 12 useProviderActions)
2025-10-25 10:49:14 +08:00
Jason
bbf830a1da test: add frontend testing infrastructure with vitest
- Introduce Vitest + React Testing Library + jsdom environment
- Add useDragSort hook unit tests covering:
  * Sorting logic (sortIndex → createdAt → name)
  * Successful drag operation (API call + cache invalidation)
  * Failed drag operation (error toast display)
  * Edge case (no valid target, no API call)
- Configure global test setup (i18n mock, auto cleanup)
- Update TypeScript configs to include tests/ directory
- Add test development plan documentation

Test Coverage:
  ✓ Provider drag-and-drop sorting core logic
  ✓ React Query cache refresh
  ✓ Toast notification display
  ✓ Boundary condition handling

Test Results: 4/4 passed (671ms)
Next Steps: Sprint 2 - component tests with MSW mock layer
2025-10-25 10:08:06 +08:00