Claude Code Plugins

Community-maintained marketplace

Feedback

coverage-analyzer

@kanopi/cms-cultivator
0
0

Automatically analyze test coverage when user asks which code is tested, mentions coverage gaps, or shows code asking about testing. Identifies untested code paths and suggests test additions. Invoke when user asks "what's not tested?", "coverage", "untested code", or "which tests are missing?".

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name coverage-analyzer
description Automatically analyze test coverage when user asks which code is tested, mentions coverage gaps, or shows code asking about testing. Identifies untested code paths and suggests test additions. Invoke when user asks "what's not tested?", "coverage", "untested code", or "which tests are missing?".

Coverage Analyzer

Automatically analyze test coverage and identify untested code.

When to Use This Skill

Activate this skill when the user:

  • Asks "what code isn't tested?"
  • Mentions "test coverage" or "coverage report"
  • Says "which tests are missing?"
  • Shows code and asks "is this tested?"
  • References "untested code paths"
  • Asks "what's my coverage percentage?"

Quick Coverage Analysis

1. Check if Tests Exist

PHP (PHPUnit):

# Check for test files
find tests/ -name "*Test.php"

# Check specific class
test -f "tests/src/Unit/DataProcessorTest.php" && echo "Tests exist"

JavaScript (Jest):

# Check for test files
find . -name "*.test.js" -o -name "*.spec.js"

2. Run Coverage Analysis

PHP:

# Generate coverage report
vendor/bin/phpunit --coverage-text

# For Kanopi projects
ddev exec vendor/bin/phpunit --coverage-text

JavaScript:

# Jest coverage
npm run test -- --coverage

# Or directly
npx jest --coverage

3. Identify Gaps

Common untested areas:

  • Error handling (catch blocks)
  • Edge cases (empty input, null values)
  • Private methods (test via public interface)
  • Complex conditionals
  • New features without tests

Response Format

## Test Coverage Analysis

### Summary
- **Overall Coverage**: 72%
- **Files Analyzed**: 45
- **Tested**: 32 files
- **Untested**: 13 files

### Coverage by Type
- Classes: 85% (34/40)
- Methods: 68% (156/230)
- Lines: 72% (2,340/3,250)
- Branches: 58% (89/153)

### 🔴 Critical Gaps (No Tests)

**1. PaymentProcessor.php** - 0% coverage
- **Risk**: High - handles money
- **Methods untested**: processPayment(), refund(), validate()
- **Recommendation**: Add unit tests immediately

**2. AuthenticationService.php** - 0% coverage
- **Risk**: Critical - security component
- **Methods untested**: authenticate(), validateToken()
- **Recommendation**: Add security tests ASAP

### 🟡 Partial Coverage

**3. UserManager.php** - 45% coverage
- ✅ Tested: getUser(), createUser()
- ❌ Untested: deleteUser(), updatePermissions()
- **Recommendation**: Add tests for delete and permission methods

### ✅ Well Tested

- DataProcessor.php - 95%
- EmailService.php - 88%
- ValidationHelper.php - 100%

### Suggested Actions

1. **Immediate** (Critical):
   - Add tests for PaymentProcessor
   - Add tests for AuthenticationService

2. **This Sprint**:
   - Complete UserManager tests
   - Add integration tests for checkout flow

3. **Next Sprint**:
   - Increase overall coverage to 80%
   - Add E2E tests for critical paths

Detailed Analysis

Method-Level Coverage

## DataProcessor.php Coverage

| Method | Tested? | Coverage | Priority |
|--------|---------|----------|----------|
| processData() | ✅ Yes | 100% | - |
| validateInput() | ✅ Yes | 90% | Low |
| handleError() | ❌ No | 0% | High |
| formatOutput() | ⚠️ Partial | 60% | Medium |

### Untested Code Paths

**handleError() method:**
```php
public function handleError($error) {
  // Line 45: No test coverage
  if ($error instanceof ValidationException) {
    return $this->formatValidationError($error);
  }
  // Line 49: No test coverage
  if ($error instanceof DatabaseException) {
    return $this->formatDatabaseError($error);
  }
  // Line 53: Tested
  return $this->formatGenericError($error);
}

Missing test cases:

  • ValidationException handling
  • DatabaseException handling
  • Edge case: null error

Suggested test:

public function testHandleValidationException(): void {
  $exception = new ValidationException('Invalid input');
  $result = $this->processor->handleError($exception);
  $this->assertStringContains('validation error', $result);
}

## Integration with /test-coverage Command

- **This Skill**: Quick coverage checks
  - "Is this function tested?"
  - "What's missing tests?"
  - Single file/class analysis

- **`/test-coverage` Command**: Comprehensive coverage analysis
  - Full project coverage report
  - Trend analysis over time
  - CI/CD integration
  - Detailed HTML reports

## Coverage Goals

### Industry Standards

- **Minimum**: 70% coverage
- **Good**: 80% coverage
- **Excellent**: 90%+ coverage

**But remember**: 100% coverage ≠ bug-free code

### What to Focus On

**High Priority:**
- Authentication/authorization
- Payment processing
- Data validation
- Security-sensitive code
- Critical business logic

**Medium Priority:**
- API endpoints
- Form handlers
- Data transformations
- Email notifications

**Low Priority:**
- Simple getters/setters
- Configuration classes
- View rendering
- Logging statements

## Quick Commands

### PHP (PHPUnit)

```bash
# Text coverage report
vendor/bin/phpunit --coverage-text

# HTML coverage report
vendor/bin/phpunit --coverage-html coverage/

# Coverage for specific test
vendor/bin/phpunit --coverage-text tests/Unit/DataProcessorTest.php

# Kanopi projects
ddev exec vendor/bin/phpunit --coverage-html coverage/

JavaScript (Jest)

# Terminal coverage
npm test -- --coverage

# HTML report
npm test -- --coverage --coverageReporters=html

# Watch mode with coverage
npm test -- --coverage --watch

# Coverage for specific file
npm test -- --coverage DataProcessor.test.js

Common Gaps & Solutions

Gap 1: Error Handling

Untested:

try {
  $this->processData($data);
} catch (Exception $e) {
  // Untested catch block
  $this->logger->error($e->getMessage());
}

Solution:

public function testProcessDataWithException(): void {
  $this->expectException(ProcessingException::class);
  $this->processor->processData([]);
}

Gap 2: Edge Cases

Untested:

  • Empty arrays
  • Null values
  • Maximum values
  • Boundary conditions

Solution: Add tests for each edge case

Gap 3: Integration Points

Untested:

  • Database interactions
  • API calls
  • File system operations

Solution: Add integration tests or use mocks

Coverage Best Practices

  1. Test behavior, not coverage - Don't chase 100% blindly
  2. Focus on critical paths - Test important code thoroughly
  3. Test edge cases - Empty, null, min, max values
  4. Test error paths - Exceptions and error handling
  5. Keep tests fast - Slow tests won't run
  6. Update tests with code - Keep tests current

Resources