$npx -y skills add komunite/tezgah --skill saas-testingSaaS uygulaması için test stratejisi kur. Vitest ile birim test, Playwright ile E2E test, API route testi, webhook mock, Stripe test modu ve CI entegrasyonu. Bu skill'i kullanıcı test, test yazma, E2E, birim test, Playwright, Vitest, coverage veya kalite güvencesi ile ilgili bir
| 1 | # SaaS Testing — Test Stratejisi ve Kalite Güvencesi |
| 2 | |
| 3 | Bu skill, bir SaaS uygulamasının test altyapısını kurar. Test olmadan "production-ready" iddiası eksiktir — ödeme webhook'unun çalıştığını, auth akışının kırılmadığını ve API'nin beklendiği gibi davrandığını sadece testlerle garanti edebilirsin. |
| 4 | |
| 5 | **Bağımlılık:** Bu skill **saas-launcher** orkestratör skill'inin Deployment öncesi kalite güvence adımıdır. Bağımsız olarak da kullanılabilir. |
| 6 | |
| 7 | **Bağlı skill'ler:** |
| 8 | - **saas-auth** — Giriş/kayıt akışları E2E test edilir. |
| 9 | - **saas-payments** — Webhook handler'lar ve checkout akışı test edilir. |
| 10 | - **saas-api-security** — Rate limiting ve input validation testleri. |
| 11 | |
| 12 | --- |
| 13 | |
| 14 | ## Test Piramidi — SaaS İçin |
| 15 | |
| 16 | ### Hangi Test Türü Ne Zaman |
| 17 | |
| 18 | **Birim Test (Unit Test) — Vitest:** |
| 19 | Tekil fonksiyonları ve utility'leri test eder. Hızlı çalışır, dış bağımlılık yok. Kullanım: fiyat hesaplama, plan kontrolü, input validation, helper fonksiyonlar. |
| 20 | |
| 21 | **Entegrasyon Test (Integration Test) — Vitest:** |
| 22 | API route'larını test eder. HTTP isteği gönderir, yanıtı doğrular. Kullanım: auth endpoint'leri, checkout API, webhook handler. |
| 23 | |
| 24 | **Uçtan Uca Test (E2E Test) — Playwright:** |
| 25 | Gerçek bir tarayıcıda kullanıcı akışlarını test eder. En yavaş ama en güvenilir. Kullanım: kayıt → giriş → plan satın al → dashboard erişimi. |
| 26 | |
| 27 | ### Başlangıç Önceliği |
| 28 | |
| 29 | Day 1'de her şeyi test etmeye çalışma. Öncelik sırası: |
| 30 | |
| 31 | 1. **Webhook handler testi** — Para alınıp plan aktifleşmezse gelir kaybı |
| 32 | 2. **Auth akışı E2E testi** — Giriş yapılamazsa uygulama kullanılamaz |
| 33 | 3. **Kritik API route testleri** — Plan kontrolü, kaynak oluşturma |
| 34 | 4. **Input validation testleri** — Güvenlik katmanı |
| 35 | |
| 36 | --- |
| 37 | |
| 38 | ## Vitest Kurulumu |
| 39 | |
| 40 | ### Neden Vitest |
| 41 | |
| 42 | Jest'e alternatif, modern test runner. Avantajları: Vite tabanlı — çok hızlı, ESM desteği doğal, Jest uyumlu API (geçiş kolay), TypeScript desteği dahili, HMR ile watch mode. |
| 43 | |
| 44 | ### Kurulum |
| 45 | |
| 46 | ``` |
| 47 | npm install -D vitest @vitejs/plugin-react |
| 48 | ``` |
| 49 | |
| 50 | Proje kökünde `vitest.config.ts` oluştur. Test dosyaları için `__tests__/` klasörü veya dosya adında `.test.ts` / `.spec.ts` uzantısı kullan. |
| 51 | |
| 52 | `package.json`'a script ekle: |
| 53 | - `"test": "vitest run"` — tek seferlik çalıştır |
| 54 | - `"test:watch": "vitest"` — watch mode |
| 55 | - `"test:coverage": "vitest run --coverage"` — coverage raporu |
| 56 | |
| 57 | ### API Route Testi Yaklaşımı |
| 58 | |
| 59 | Next.js API route'larını test etmek için route handler fonksiyonunu doğrudan import edip mock Request nesnesi ile çağır. Gerçek HTTP sunucusu ayağa kaldırmaya gerek yok. |
| 60 | |
| 61 | Her test: |
| 62 | 1. Mock request oluştur (method, headers, body) |
| 63 | 2. Route handler'ı çağır |
| 64 | 3. Response status ve body'yi doğrula |
| 65 | |
| 66 | ### Webhook Handler Testi |
| 67 | |
| 68 | Webhook testleri en kritik testlerdir. Test stratejisi: |
| 69 | |
| 70 | 1. **İmza doğrulama testi:** Geçerli imza ile webhook'un işlendiğini, geçersiz imza ile reddedildiğini doğrula. |
| 71 | 2. **Event işleme testi:** Her webhook event türü için veritabanı değişikliğini doğrula. Örnek: `checkout.session.completed` → kullanıcı planı "pro" olmalı. |
| 72 | 3. **Idempotency testi:** Aynı event'i iki kez gönder, sonucun değişmediğini doğrula. |
| 73 | |
| 74 | **Stripe test modu:** Stripe CLI ile webhook'ları localhost'a yönlendir: |
| 75 | ``` |
| 76 | stripe listen --forward-to localhost:3000/api/stripe/webhook |
| 77 | stripe trigger checkout.session.completed |
| 78 | ``` |
| 79 | |
| 80 | ### Mock Stratejisi |
| 81 | |
| 82 | Dış servisleri mock'la, kendi kodunu mock'lama: |
| 83 | |
| 84 | - **Mock'lanması gerekenler:** Stripe API, Resend API, Supabase client (isteğe bağlı) |
| 85 | - **Mock'lanmaması gerekenler:** Kendi utility fonksiyonların, validation şemaların — bunları gerçek çalıştır |
| 86 | |
| 87 | Vitest'in `vi.mock()` fonksiyonu ile modül seviyesinde mock: |
| 88 | - Stripe SDK'yı mock'la — gerçek API çağrısı yapılmasın |
| 89 | - Resend SDK'yı mock'la — test sırasında e-posta gönderilmesin |
| 90 | |
| 91 | --- |
| 92 | |
| 93 | ## Playwright E2E Kurulumu |
| 94 | |
| 95 | ### Neden Playwright |
| 96 | |
| 97 | Cypress'e alternatif, modern E2E test aracı. Avantajları: Çoklu tarayıcı desteği (Chromium, Firefox, WebKit), otomatik bekleme (auto-wait), trace viewer ile debugging, headless CI modu. |
| 98 | |
| 99 | ### Kurulum |
| 100 | |
| 101 | ``` |
| 102 | npm install -D @playwright/test |
| 103 | npx playwright install |
| 104 | ``` |
| 105 | |
| 106 | `playwright.config.ts` oluştur. Temel ayarlar: |
| 107 | - `baseURL`: `http://localhost:3000` |
| 108 | - `webServer`: test öncesi dev server'ı otomatik başlat |
| 109 | - `use.trace`: `on-first-retry` — sadece başarısız testlerde trace kaydet |
| 110 | |
| 111 | ### Temel E2E Senaryoları |
| 112 | |
| 113 | **Auth akışı:** |
| 114 | 1. Landing page'e git |
| 115 | 2. "Giriş Yap" butonuna tıkla |
| 116 | 3. E-posta ile Magic Link giriş formunu doldur (veya test OAuth akışı) |
| 117 | 4. Dashboard'a yönlendirildiğini doğrula |
| 118 | 5. Korumalı sayfaya erişebildiğini doğrula |
| 119 | |
| 120 | **Checkout akışı:** |
| 121 | 1. Giriş yap |
| 122 | 2. Fiyatlandırma sayfasına git |
| 123 | 3. Plan seç |
| 124 | 4. Stripe Checkout'a yönlendirildiğini doğrula |
| 125 | 5 |