File size: 3,187 Bytes
16134a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
import requests
from log import log

BASE_URL = "http://localhost:7860"
MOCK_BASE = os.getenv("MOCK_BASE_URL")  # Örnek: https://abc123.ngrok.io

test_results = []

def assert_test(name, actual, expected_substring, explanation=None):
    if explanation:
        log(f"🧪 TEST: {name}{explanation}")
    actual_str = str(actual)
    if expected_substring in actual_str:
        log(f"[TEST] {name:<45} ✅")
        test_results.append((name, True))
    else:
        log(f"[TEST] {name:<45} ❌ — Beklenen: {expected_substring}, Gelen: {actual_str[:100]}...")
        test_results.append((name, False))

def summarize_tests():
    total = len(test_results)
    success = sum(1 for _, ok in test_results if ok)
    fail = total - success
    log("🧾 TEST SONUCU ÖZETİ")
    log(f"🔢 Toplam Test       : {total}")
    log(f"✅ Başarılı          : {success}")
    log(f"❌ Başarısız         : {fail}")

def run_all_tests():
    try:
        log("🚀 Test süreci başlatıldı.")
        response = requests.post(f"{BASE_URL}/start_chat?project_name=project1")
        session_id = response.json().get("session_id")
        headers = {"X-Session-ID": session_id}

        # 1. LLM fallback testi (intent bulunamadığında)
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "bilinmeyen bir soru"}, headers=headers)
        assert_test("LLM fallback", r.json(), "maalesef")

        # 2. Eksik parametre testi (döviz kuru)
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "döviz kuru nedir"}, headers=headers)
        assert_test("Eksik parametre — currency", r.json(), "Lütfen currency")

        # 3. Eksik parametre tamamlanınca tekrar deneme
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "dolar"}, headers=headers)
        assert_test("Parametre tamamlandı — dolar", r.json(), "dolar kuru şu an")

        # 4. Geçersiz parametre validasyonu
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "yenidolar kuru nedir"}, headers=headers)
        assert_test("Geçersiz parametre — currency", r.json(), "geçerli bir döviz")

        # 5. Konu değişikliği → awaiting reset
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "hava nasıl"}, headers=headers)
        assert_test("Konu değişikliği sonrası fallback", r.json(), "maalesef")

        # 6. Yol durumu testi (iki parametre eksik veya biri eksik)
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "yol durumu"}, headers=headers)
        assert_test("Eksik parametre — from_location", r.json(), "Lütfen from_location")

        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "Ankara"}, headers=headers)
        assert_test("Eksik parametre — to_location", r.json(), "Lütfen to_location")

        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "İstanbul"}, headers=headers)
        assert_test("Parametre tamamlandı — yol durumu", r.json(), "trafik açık")

        summarize_tests()

    except Exception as e:
        log(f"❌ run_all_tests sırasında hata oluştu: {e}")