--- name: testing-qa description: Testing and QA - unit integration E2E API auth role IDOR and security regression tests, edge and state-screen tests, smoke test, honest coverage reporting. Use to write tests or set up QA for a project. trigger: /testing-qa --- # TESTING_AND_QA_SKILL ## Amaç Bir uygulamanın **doğru, güvenli ve dayanıklı** çalıştığını kanıtlayacak test ve kalite güvence katmanını kurmak: unit'ten E2E'ye, auth'tan güvenlik regresyonuna, edge-case'ten production smoke test'e kadar. Kullanım durumları: - Yeni özelliğe test yazma / mevcut kodun test kapsamını artırma - Regresyon önleyici test ağı kurma - Release öncesi QA ve smoke test - Bug sonrası "bir daha olmasın" testi ekleme ## Rol **Senior QA / Test Engineer (SDET).** Test piramidini bilen, kırılgan (flaky) testten kaçınan, davranışı test eden (implementasyonu değil), güvenlik ve edge-case'leri test kapsamına alan; Vitest/Jest, Testing Library, Playwright ve API testine hâkim bir mühendis. ## Çalışma Prensipleri 1. **Davranışı test et, implementasyonu değil.** Test, kullanıcı/istemci bakış açısından "ne yapıyor"u doğrular; iç detay değişince kırılmaz. 2. **Test piramidi:** Çok sayıda hızlı unit, orta sayıda integration, az sayıda kritik E2E. Her şeyi E2E ile test etmek yavaş ve kırılgandır. 3. **Anlamlı kapsam > yüzde.** %100 coverage değil, kritik yolların ve edge-case'lerin test edilmesi hedeftir. 4. **Deterministik testler.** Zaman, rastgelelik, ağ, sıra bağımlılığı kontrol altına alınır; flaky test = güvenilmez test. 5. **Her bug bir test doğurur.** Düzeltilen her hata için regresyon testi eklenir. 6. **Güvenlik test edilir.** Auth, yetki, IDOR, validation testleri fonksiyonel test kadar önemlidir. ## İş Akışı 1. **Mevcut test altyapısını anla:** Test runner, kütüphaneler, mevcut testler, CI entegrasyonu, coverage. 2. **Risk analizi:** En kritik akışlar, en kırılgan bölgeler, geçmiş bug'lar, güvenlik hassas noktalar. 3. **Test planı:** Hangi seviyede (unit/integration/E2E) neyi test edeceğini önceliklendir. 4. **Testleri yaz:** Happy path + edge + hata + yetkisiz senaryolar. 5. **Çalıştır ve stabilize et:** Flaky varsa kök sebebini çöz. 6. **Kapsam ve boşlukları raporla.** 7. **Release öncesi smoke test planı** hazırla. ## Test Türleri (Zorunlu Kapsam) ### Unit Test - Saf fonksiyonlar, yardımcılar, iş kuralları, hesaplamalar, reducer/util'ler. - Edge girdiler: boş, null, sınır değerler, negatif, çok büyük, geçersiz format. - Hızlı ve izole; dış bağımlılıklar mock/stub. ### Integration Test - Katmanların birlikte çalışması: servis + DB (test DB / transaction rollback), route handler + validation + repository. - Gerçek şemayla; migration sonrası veri erişimi doğru mu. ### E2E Test (Playwright) - Kritik kullanıcı yolları: kayıt → giriş → ana CRUD → çıkış; ödeme akışı (varsa, test modu). - Gerçek tarayıcıda; seçiciler dayanıklı (role/testid), CSS class'a bağlı değil. ### API Test - Her endpoint: başarı (200/201), validation hatası (400/422), kimliksiz (401), yetkisiz (403), bulunamadı (404), conflict (409), rate limit (429). - Response şeması/contract doğrulaması; alan tipleri ve zarf tutarlılığı. ### Form Test - Doğru submit, alan bazlı validation hataları, çift submit engeli, loading/disabled state, başarı geri bildirimi. ### Auth Test & Role/Permission Test - Giriş/çıkış, session süresi, korunan route'a kimliksiz erişim engeli. - Rol matrisi: her rol için izinli/izinsiz aksiyonlar; dikey (rol yükseltme) ve yatay (başka kullanıcının kaynağı = IDOR) erişim engeli. ### Security Regression Test - Bilinen açıkların kapalı kaldığını doğrulayan testler: IDOR denemesi 403/404 dönmeli, mass-assignment reddedilmeli, `alg:none` JWT reddedilmeli, rate limit tetiklenmeli. - Injection denemeleri (SQL/NoSQL/XSS payload) güvenli işlenmeli. ### Edge Case Test - Eşzamanlılık/yarış, boş liste, tek eleman, çok büyük liste (pagination sınırları), unicode/emoji, zaman dilimi, sınır sayılar. ### Empty / Error / Loading State Test - Boş veri → empty state; istek hatası → error state + tekrar dene; yükleniyor → skeleton/loading; her biri render doğrulaması. ### Mobile Responsive & Browser Compatibility Test - Kritik ekranlar mobil viewport'ta (Playwright device emülasyonu) kırılmıyor; yatay scroll yok; dokunma hedefleri erişilir. - Hedef tarayıcılarda (Chromium/WebKit/Firefox) temel akış çalışır. ### Performance Test - Ağır listeleme/sorgu endpoint'lerinde yanıt süresi kabul sınırında; N+1 yok (sorgu sayısı doğrulaması). - Frontend'de temel Web Vitals / bundle regresyon kontrolü. ### Accessibility Test - Otomatik a11y taraması (axe) kritik sayfalarda; klavye navigasyonu ve focus sırası; label/aria ilişkileri. ### Production Smoke Test - Deploy sonrası: ana sayfalar 200, giriş/çıkış çalışır, health check yeşil, kritik akış bir kez uçtan uca; loglarda hata patlaması yok. ## Test Kalite Kuralları - İyi test adı: "ne, hangi koşulda, ne bekleniyor" (`returns 403 when accessing another user's order`). - Arrange-Act-Assert; her test tek bir davranışı doğrular. - Paylaşılan mutable state yok; testler bağımsız ve sırasız çalışır. - Zaman/rastgelelik enjekte edilir (sabit seed / fake timers); gerçek ağ yerine mock veya test sunucusu. - `sleep`/keyfi bekleme yerine koşul bekleme (waitFor). ## AI Nasıl Davranmalı? - Test yazmadan önce mevcut test stilini ve altyapısını incele; aynı pattern'i kullan. - Testleri gerçekten çalıştır ve sonuçları (geçti/kaldı, sayılar) raporda göster; "yazıldı" ile "geçiyor" farkını belirt. - Kırılgan test yazma; deterministik hale getirmeden bırakma. - Sadece happy path test edip "kapsandı" deme; edge + hata + yetkisiz senaryoları ekle. - Coverage boşluklarını dürüstçe raporla; test edilmemiş kritik yolu gizleme. ## Kritik Uyarılar - ⚠️ Testi geçirmek için üretim kodunu yanlış "düzeltmek" (assert'i zayıflatmak, güvenlik kontrolünü gevşetmek) yasak. - ⚠️ Flaky testi `retry` ile örtmek kök sebebi gizler. - ⚠️ Testler gerçek prod DB'ye/servise dokunmamalı; izole test ortamı kullan. - ⚠️ İmplementasyona sıkı bağlı testler her refactor'da kırılır — davranışı test et. - ⚠️ Güvenlik testlerini "sonra" bırakma; regresyon en çok orada acıtır. ## Kod Değiştirirken Uygulanacak Güvenli Sıra 1. **Önce oku** — test edilecek kod + mevcut testler + altyapı. 2. **Sonra analiz et** — kritik yollar, edge-case'ler, risk noktaları. 3. **Sonra planla** — hangi seviyede hangi testler. 4. **Sonra küçük değişiklik yap** — test test ekle, çalıştır. 5. **Sonra test et** — tüm suite yeşil + flaky yok. 6. **Sonra raporla.** ## Yapılacaklar - ✅ Test piramidine uygun dağılım (çok unit, orta integration, az E2E). - ✅ Her kritik endpoint için başarı + hata + yetkisiz senaryo. - ✅ Auth, rol/izin ve IDOR testleri. - ✅ Güvenlik regresyon testleri (kapatılan açıklar için). - ✅ Empty/error/loading state ve edge-case testleri. - ✅ Her düzeltilen bug için regresyon testi. - ✅ Deterministik, bağımsız, davranış-odaklı testler. - ✅ Testleri çalıştır ve gerçek sonuçları raporla. ## Yapılmayacaklar - ❌ Sadece happy path test edip "kapsandı" demek. - ❌ İmplementasyon detayına sıkı bağlı kırılgan test yazmak. - ❌ Flaky testi retry/sleep ile örtmek. - ❌ Testi geçirmek için güvenlik/doğruluk kontrolünü zayıflatmak. - ❌ Gerçek prod veri/servisine dokunan test. - ❌ Test yazıp çalıştırmadan "geçiyor" demek. - ❌ Güvenlik ve edge-case testlerini atlamak. ## Kontrol Listesi - [ ] Tüm test suite yeşil, flaky yok - [ ] Kritik kullanıcı yolları E2E ile kapsanıyor - [ ] API endpoint'leri başarı + hata + yetkisiz senaryolarıyla test edildi - [ ] Auth + rol/izin + IDOR testleri var - [ ] Güvenlik regresyon testleri eklendi - [ ] Empty/error/loading + edge-case testleri var - [ ] Düzeltilen bug'lar için regresyon testi eklendi - [ ] Testler deterministik ve bağımsız - [ ] Kapsam boşlukları raporlandı ## Raporlama Formatı (Test Raporu) 1. **Yapılan analiz** (test altyapısı + risk analizi) 2. **Bulunan problemler** (kapsam boşlukları, mevcut kırıklar, keşfedilen bug'lar) 3. **Yapılan değişiklikler** (eklenen testler, seviyeleri) 4. **Dokunulan dosyalar** 5. **Neden bu çözüm** (test seviyesi seçim gerekçeleri) 6. **Güvenlik etkisi** (eklenen güvenlik/regresyon testleri) 7. **Performans etkisi** (test süresi, perf testleri sonuçları) 8. **Test sonucu** (geçen/kalan sayıları, suite çıktısı, coverage varsa) 9. **Kalan riskler** (hâlâ test edilmeyen kritik yollar) 10. **Sonraki öneriler** (kapsam artırma önceliği, CI entegrasyonu) ## Kullanım Promptu ``` /testing-qa kurallarını yükle ve uygula. Görev: Bu proje için test ve QA katmanını kur. Risk analizi yap, test piramidine uygun testleri (unit/integration/E2E/API) yaz; auth, rol/izin, IDOR ve güvenlik regresyon testlerini ekle; empty/error/loading ve edge-case'leri kapsa. Testleri çalıştır, gerçek sonuçları ve kapsam boşluklarını raporla. Release için smoke test planı hazırla. ```