galaxis-agent/tests/test_discord_handler.py
머니페니 5a471907fa feat: add Discord Bot Gateway handler with mention parsing
Implements discord.py Bot Gateway to receive @agent mentions and enqueue tasks.
Includes deterministic thread ID generation and message parsing for issue numbers,
repo names, and freeform requests. Supports message queuing for running threads.

Files:
- agent/integrations/discord_handler.py: DiscordHandler class with event handling
- tests/test_discord_handler.py: 4 tests for parsing and thread ID generation

All tests pass (95 total).
2026-03-20 18:18:43 +09:00

44 lines
1.7 KiB
Python

# tests/test_discord_handler.py
import pytest
from unittest.mock import MagicMock, AsyncMock
def test_parse_discord_mention_with_issue():
"""이슈 번호가 포함된 Discord 멘션을 파싱한다."""
from agent.integrations.discord_handler import parse_discord_message
result = parse_discord_message("이슈 #42 해결해줘", bot_user_id=123)
assert result["issue_number"] == 42
assert result["repo_name"] == "galaxis-po"
assert "해결해줘" in result["message"]
def test_parse_discord_mention_with_repo():
"""리포가 명시된 Discord 멘션을 파싱한다."""
from agent.integrations.discord_handler import parse_discord_message
result = parse_discord_message("galaxis-po 이슈 #10 수정해줘", bot_user_id=123)
assert result["issue_number"] == 10
assert result["repo_name"] == "galaxis-po"
def test_parse_discord_mention_freeform():
"""이슈 번호 없는 자유형 요청을 파싱한다."""
from agent.integrations.discord_handler import parse_discord_message
result = parse_discord_message("factor_calculator에 듀얼 모멘텀 추가해줘", bot_user_id=123)
assert result["issue_number"] == 0
assert result["message"] == "factor_calculator에 듀얼 모멘텀 추가해줘"
def test_generate_discord_thread_id():
"""Discord 메시지에서 결정론적 thread_id를 생성한다."""
from agent.integrations.discord_handler import generate_discord_thread_id
tid1 = generate_discord_thread_id(channel_id=111, message_id=222)
tid2 = generate_discord_thread_id(channel_id=111, message_id=222)
tid3 = generate_discord_thread_id(channel_id=111, message_id=333)
assert tid1 == tid2
assert tid1 != tid3
assert len(tid1) == 36