test: add webhook-to-dispatcher integration test
This commit is contained in:
parent
d35efae12e
commit
a58bbca9b7
67
tests/test_integration_webhook_flow.py
Normal file
67
tests/test_integration_webhook_flow.py
Normal file
@ -0,0 +1,67 @@
|
||||
"""Integration tests for webhook-to-dispatcher flow."""
|
||||
|
||||
import pytest
|
||||
import os
|
||||
import tempfile
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
from agent.task_queue import PersistentTaskQueue
|
||||
from agent.dispatcher import Dispatcher
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def task_queue():
|
||||
"""Create a temporary task queue for testing."""
|
||||
fd, db_path = tempfile.mkstemp(suffix=".db")
|
||||
os.close(fd)
|
||||
queue = PersistentTaskQueue(db_path=db_path)
|
||||
await queue.initialize()
|
||||
yield queue
|
||||
await queue.close()
|
||||
os.unlink(db_path)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_webhook_to_dispatcher_flow(task_queue):
|
||||
"""Gitea webhook → TaskQueue → Dispatcher 전체 흐름."""
|
||||
from agent.webapp import parse_gitea_event, generate_thread_id
|
||||
|
||||
# 1. Webhook 이벤트 파싱
|
||||
payload = {
|
||||
"action": "created",
|
||||
"comment": {"body": "@agent factor_calculator에 듀얼 모멘텀 추가해줘"},
|
||||
"issue": {"number": 42, "title": "Feature request", "body": "desc"},
|
||||
"repository": {"full_name": "quant/galaxis-po", "name": "galaxis-po"},
|
||||
}
|
||||
event = parse_gitea_event("issue_comment", payload)
|
||||
assert event["should_process"] is True
|
||||
|
||||
# 2. TaskQueue에 enqueue
|
||||
thread_id = generate_thread_id("galaxis-po", 42)
|
||||
task_id = await task_queue.enqueue(
|
||||
thread_id=thread_id,
|
||||
source="gitea",
|
||||
payload={
|
||||
"issue_number": event["issue_number"],
|
||||
"repo_owner": event["repo_owner"],
|
||||
"repo_name": event["repo_name"],
|
||||
"message": event["message"],
|
||||
},
|
||||
)
|
||||
|
||||
# 3. Dispatcher가 처리
|
||||
mock_run_agent = AsyncMock(return_value={"status": "completed"})
|
||||
dispatcher = Dispatcher(task_queue=task_queue)
|
||||
dispatcher._run_agent_for_task = mock_run_agent
|
||||
|
||||
await dispatcher._poll_once()
|
||||
|
||||
# 4. 에이전트가 호출되었는지 확인
|
||||
mock_run_agent.assert_called_once()
|
||||
call_task = mock_run_agent.call_args[0][0]
|
||||
assert call_task["thread_id"] == thread_id
|
||||
assert call_task["payload"]["issue_number"] == 42
|
||||
|
||||
# 5. 작업이 완료 처리되었는지 확인
|
||||
pending = await task_queue.get_pending()
|
||||
assert len(pending) == 0
|
||||
Loading…
x
Reference in New Issue
Block a user