🔐 Device Limit Test Senaryosu

İki farklı tarayıcıdan giriş simülasyonu
📅 2025-12-07 🎯 Tenant: muzibu.com 👤 Test User: nurullah@nurullah.net

✅ Hazırlık Tamamlandı

👤 Test Kullanıcısı

✅ Email: nurullah@nurullah.net

✅ Password: g0nulcelen

✅ User ID: 1

✅ Session'lar temizlendi (0 aktif cihaz)

📦 Subscription

✅ Plan: Premium Yıllık

✅ Status: Active

🚨 Device Limit: 1 cihaz

→ 2. cihazda modal görmeli!

🎯 Test Adımları

1

İlk Giriş - Chrome Desktop Normal Giriş

Adres: https://muzibu.com/login

Email: nurullah@nurullah.net

Password: g0nulcelen

Beklenen Sonuç:

  • ✅ Giriş başarılı
  • ✅ Ana sayfaya yönlendirilmeli (index, dashboard değil)
  • ✅ Modal GÖRMEMELI (ilk giriş)
  • ✅ Console: "Session polling started"
2

İkinci Giriş - Firefox/Safari (Farklı Tarayıcı) ⚠️ Device Limit Aşılacak

Yeni Tarayıcı: Firefox, Safari veya Incognito Mode

Adres: https://muzibu.com/login

Aynı Hesap: nurullah@nurullah.net / g0nulcelen

Beklenen Sonuç:

  • ✅ Giriş başarılı
  • 🚨 Modal GÖRMELI! (device limit aşıldı)
  • ✅ Console: "Session invalid: device_limit_exceeded"
  • ✅ Console: "Device limit exceeded, showing modal..."
3

Modal İçeriği Kontrol UI Test

Modal'da Görülmesi Gerekenler:

  • Başlık: "Cihaz Limiti Aşıldı"
  • Açıklama: "Aynı anda maksimum 1 cihazdan giriş yapabilirsiniz"
  • Cihaz Listesi: 2 cihaz görmeli
    • Chrome Desktop (ilk giriş)
    • Firefox/Safari (mevcut cihaz - Mevcut Cihaz badge)
  • Checkbox'lar: Çoklu seçim için checkbox (radio değil!)
  • Mevcut Cihaz: Disabled checkbox (kendini çıkaramasın)
  • Butonlar:
    • "Tümünü Çıkar" butonu (1 cihaz yazmalı)
    • "Seçilenleri Çıkar (0)" butonu (başlangıçta disabled)
    • "İptal" butonu
4

Tek Cihaz Çıkarma Testi Fonksiyon Test

İşlem:

  1. İlk cihazın (Chrome Desktop) checkbox'ını işaretle
  2. Buton "Seçilenleri Çıkar (1)" olmalı
  3. Butona bas

Beklenen Sonuç:

  • ✅ Chrome tarayıcısında çıkış yapılmalı (session sonlandırılmalı)
  • ✅ Firefox/Safari'de kalmalı (aktif kalmalı)
  • ✅ Sayfa yenilenmeli (window.location.reload)
  • ✅ Toast mesajı: "1 cihaz çıkış yaptırıldı"
5

Toplu Çıkış Testi (Tümünü Çıkar) Bulk Action

İşlem:

  1. Yeni tarayıcıda yeniden giriş yap (2 cihaz olsun)
  2. Modal açıldığında "Tümünü Çıkar (1 cihaz)" butonuna bas
  3. Confirm dialog'u onayla

Beklenen Sonuç:

  • ✅ Tüm diğer cihazlar çıkış yapmalı (mevcut hariç)
  • ✅ Sadece mevcut cihaz aktif kalmalı
  • ✅ Toast mesajı: "1 cihaz çıkış yaptırıldı"
  • ✅ Sayfa yenilenmeli

💡 Console Log Kontrolleri (F12)

Beklenen Console Mesajları:

✅ İlk Giriş:

🔐 Session polling started (30s interval, initial check in 2s)

✅ Session valid

⚠️ İkinci Giriş:

⚠️ Session invalid: device_limit_exceeded

🚨 Device limit exceeded, showing modal...

📱 Fetching active devices...

❌ OLMAMASI GEREKENLER:

❌ "Alpine Expression Error: showDeviceLimitModal is not defined" (Auth sayfasında)

❌ "Queue running low!" spam (sürekli tekrar etmemeli)

❌ "No play context - cannot auto-refill queue" spam

🗄️ Database Kontrolleri (Opsiyonel)

SQL Sorguları:

1️⃣ Aktif cihazları kontrol et:

SELECT id, device_type, device_name, browser, ip_address, created_at
FROM user_active_sessions
WHERE user_id = 1
ORDER BY created_at DESC;

2️⃣ User device limit kontrol et:

SELECT id, email, device_limit FROM users WHERE id = 1;

→ NULL olmalı (subscription'dan alınacak)

3️⃣ Subscription device limit kontrol et:

SELECT sp.title, sp.device_limit, s.status
FROM subscriptions s
JOIN subscription_plans sp ON s.subscription_plan_id = sp.subscription_plan_id
WHERE s.user_id = 1 AND s.status = 'active';

→ device_limit = 1 olmalı

📊 Device Limit Hierarchy

1️⃣ User Level

Tablo: users.device_limit

Öncelik: En Yüksek

Durum: NULL (kullanılmıyor)

Kullanıcı özel limit belirlemek için

2️⃣ Subscription Level

Tablo: subscription_plans.device_limit

Öncelik: Orta

Durum: 1 cihaz (aktif)

Abonelik planına göre

3️⃣ Tenant Default

Tablo: settings.site_device_limit

Öncelik: En Düşük

Durum: Yok (fallback)

Tüm tenant için varsayılan

Kontrol Sırası: Sistem önce users.device_limit'e bakar (NULL), sonra subscription_plans.device_limit'e bakar (1 bulur ve kullanır). Settings'e bakmaya gerek kalmaz.