2019-12-03 00:03:15 +02:00
|
|
|
import asyncio
|
2020-01-26 02:34:32 +02:00
|
|
|
import datetime
|
2020-10-04 20:56:34 +05:30
|
|
|
from functools import wraps
|
2019-12-03 00:03:15 +02:00
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
|
from aiogram import Bot
|
2020-10-04 20:56:34 +05:30
|
|
|
from aiogram.dispatcher.event.handler import HandlerObject
|
2022-08-14 01:07:52 +03:00
|
|
|
from aiogram.handlers import BaseHandler
|
2021-01-26 21:20:52 +02:00
|
|
|
from aiogram.types import Chat, Message, Update
|
2019-12-03 00:03:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class MyHandler(BaseHandler):
|
|
|
|
|
async def handle(self) -> Any:
|
|
|
|
|
await asyncio.sleep(0.1)
|
|
|
|
|
return 42
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestBaseClassBasedHandler:
|
|
|
|
|
async def test_base_handler(self):
|
|
|
|
|
event = Update(update_id=42)
|
|
|
|
|
handler = MyHandler(event=event, key=42)
|
|
|
|
|
|
|
|
|
|
assert handler.event == event
|
|
|
|
|
assert handler.data["key"] == 42
|
|
|
|
|
assert not hasattr(handler, "filters")
|
|
|
|
|
assert await handler == 42
|
|
|
|
|
|
2020-01-26 02:34:32 +02:00
|
|
|
async def test_bot_from_context(self):
|
2019-12-03 00:03:15 +02:00
|
|
|
event = Update(update_id=42)
|
|
|
|
|
bot = Bot("42:TEST")
|
2023-07-28 22:23:32 +03:00
|
|
|
handler = MyHandler(event=event, key=42, bot=bot)
|
|
|
|
|
assert handler.bot == bot
|
2019-12-03 00:03:15 +02:00
|
|
|
|
2023-07-28 22:23:32 +03:00
|
|
|
async def test_bot_from_context_missing(self):
|
|
|
|
|
event = Update(update_id=42)
|
|
|
|
|
handler = MyHandler(event=event, key=42)
|
2019-12-03 00:03:15 +02:00
|
|
|
|
2023-07-28 22:23:32 +03:00
|
|
|
with pytest.raises(RuntimeError):
|
|
|
|
|
handler.bot
|
2019-12-03 00:03:15 +02:00
|
|
|
|
2020-01-26 02:34:32 +02:00
|
|
|
async def test_bot_from_data(self):
|
2019-12-03 00:03:15 +02:00
|
|
|
event = Update(update_id=42)
|
|
|
|
|
bot = Bot("42:TEST")
|
|
|
|
|
handler = MyHandler(event=event, key=42, bot=bot)
|
|
|
|
|
|
|
|
|
|
assert "bot" in handler.data
|
|
|
|
|
assert handler.bot == bot
|
2020-01-26 02:34:32 +02:00
|
|
|
|
|
|
|
|
def test_update_from_data(self):
|
|
|
|
|
event = Message(
|
|
|
|
|
message_id=42, chat=Chat(id=42, type="private"), date=datetime.datetime.now()
|
|
|
|
|
)
|
|
|
|
|
update = Update(update_id=42, message=event)
|
|
|
|
|
handler = MyHandler(event=event, update=update)
|
|
|
|
|
|
|
|
|
|
assert handler.event == event
|
|
|
|
|
assert handler.update == update
|
2020-10-04 20:56:34 +05:30
|
|
|
|
|
|
|
|
async def test_wrapped_handler(self):
|
|
|
|
|
# wrap the handler on dummy function
|
|
|
|
|
handler = wraps(MyHandler)(lambda: None)
|
|
|
|
|
assert HandlerObject(handler).awaitable is True
|