mirror of
https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
synced 2026-04-21 23:37:55 +00:00
6.4 KiB
6.4 KiB
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:
- Mutlu Yol (Happy Path) - İki dürüst kullanıcı başarılı ticaret yapar
- Alıcı Dolandırıcılığı - Alıcı ödeme yaptığını söyler ama yapmaz
- Satıcı Dolandırıcılığı - Satıcı ödemeyi aldığına rağmen crypto'yu serbest bırakmaz
- İptal Senaryosu - Alıcı ödeme yapmadan önce ticareti iptal eder
- 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
-
Alice teklif oluşturur
- 5 HEZ satılık
- 100 TRY karşılığında
- Ödeme yöntemi: Banka havalesi
-
Sistem escrow'u kilitler
- Alice'in internal balance'ından 5 HEZ kilitlenir
lock_escrow_internalRPC çağrılır
-
Bob teklifi kabul eder
accept_p2p_offerRPC çağrılır- Trade kaydı oluşturulur (status: pending)
-
Bob ödemeyi yapar ve işaretler
- Banka havalesi yapar
- "Ödeme yaptım" butonuna tıklar
- Trade status: payment_sent
-
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
-
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
- Alice 5 HEZ satış teklifi oluşturur
- Scammer teklifi kabul eder
- Scammer ödeme yapmadan "Ödeme yaptım" der
- Alice bankasını kontrol eder - para YOK
- Alice escrow'u serbest BIRAKMAZ
- 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
- Scammer 5 HEZ satış teklifi oluşturur
- Bob teklifi kabul eder
- Bob gerçekten 100 TRY gönderir (banka dekontu var)
- Bob "Ödeme yaptım" der ve dekont yükler
- Scammer "Para gelmedi" diye yalan söyler ve release etmez
- Confirmation deadline geçer
- 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
- Alice 5 HEZ satış teklifi oluşturur
- Bob teklifi kabul eder (status: pending)
- Bob fikrini değiştirir ve iptal eder
- 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
- Alice 5 HEZ teklifi oluşturur (30 dk limit)
- Bob kabul eder
- 30 dakika geçer, Bob ödeme yapmaz
- Sistem otomatik iptal eder (cron job)
- 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ı
- Ödeme kanıtı olmadan dispute açılamaz
- Admin her iki tarafı da dinler
- Banka kayıtları delil olarak kabul edilir
- 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