Files
pezkuwi-telegram-miniapp/docs/P2P_E2E_TEST_SCENARIOS.md
T

6.4 KiB
Raw Blame History

P2P Fiat Trading E2E Test Scenarios

Bu belge, P2P fiat alım-satım sisteminin uçtan uca (E2E) test senaryolarını açıklar.

Genel Bakış

Testler beş ana senaryoyu kapsar:

  1. Mutlu Yol (Happy Path) - İki dürüst kullanıcı başarılı ticaret yapar
  2. Alıcı Dolandırıcılığı - Alıcı ödeme yaptığını söyler ama yapmaz
  3. Satıcı Dolandırıcılığı - Satıcı ödemeyi aldığına rağmen crypto'yu serbest bırakmaz
  4. İptal Senaryosu - Alıcı ödeme yapmadan önce ticareti iptal eder
  5. Zaman Aşımı - Ödeme süresi dolar

Test Kullanıcıları

Alice  - Telegram ID: 111111111 - Dürüst satıcı
Bob    - Telegram ID: 222222222 - Dürüst alıcı
Scammer - Telegram ID: 333333333 - Dolandırıcı

Senaryo 1: Mutlu Yol - İki Dürüst Kullanıcı

Adımlar

  1. Alice teklif oluşturur

    • 5 HEZ satılık
    • 100 TRY karşılığında
    • Ödeme yöntemi: Banka havalesi
  2. Sistem escrow'u kilitler

    • Alice'in internal balance'ından 5 HEZ kilitlenir
    • lock_escrow_internal RPC çağrılır
  3. Bob teklifi kabul eder

    • accept_p2p_offer RPC çağrılır
    • Trade kaydı oluşturulur (status: pending)
  4. Bob ödemeyi yapar ve işaretler

    • Banka havalesi yapar
    • "Ödeme yaptım" butonuna tıklar
    • Trade status: payment_sent
  5. Alice ödemeyi teyit eder

    • Bankasını kontrol eder, 100 TRY gelmiş
    • "Ödeme alındı" butonuna tıklar
    • release_escrow_internal çağrılır
    • Bob'un bakiyesine 5 HEZ eklenir
  6. Trade tamamlanır

    • Her iki tarafın reputation'ı artar
    • Trade status: completed

Beklenen Sonuç

  • Alice: 100 TRY alır (banka hesabında)
  • Bob: 5 HEZ alır (internal balance)
  • Her ikisinin de reputation'ı artar

Senaryo 2: Alıcı Dolandırıcılığı - "Sattım Desin Yollamasın"

Durum

Scammer, ödeme yaptığını işaretler ama aslında hiç ödeme yapmamıştır.

Adımlar

  1. Alice 5 HEZ satış teklifi oluşturur
  2. Scammer teklifi kabul eder
  3. Scammer ödeme yapmadan "Ödeme yaptım" der
  4. Alice bankasını kontrol eder - para YOK
  5. Alice escrow'u serbest BIRAKMAZ
  6. Alice dispute açar

Dispute Çözümü

Admin inceleme yapar:

  • Ödeme kanıtı var mı? HAYIR
  • Banka hesabında para var mı? HAYIR

Karar: Escrow Alice'e iade edilir

-- Admin işlemi
UPDATE p2p_fiat_trades
SET status = 'refunded',
    dispute_resolved_at = NOW(),
    dispute_resolution = 'Refunded to seller - no payment proof'
WHERE id = 'trade-id';

-- Escrow iadesi
SELECT refund_escrow(
  p_from_user_id := alice_id,
  p_token := 'HEZ',
  p_amount := 5
);

Beklenen Sonuç

  • Alice: 5 HEZ'i geri alır
  • Scammer: Hiçbir şey alamaz
  • ⚠️ Scammer'ın reputation'ı düşer

Senaryo 3: Satıcı Dolandırıcılığı - "Param Gelmedi Release Etmiyorum"

Durum

Scammer satıcıdır. Bob gerçekten ödeme yapar ama Scammer parayı almasına rağmen crypto'yu release etmez.

