81 lines
2.3 KiB
Python
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"
|