disagreement/tests/test_context_menus.py
2025-06-09 22:25:14 -06:00

81 lines
2.3 KiB
Python

import pytest
from disagreement.ext.app_commands.handler import AppCommandHandler
from disagreement.ext.app_commands.decorators import user_command, message_command
from disagreement.enums import ApplicationCommandType, InteractionType
from disagreement.interactions import Interaction
from disagreement.models import User, Message
@pytest.mark.asyncio
async def test_user_context_menu_invokes(dummy_bot):
handler = AppCommandHandler(dummy_bot)
captured = {}
@user_command(name="Info")
async def info(ctx, user: User):
captured["user"] = user
handler.add_command(info)
data = {
"id": "cmd",
"name": "Info",
"type": ApplicationCommandType.USER.value,
"target_id": "42",
"resolved": {
"users": {"42": {"id": "42", "username": "Bob", "discriminator": "0001"}}
},
}
payload = {
"id": "1",
"application_id": dummy_bot.application_id,
"type": InteractionType.APPLICATION_COMMAND.value,
"token": "tok",
"version": 1,
"data": data,
}
interaction = Interaction(payload, client_instance=dummy_bot)
await handler.process_interaction(interaction)
assert isinstance(captured.get("user"), User)
assert captured["user"].id == "42"
@pytest.mark.asyncio
async def test_message_context_menu_invokes(dummy_bot):
handler = AppCommandHandler(dummy_bot)
captured = {}
@message_command(name="Quote")
async def quote(ctx, message: Message):
captured["msg"] = message
handler.add_command(quote)
msg_data = {
"id": "99",
"channel_id": "c",
"author": {"id": "2", "username": "Ann", "discriminator": "0001"},
"content": "Hello",
"timestamp": "t",
}
data = {
"id": "cmd",
"name": "Quote",
"type": ApplicationCommandType.MESSAGE.value,
"target_id": "99",
"resolved": {"messages": {"99": msg_data}},
}
payload = {
"id": "1",
"application_id": dummy_bot.application_id,
"type": InteractionType.APPLICATION_COMMAND.value,
"token": "tok",
"version": 1,
"data": data,
}
interaction = Interaction(payload, client_instance=dummy_bot)
await handler.process_interaction(interaction)
assert isinstance(captured.get("msg"), Message)
assert captured["msg"].id == "99"