# Test Coverage

Test coverage'ını analiz et, eksiklikleri tanımla ve 80%+ coverage'a ulaşmak için eksik test'leri oluştur.

## Adım 1: Test Framework'ünü Tespit Et

| Gösterge | Coverage Komutu |
|-----------|-----------------|
| `jest.config.*` veya `package.json` jest | `npx jest --coverage --coverageReporters=json-summary` |
| `vitest.config.*` | `npx vitest run --coverage` |
| `pytest.ini` / `pyproject.toml` pytest | `pytest --cov=src --cov-report=json` |
| `Cargo.toml` | `cargo llvm-cov --json` |
| `pom.xml` JaCoCo ile | `mvn test jacoco:report` |
| `go.mod` | `go test -coverprofile=coverage.out ./...` |

## Adım 2: Coverage Raporunu Analiz Et

1. Coverage komutunu çalıştır
2. Çıktıyı ayrıştır (JSON summary veya terminal çıktısı)
3. **80% coverage'ın altındaki** dosyaları listele, en kötüden başlayarak sırala
4. Her yetersiz coverage'lı dosya için şunları tanımla:
   - Test edilmemiş fonksiyonlar veya metodlar
   - Eksik branch coverage (if/else, switch, error yolları)
   - Payda'yı şişiren dead code

## Adım 3: Eksik Test'leri Oluştur

Her yetersiz coverage'lı dosya için, bu önceliği takip ederek test'ler oluştur:

1. **Happy path** — Geçerli input'larla temel fonksiyonalite
2. **Hata işleme** — Geçersiz input'lar, eksik veri, network hataları
3. **Edge case'ler** — Boş diziler, null/undefined, sınır değerleri (0, -1, MAX_INT)
4. **Branch coverage** — Her if/else, switch case, ternary

### Test Oluşturma Kuralları

- Test'leri kaynak kodun yanına yerleştir: `foo.ts` → `foo.test.ts` (veya proje konvansiyonu)
- Projeden mevcut test pattern'lerini kullan (import stili, assertion kütüphanesi, mocking yaklaşımı)
- Harici bağımlılıkları mock'la (veritabanı, API'ler, dosya sistemi)
- Her test bağımsız olmalı — test'ler arasında paylaşılan değişken state olmamalı
- Test'leri açıklayıcı isimlendirin: `test_create_user_with_duplicate_email_returns_409`

## Adım 4: Doğrula

1. Tam test suite'ini çalıştır — tüm test'ler geçmeli
2. Coverage'ı yeniden çalıştır — iyileşmeyi doğrula
3. Hala 80%'in altındaysa, kalan boşluklar için Adım 3'ü tekrarla

## Adım 5: Raporla

Öncesi/sonrası karşılaştırmasını göster:

```
Coverage Report
──────────────────────────────
File                   Before  After
src/services/auth.ts   45%     88%
src/utils/validation.ts 32%    82%
──────────────────────────────
Overall:               67%     84%  ✅
```

## Odak Alanları

- Karmaşık branching'e sahip fonksiyonlar (yüksek cyclomatic complexity)
- Hata işleyiciler ve catch blokları
- Codebase genelinde kullanılan utility fonksiyonları
- API endpoint handler'ları (request → response akışı)
- Edge case'ler: null, undefined, empty string, empty array, zero, negatif sayılar
