Files
leptos-shadcn-ui/docs/remediation/TEST_COVERAGE_REMEDIATION_PLAN.md
Peter Hanssens ec459d142c 🔧 Complete refactoring implementation for v0.9.0
- All 9 components fully refactored with modular architecture
- 45+ test modules created and organized
- File size compliance achieved (99% reduction)
- Enterprise-grade code quality implemented
- All compilation issues resolved

Ready for v0.9.0 release publication!
2025-09-22 13:06:22 +10:00

7.7 KiB

🧪 Test Coverage Remediation Plan

Priority 1: Critical Test Coverage Issues

📊 Current Test Coverage Status

Test Coverage Crisis

  • 653 Rust files in repository
  • ~30% overall test coverage (estimated)
  • Many stub implementations with "will fail initially" comments
  • Missing integration tests for component interactions
  • No accessibility testing framework
  • Limited performance testing

Components by Test Status

Component Test Files Status Coverage Priority
Button 4 files Working ~80% Low
Input 8 files ⚠️ Stub tests ~30% HIGH
Card 3 files ⚠️ Partial ~50% Medium
Dialog 2 files Missing ~20% HIGH
Form 1 file Stub ~10% HIGH
Table 1 file Missing ~15% HIGH
Select 2 files ⚠️ Partial ~40% Medium
Textarea 3 files ⚠️ Stub ~25% HIGH
Switch 2 files ⚠️ Partial ~35% Medium
RadioGroup 3 files ⚠️ Stub ~30% HIGH

🎯 Remediation Strategy

Phase 1: Critical Component Tests (Week 1)

Input Component - Priority 1

Current Issues:

  • 8 test files with stub implementations
  • Tests marked as "will fail initially"
  • Missing validation testing
  • No accessibility tests

Remediation Plan:

// Current stub test
#[test]
fn test_input_basic_rendering() {
    // This test will fail initially - we need to implement proper rendering
}

// Target implementation
#[test]
fn test_input_basic_rendering() {
    let input = Input::new(InputProps {
        placeholder: "Enter text".to_string(),
        value: "".to_string(),
        ..Default::default()
    });
    
    let rendered = input.render();
    assert!(rendered.contains("input"));
    assert!(rendered.contains("Enter text"));
}

Files to Fix:

  • packages/leptos/input/src/tdd_tests/basic_rendering_tests.rs (224 lines → split)
  • packages/leptos/input/src/tdd_tests/validation_tests.rs (180+ lines → split)
  • packages/leptos/input/src/tdd_tests/accessibility_tests.rs (stub)
  • packages/leptos/input/src/tdd_tests/performance_tests.rs (stub)

Dialog Component - Priority 1

Current Issues:

  • Only 2 test files
  • Missing modal behavior tests
  • No accessibility testing
  • No keyboard navigation tests

Remediation Plan:

  • Create comprehensive test suite
  • Add accessibility tests
  • Test modal behavior
  • Test keyboard navigation

Form Component - Priority 1

Current Issues:

  • Only 1 stub test file
  • No validation testing
  • No integration tests

Remediation Plan:

  • Implement form validation tests
  • Add field interaction tests
  • Create integration tests

Phase 2: Test Infrastructure (Week 2)

Test File Refactoring

Current Issues:

  • Files exceeding 300-line limit
  • Monolithic test files
  • Poor test organization

Remediation Plan:

packages/leptos/input/src/tests/
├── basic_rendering.rs (max 100 lines)
├── validation.rs (max 100 lines)
├── accessibility.rs (max 100 lines)
├── performance.rs (max 100 lines)
├── integration.rs (max 100 lines)
└── mod.rs (test module organization)

Test Categories Implementation

  1. Basic Rendering Tests

    • Component renders without errors
    • Props are applied correctly
    • Default values work
  2. Validation Tests

    • Input validation works
    • Error states display correctly
    • Validation messages show
  3. Accessibility Tests

    • ARIA attributes present
    • Keyboard navigation works
    • Screen reader compatibility
    • Focus management
  4. Performance Tests

    • Render time benchmarks
    • Memory usage tests
    • Bundle size validation
  5. Integration Tests

    • Component interactions
    • Form workflows
    • State management

Phase 3: Advanced Testing (Week 3-4)

Property-Based Testing

use proptest::prelude::*;

proptest! {
    #[test]
    fn input_handles_any_valid_props(
        placeholder in any::<String>(),
        value in any::<String>(),
        disabled in any::<bool>()
    ) {
        let props = InputProps {
            placeholder,
            value,
            disabled,
            ..Default::default()
        };
        
        let input = Input::new(props);
        let rendered = input.render();
        assert!(rendered.contains("input"));
    }
}

Snapshot Testing

#[test]
fn input_snapshot_test() {
    let input = Input::new(InputProps {
        placeholder: "Enter text".to_string(),
        value: "test".to_string(),
        ..Default::default()
    });
    
    let rendered = input.render();
    insta::assert_snapshot!(rendered);
}

Visual Regression Testing

#[test]
fn input_visual_regression() {
    let input = Input::new(InputProps::default());
    let screenshot = capture_component_screenshot(input);
    assert_visual_match(screenshot, "input_default.png");
}

🛠️ Implementation Plan

Week 1: Critical Components

  • Fix Input component tests (8 files)
  • Implement Dialog component tests
  • Create Form component tests
  • Add Table component tests

Week 2: Test Infrastructure

  • Refactor large test files
  • Create test module structure
  • Implement test utilities
  • Add test documentation

Week 3: Advanced Testing

  • Property-based testing
  • Snapshot testing
  • Visual regression testing
  • Performance benchmarking

Week 4: Integration & Coverage

  • Integration tests
  • End-to-end tests
  • Coverage reporting
  • Test documentation

📈 Success Metrics

Coverage Targets

  • Week 1: 60% overall coverage
  • Week 2: 75% overall coverage
  • Week 3: 85% overall coverage
  • Week 4: 90% overall coverage

Quality Metrics

  • Zero stub tests remaining
  • All components have comprehensive test suites
  • Accessibility tests for all interactive components
  • Performance benchmarks established

File Organization

  • All test files under 100 lines
  • Logical test grouping by functionality
  • Consistent test patterns across components

🔧 Tools & Dependencies

Testing Framework

[dev-dependencies]
proptest = "1.4"
insta = "1.39"
criterion = "0.5"
wasm-bindgen-test = "0.3"

Test Utilities

  • Custom test helpers for Leptos components
  • Screenshot capture utilities
  • Performance measurement tools
  • Accessibility testing helpers

📋 Component-Specific Plans

Input Component

  • Files: 8 test files to fix
  • Priority: HIGH
  • Timeline: Week 1
  • Focus: Validation, accessibility, performance

Dialog Component

  • Files: 2 test files to expand
  • Priority: HIGH
  • Timeline: Week 1
  • Focus: Modal behavior, accessibility, keyboard navigation

Form Component

  • Files: 1 stub file to implement
  • Priority: HIGH
  • Timeline: Week 1
  • Focus: Validation, field interactions, integration

Table Component

  • Files: 1 missing file to create
  • Priority: HIGH
  • Timeline: Week 1
  • Focus: Data rendering, sorting, filtering

🚀 Next Steps

  1. Start with Input component (highest impact)
  2. Create test file templates for consistency
  3. Implement test utilities for common patterns
  4. Set up coverage reporting for tracking progress
  5. Document test patterns for team consistency

This remediation plan will transform the test coverage from ~30% to 90%+ within 4 weeks, establishing a solid foundation for reliable component development.


Plan created: September 20, 2025
Target completion: October 18, 2025