File size: 6,245 Bytes
4b9f7d2
 
 
 
 
 
 
 
bb20239
 
 
8be9d0b
 
4b9f7d2
 
 
8be9d0b
4b9f7d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8be9d0b
 
4b9f7d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8be9d0b
4b9f7d2
8be9d0b
4b9f7d2
 
 
8be9d0b
 
 
 
 
4b9f7d2
8be9d0b
4b9f7d2
8be9d0b
4b9f7d2
 
 
8be9d0b
4b9f7d2
 
 
 
 
 
 
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import os, requests, time
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 wait_for_intent_training(timeout_sec=60):
    log("⏳ Intent eğitimi tamamlanıyor mu kontrol ediliyor...")
    for _ in range(timeout_sec // 3):
        logs = open("/tmp/logs.txt").read() if os.path.exists("/tmp/logs.txt") else ""
        if "✅ Intent eğitimi tamamlandı" in logs:
            return True
        time.sleep(3)
    return False

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

        # 1. LLM fallback testi
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "zzzzzzzzzzzzz"}, headers=headers)
        assert_test("LLM fallback", r.json(), "Bu konuda maalesef")

        # 2. Intent eğitimi (doviz + yol intentleri)
        intents = {
            "intents": [
                {
                    "name": "doviz-kuru",
                    "examples": ["dolar kuru nedir", "euro kuru nedir"],
                    "variables": ["currency:{dolar} kuru nedir", "currency:{euro} kuru nedir"],
                    "variable_formats": {"currency": "currency_format"},
                    "action": {
                        "url": f"{MOCK_BASE}/doviz",
                        "method": "POST",
                        "headers": [{"key": "Authorization", "value": "Bearer {auth_tokens.doviz-kuru.token}"}],
                        "body": {"currency": "{variables.currency}"},
                        "auth": {
                            "auth_endpoint": f"{MOCK_BASE}/auth",
                            "auth_body": {"username": "user", "password": "pass"},
                            "auth_token_path": "token",
                            "auth_refresh_endpoint": f"{MOCK_BASE}/refresh",
                            "refresh_body": {"refresh_token": "{auth_tokens.doviz-kuru.refresh_token}"}
                        },
                        "response_parser": {"field": "rate"},
                        "reply_template": "{variables.currency} kuru şu an {rate} TL."
                    }
                },
                {
                    "name": "yol-durumu",
                    "examples": ["Ankara'dan İstanbul'a yol durumu"],
                    "variables": ["from_location:{Ankara} to_location:{İstanbul} yol durumu"],
                    "action": {
                        "url": f"{MOCK_BASE}/yol",
                        "method": "POST",
                        "headers": [{"key": "Authorization", "value": "Bearer {auth_tokens.yol-durumu.token}"}],
                        "body": {
                            "from_location": "{variables.from_location}",
                            "to_location": "{variables.to_location}"
                        },
                        "auth": {
                            "auth_endpoint": f"{MOCK_BASE}/auth",
                            "auth_body": {"username": "user", "password": "pass"},
                            "auth_token_path": "token",
                            "auth_refresh_endpoint": f"{MOCK_BASE}/refresh",
                            "refresh_body": {"refresh_token": "{auth_tokens.yol-durumu.refresh_token}"}
                        },
                        "response_parser": {"field": "status"},
                        "reply_template": "{status}"
                    }
                }
            ]
        }
        requests.post(f"{BASE_URL}/train_intents", json=intents)
        if not wait_for_intent_training():
            assert_test("Intent eğitimi zamanında tamamlandı", "False", "True")
            summarize_tests()
            return

        r = requests.post(f"{BASE_URL}/load_intent_model")
        assert_test("Intent modeli yüklendi", r.json(), "ok")

        # 3. Eksik parametre — doviz-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")

        # 4. Parametre tamamlandı — euro
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "euro"}, headers=headers)
        assert_test("Parametre tamamlandı — euro", r.json(), "euro kuru şu an")

        # 5. Geçersiz parametre — currency
        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")

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

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

        # 8. 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(), "Bu konuda maalesef")

        summarize_tests()

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