Repository navigation
Expand file tree
/
Copy path_test_e2e.py
More file actions
134 lines (108 loc) · 5.28 KB
/
Copy path_test_e2e.py
File metadata and controls
134 lines (108 loc) · 5.28 KB
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
"""
MoveMate Agent - 직접 실행 테스트
실행: $env:PYTHONUTF8 = "1"; .\.venv\Scripts\python.exe _test_e2e.py
"""
SEPARATOR = "=" * 60
def run(label, fn):
print(f"\n{SEPARATOR}")
print(f" {label}")
print(SEPARATOR)
try:
fn()
print("[PASS]")
except Exception as e:
print(f"[FAIL] {e}")
# ── TEST 1: 라우팅 키워드 (LLM 호출 없음) ───────────────────────
def test_routing():
from graph.nodes.supervisor_node import supervisor_node
cases = [
("전입신고 어떻게 해?", "legal", ["legal_agent"]),
("확정일자가 뭐야?", "legal", ["legal_agent"]),
("청년 버팀목 대출 자격 알려줘", "policy", ["policy_agent"]),
("이사 전 체크리스트 알려줘", "schedule", ["schedule_agent"]),
("6월 15일 이사인데 일정 짜줘", "schedule", ["schedule_agent"]),
("전세 계약이랑 청년 지원 정책 같이 알려줘", "both", ["legal_agent", "policy_agent"]),
]
base = {
"messages": [], "route": None, "matched_agents": None,
"legal_answer": None, "policy_answer": None,
"schedule_answer": None, "final_answer": None,
"moving_date": None, "project_id": None,
"completed_items": None, "contract_type": None,
"move_stage": None, "target": None, "region": None,
}
for query, exp_route, exp_agents in cases:
result = supervisor_node({**base, "query": query})
ok = "OK " if result["route"] == exp_route else "FAIL"
print(f" [{ok}] '{query[:30]}' → {result['route']} {result['matched_agents']}")
# ── TEST 2: mock 캘린더 조회 ─────────────────────────────────────
def test_mock_calendar():
from tools.schedule.get_calendar import get_google_calendar_events
import json
result = get_google_calendar_events.invoke({
"start_date": "2026-06-01",
"end_date": "2026-08-15",
})
events = json.loads(result)
print(f" 2026-06-01 ~ 08-15 일정 수: {len(events)}개")
for e in events:
print(f" - {e['date']} {e['title']} ({e['time']})")
# ── TEST 3: 일정 제안 툴 ─────────────────────────────────────────
def test_suggest_schedule():
from tools.schedule.suggest_schedule import suggest_schedule_tool
result = suggest_schedule_tool.invoke({
"moving_date": "2026-08-15",
"contract_type": "전세",
"move_stage": "이사전",
"completed_items_json": '["이사 지역 결정"]',
})
print(result[:500])
# ── TEST 4: 엔드투엔드 - legal_agent ────────────────────────────
def test_e2e_legal():
from graph.supervisor_graph import app
result = app.invoke(
{"query": "전입신고 어떻게 해?", "messages": []},
config={"configurable": {"thread_id": "e2e-legal-001"}},
)
print(f" route: {result['route']}")
print(f" answer: {(result.get('final_answer') or '')[:200]}")
# ── TEST 5: 엔드투엔드 - schedule_agent (체크리스트) ──────────────
def test_e2e_schedule_checklist():
from graph.supervisor_graph import app
result = app.invoke(
{
"query": "이사 전 체크리스트 알려줘",
"messages": [],
"contract_type": "전세",
"move_stage": "이사전",
},
config={"configurable": {"thread_id": "e2e-schedule-001"}},
)
print(f" route: {result['route']}")
print(f" answer: {(result.get('final_answer') or '')[:200]}")
# ── TEST 6: 엔드투엔드 - schedule_agent (캘린더 최적화) ────────────
def test_e2e_schedule_calendar():
from graph.supervisor_graph import app
result = app.invoke(
{
"query": "이사 일정 최적으로 짜줘. 내 캘린더 확인해서 바쁜 날 피해줘",
"messages": [],
"contract_type": "전세",
"move_stage": "이사전",
"moving_date": "2026-08-15",
},
config={"configurable": {"thread_id": "e2e-schedule-002"}},
)
print(f" route: {result['route']}")
print(f" answer: {(result.get('final_answer') or '')[:300]}")
# ── 실행 ──────────────────────────────────────────────────────────
if __name__ == "__main__":
run("TEST 1: 라우팅 키워드 (빠름, LLM 없음)", test_routing)
run("TEST 2: mock 캘린더 조회", test_mock_calendar)
run("TEST 3: 일정 제안 툴", test_suggest_schedule)
run("TEST 4: 엔드투엔드 - legal_agent", test_e2e_legal)
run("TEST 5: 엔드투엔드 - schedule (체크리스트)", test_e2e_schedule_checklist)
run("TEST 6: 엔드투엔드 - schedule (캘린더)", test_e2e_schedule_calendar)
print(f"\n{SEPARATOR}")
print(" 완료")
print(SEPARATOR)