disagreement/tests/test_event_dispatcher.py

94 lines
2.3 KiB
Python

import asyncio
import pytest
from disagreement.event_dispatcher import EventDispatcher
class DummyClient:
def __init__(self):
self.parsed = {}
self._messages = {"1": "cached"}
def parse_message(self, data):
self.parsed["message"] = True
return data
def parse_guild(self, data):
self.parsed["guild"] = True
return data
def parse_channel(self, data):
self.parsed["channel"] = True
return data
@pytest.mark.asyncio
async def test_dispatch_calls_listener():
client = DummyClient()
dispatcher = EventDispatcher(client)
called = {}
async def listener(payload):
called["data"] = payload
dispatcher.register("MESSAGE_CREATE", listener)
await dispatcher.dispatch("MESSAGE_CREATE", {"id": 1})
assert called["data"] == {"id": 1}
assert client.parsed.get("message")
@pytest.mark.asyncio
async def test_dispatch_listener_no_args():
client = DummyClient()
dispatcher = EventDispatcher(client)
called = False
async def listener():
nonlocal called
called = True
dispatcher.register("GUILD_CREATE", listener)
await dispatcher.dispatch("GUILD_CREATE", {"id": 123})
assert called
@pytest.mark.asyncio
async def test_unregister_listener():
client = DummyClient()
dispatcher = EventDispatcher(client)
called = False
async def listener(_):
nonlocal called
called = True
dispatcher.register("MESSAGE_CREATE", listener)
dispatcher.unregister("MESSAGE_CREATE", listener)
await dispatcher.dispatch("MESSAGE_CREATE", {"id": 1})
assert not called
@pytest.mark.asyncio
async def test_raw_event_dispatched_before_parsing():
client = DummyClient()
dispatcher = EventDispatcher(client)
events = {}
async def raw_listener(payload):
events["raw"] = payload
events["cache_before"] = client._messages.get("1")
async def delete_listener(_):
events["cache_after"] = client._messages.get("1")
dispatcher.register("RAW_MESSAGE_DELETE", raw_listener)
dispatcher.register("MESSAGE_DELETE", delete_listener)
await dispatcher.dispatch("MESSAGE_DELETE", {"id": "1"})
assert events["raw"]["id"] == "1"
assert events["cache_before"] == "cached"
assert events["cache_after"] is None