Adımlar

  1. Scammer 5 HEZ satış teklifi oluşturur
  2. Bob teklifi kabul eder
  3. Bob gerçekten 100 TRY gönderir (banka dekontu var)
  4. Bob "Ödeme yaptım" der ve dekont yükler
  5. Scammer "Para gelmedi" diye yalan söyler ve release etmez
  6. Confirmation deadline geçer
  7. Bob dispute açar

Dispute Çözümü

Admin inceleme yapar:

  • Ödeme kanıtı var mı? EVET (banka dekontu)
  • Dekont doğrulanabilir mi? EVET (IBAN, tarih, miktar uyuşuyor)

Karar: Admin zorla release yapar

-- Admin zorla release
SELECT release_escrow_internal(
  p_from_user_id := scammer_id,
  p_to_user_id := bob_id,
  p_token := 'HEZ',
  p_amount := 5,
  p_reference_type := 'admin_forced_release',
  p_reference_id := 'trade-id'
);

-- Trade güncelleme
UPDATE p2p_fiat_trades
SET status = 'completed',
    dispute_resolved_at = NOW(),
    dispute_resolution = 'Admin forced release - valid payment verified'
WHERE id = 'trade-id';

-- Scammer cezası
UPDATE p2p_reputation
SET disputed_trades = disputed_trades + 1,
    reputation_score = GREATEST(0, reputation_score - 20),
    trust_level = 'new'
WHERE user_id = scammer_id;

Beklenen Sonuç

  • Bob: 5 HEZ alır (haklı taraf)
  • Scammer: Parayı aldı ama reputation çöker
  • ⚠️ Scammer hesabı: "new" trust level, düşük score

Senaryo 4: Trade İptali

Durum

Bob teklifi kabul eder ama ödeme yapmadan vazgeçer.

Adımlar

  1. Alice 5 HEZ satış teklifi oluşturur
  2. Bob teklifi kabul eder (status: pending)
  3. Bob fikrini değiştirir ve iptal eder
  4. Offer tekrar "open" durumuna döner

Beklenen Sonuç

  • Alice: Teklifi hala açık, başkası kabul edebilir
  • ⚠️ Bob: reputation hafifçe düşebilir (çok fazla iptal zararlı)

Senaryo 5: Zaman Aşımı

Durum

Bob teklifi kabul eder ama süre dolana kadar ödeme yapmaz.

Adımlar

  1. Alice 5 HEZ teklifi oluşturur (30 dk limit)
  2. Bob kabul eder
  3. 30 dakika geçer, Bob ödeme yapmaz
  4. Sistem otomatik iptal eder (cron job)
  5. Offer tekrar açılır

Otomatik İşlem (Cron Job)

-- Süresi dolmuş pending trade'leri iptal et
UPDATE p2p_fiat_trades
SET status = 'cancelled',
    cancel_reason = 'Payment deadline expired'
WHERE status = 'pending'
AND payment_deadline < NOW();

-- Offer'ları tekrar aç
UPDATE p2p_fiat_offers o
SET remaining_amount = remaining_amount + t.crypto_amount,
    status = 'open'
FROM p2p_fiat_trades t
WHERE t.offer_id = o.id
AND t.status = 'cancelled'
AND t.cancel_reason = 'Payment deadline expired';

Testleri Çalıştırma

Unit Testler (Service key gerekmez)

npm run test:unit

E2E Testler (Service key gerekli)

export SUPABASE_SERVICE_ROLE_KEY="your-service-role-key"
npm run test:e2e

Tüm P2P Testleri

npm run test:p2p

Önemli Notlar

Escrow Güvenliği

  • Escrow internal ledger'da tutulur (blockchain'de değil)
  • P2P ticareti sırasında blockchain transaction OLMAZ
  • Blockchain sadece deposit/withdraw'da kullanılır

Dispute Politikası

  1. Ödeme kanıtı olmadan dispute açılamaz
  2. Admin her iki tarafı da dinler
  3. Banka kayıtları delil olarak kabul edilir
  4. Haksız tarafın reputation'ı ciddi şekilde düşer

Reputation Sistemi

  • Her başarılı trade: +1 puan
  • Her iptal: -2 puan
  • Kaybedilen dispute: -20 puan
  • Trust level'lar: new → basic → intermediate → advanced → verified