# Label System Testing Documentation This document describes the comprehensive testing strategy and implementation for the GitHub Issues-style label system. ## ๐Ÿงช Testing Overview The label system includes comprehensive unit tests, integration tests, and end-to-end tests covering both the Rust backend and React frontend components. ### Test Coverage Areas - โœ… **Database Operations** - Label CRUD, relationships, migrations - โœ… **API Endpoints** - REST API functionality and validation - โœ… **Authentication & Authorization** - User permissions and security - โœ… **React Components** - UI behavior and user interactions - โœ… **Integration Workflows** - End-to-end label management flows - โœ… **Error Handling** - Graceful error management - โœ… **Performance** - Response times and data handling - โœ… **Accessibility** - Keyboard navigation and screen readers ## ๐Ÿ—๏ธ Test Structure ### Backend Tests (Rust) #### Unit Tests (`src/tests/labels_tests.rs`) ```rust // Test database operations test_create_label_success() test_update_label_success() test_delete_label_success() test_document_label_assignment() test_label_usage_counts() test_system_labels_migration() test_cascade_delete_on_document_removal() // Test validation test_create_label_duplicate_name_fails() test_cannot_delete_system_label() test_label_color_validation() ``` #### Integration Tests (`tests/labels_integration_tests.rs`) ```rust // Test complete API workflows test_label_crud_operations() test_document_label_assignment() test_system_labels_access() test_label_validation() test_label_permissions() ``` ### Frontend Tests (React/TypeScript) #### Component Tests - **Label Component** (`components/Labels/__tests__/Label.test.tsx`) - Rendering with different props - Color contrast and accessibility - Click and delete interactions - Icon and size variants - **LabelSelector Component** (`components/Labels/__tests__/LabelSelector.test.tsx`) - Autocomplete functionality - Multi-select behavior - Create new label workflow - Search and filtering - **LabelCreateDialog** (`components/Labels/__tests__/LabelCreateDialog.test.tsx`) - Form validation - Color and icon selection - Create vs Edit modes - Preview functionality #### Page Tests - **LabelsPage** (`pages/__tests__/LabelsPage.test.tsx`) - Data fetching and display - Search and filtering - CRUD operations - Error handling - Empty states ## ๐Ÿš€ Running Tests ### Quick Test Run ```bash # Run all label tests ./run_label_tests.sh ``` ### Individual Test Suites #### Backend Tests ```bash # Unit tests only cargo test labels_tests --lib # Integration tests only cargo test labels_integration_tests --test labels_integration_tests # All backend tests cargo test ``` #### Frontend Tests ```bash cd frontend # Label component tests npm run test -- --run components/Labels/ # LabelsPage tests npm run test -- --run pages/__tests__/LabelsPage.test.tsx # All frontend tests npm run test -- --run ``` ### Coverage Reports ```bash # Backend coverage (requires cargo-tarpaulin) cargo tarpaulin --out Html --output-dir target/coverage # Frontend coverage cd frontend && npm run test:coverage ``` ## ๐ŸŽฏ Test Scenarios ### Database Layer Tests 1. **Label Creation** - Valid label creation with all fields - Minimum required fields only - Duplicate name prevention - Color format validation 2. **Label Updates** - Partial updates - Full updates - Concurrent update handling - System label protection 3. **Label Deletion** - Successful deletion - System label protection - Cascade behavior verification - Usage count validation 4. **Document Relationships** - Label assignment - Label removal - Bulk operations - Orphaned relationship cleanup ### API Layer Tests 1. **Authentication & Authorization** - Valid JWT token required - User can only manage own labels - System labels accessible to all - Permission boundary enforcement 2. **Input Validation** - Required field validation - Data type validation - Length limits - Special character handling 3. **Error Responses** - Proper HTTP status codes - Meaningful error messages - Consistent error format - Rate limiting compliance ### UI Component Tests 1. **Visual Rendering** - Color application - Icon display - Size variants - Responsive behavior 2. **User Interactions** - Click handling - Keyboard navigation - Form submission - Error display 3. **Accessibility** - ARIA attributes - Screen reader support - Keyboard-only navigation - Color contrast compliance ## ๐Ÿ”ง Test Utilities ### Backend Test Helpers ```rust // Test database setup with migrations async fn setup_test_db() -> TestContext // Create test users and labels fn create_test_user() -> User fn create_test_label() -> Label ``` ### Frontend Test Helpers ```typescript // Mock data builders createMockLabel(overrides?: Partial): LabelData createMockLabels(count?: number): LabelData[] // API response mocks mockLabelApiResponses.getLabels() mockLabelApiResponses.createLabel() // Test utilities testColorContrast(bgColor: string, textColor: string): number ``` ## ๐Ÿ“Š Test Data Management ### Test Database - Uses Testcontainers for isolated PostgreSQL instances - Each test gets a fresh database with migrations applied - Automatic cleanup after test completion ### Mock Data - Realistic label data with proper relationships - Edge cases: long names, special characters, unicode - Performance datasets: large numbers of labels - Validation scenarios: invalid colors, empty names ### API Mocking - Comprehensive mocking of HTTP responses - Error scenario simulation - Loading state testing - Network failure handling ## ๐Ÿšจ Continuous Integration ### Pre-commit Hooks ```bash # Run quick tests before commit cargo test labels_tests --lib cd frontend && npm run test:quick ``` ### CI Pipeline 1. **Backend Tests** - Lint check with clippy - Unit tests with coverage - Integration tests with Docker - Security audit with cargo-audit 2. **Frontend Tests** - TypeScript compilation - Unit tests with coverage - Linting with ESLint - Security audit with npm audit 3. **Cross-Platform Testing** - Linux (Ubuntu) - macOS - Windows ## ๐ŸŽฏ Performance Testing ### Backend Performance ```rust // Measure label creation time #[test] fn test_label_creation_performance() { let start = Instant::now(); create_multiple_labels(1000).await; assert!(start.elapsed() < Duration::from_secs(1)); } ``` ### Frontend Performance ```typescript // Component render performance test('should render 100 labels quickly', () => { const labels = createMockLabels(100); const start = performance.now(); render(); const end = performance.now(); expect(end - start).toBeLessThan(100); // 100ms }); ``` ## ๐Ÿ” Debugging Tests ### Backend Debugging ```bash # Run with debug output RUST_LOG=debug cargo test labels_tests # Run specific test cargo test test_create_label_success -- --nocapture ``` ### Frontend Debugging ```bash # Run tests in watch mode npm run test -- --watch # Debug specific component npm run test -- --run Label.test.tsx --reporter=verbose ``` ## ๐Ÿ“‹ Test Checklist Before merging label system changes: - [ ] All unit tests pass - [ ] Integration tests pass - [ ] Frontend component tests pass - [ ] E2E workflows tested - [ ] Error scenarios covered - [ ] Performance benchmarks met - [ ] Accessibility requirements verified - [ ] Security validations complete - [ ] Documentation updated - [ ] Migration tested ## ๐ŸŽ‰ Test Quality Metrics ### Coverage Targets - **Backend**: >90% line coverage - **Frontend**: >85% line coverage - **Integration**: All major workflows covered ### Performance Targets - **API Response**: <200ms for CRUD operations - **Component Render**: <50ms for standard datasets - **Database Query**: <10ms for label operations ### Reliability Targets - **Test Stability**: >99% pass rate - **Error Handling**: 100% error scenarios covered - **Cross-browser**: Support for modern browsers --- ## ๐Ÿš€ Getting Started 1. **Setup Development Environment** ```bash # Install Rust and cargo curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Install Node.js and npm # (Follow Node.js installation instructions) # Install Docker for integration tests # (Follow Docker installation instructions) ``` 2. **Run Initial Tests** ```bash # Clone and setup project git clone cd readur # Run comprehensive test suite ./run_label_tests.sh ``` 3. **Development Workflow** ```bash # Make changes to label system # Run quick tests cargo test labels_tests --lib cd frontend && npm run test -- --run components/Labels/ # Run full test suite before committing ./run_label_tests.sh ``` The label system is thoroughly tested and ready for production use! ๐Ÿท๏ธโœจ