File size: 3,897 Bytes
1cf642c
95d826d
1cf642c
 
 
537f2d3
95d826d
 
 
 
 
 
 
 
1cf642c
 
 
 
 
 
 
30a1cb5
95d826d
1cf642c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
537f2d3
1cf642c
537f2d3
 
 
1cf642c
537f2d3
 
 
1cf642c
 
30a1cb5
34fde90
95d826d
1cf642c
30a1cb5
55a98ca
3fbf837
34fde90
1cf642c
30a1cb5
1cf642c
34fde90
1cf642c
30a1cb5
1cf642c
d70d9a3
1cf642c
30a1cb5
d70d9a3
1cf642c
 
30a1cb5
34fde90
d70d9a3
34fde90
30a1cb5
d70d9a3
3fbf837
 
1cf642c
 
 
95d826d
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
import os
import json
import requests
from log import log

BASE_URL = os.environ.get("BASE_URL", "http://localhost:7860")
SERVICE_CONFIG_PATH = os.environ.get("SERVICE_CONFIG_PATH", "service_config.json")

with open(SERVICE_CONFIG_PATH, "r", encoding="utf-8") as f:
    service_config = json.load(f)

fallback_answers = service_config["projects"]["project1"]["llm"]["fallback_answers"]
currency_options = service_config["config"]["data_formats"]["currency_format"]["valid_options"]
city_options = service_config["config"]["data_formats"]["city_format"]["valid_options"]

test_results = []

def assert_test(name, actual, expected_substring, explanation=None):
    if explanation:
        log(f"🧪 TEST: {name}{explanation}")
    actual_str = str(actual)
    passed = expected_substring in actual_str
    if passed:
        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")
        if response.status_code != 200:
            raise Exception(f"Start chat başarısız: {response.status_code}, {response.text}")

        session_id = response.json().get("session_id")
        if not session_id:
            raise Exception("Session ID alınamadı.")

        headers = {"X-Session-ID": session_id}

        # === Test 1: LLM fallback
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "Mars'a bilet alabilir miyim?"}, headers=headers)
        assert_test("LLM fallback", r.json(), "")

        # === Test 2: Döviz kuru — başarılı
        valid_currency = currency_options[0]
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": f"{valid_currency} kuru nedir"}, headers=headers)
        assert_test("Parametre tamamlandı — dolar", r.json(), f"{valid_currency} kuru şu an")

        # === Test 3: Döviz kuru — geçersiz parametre
        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 cinsi")

        # === Test 4: Yol durumu — eksik parametreleri isteme
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "yol durumu"}, headers=headers)
        assert_test("Eksik parametre — from_location & to_location", r.json(), "Lütfen şu bilgileri sırayla belirtir misiniz")

        # === Test 4b: Yol durumu — eksik parametreleri tamamlama ve doğrulama
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": f"{city_options[0]} {city_options[1]}"}, headers=headers)
        assert_test("Parametre tamamlandı — yol durumu", r.json(), "trafik açık")

        # === Test 5: Hava durumu — eksik parametre isteme
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": "hava durumu"}, headers=headers)
        assert_test("Eksik parametre — city", r.json(), "Lütfen şu bilgileri sırayla belirtir misiniz")

        # === Test 5b: Hava durumu — parametre tamamlama ve doğrulama
        r = requests.post(f"{BASE_URL}/chat", json={"user_input": f"{city_options[0]}"}, headers=headers)
        assert_test("Parametre tamamlandı — hava durumu", r.json(), f"{city_options[0]} için hava güneşli")

        summarize_tests()

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