2019-11-18 17:44:07 +02:00
|
|
|
from collections import deque
|
2023-06-25 01:39:26 +03:00
|
|
|
from typing import TYPE_CHECKING, Any, AsyncGenerator, Deque, Dict, Optional, Type
|
2019-11-18 17:44:07 +02:00
|
|
|
|
|
|
|
|
from aiogram import Bot
|
2021-01-26 21:20:52 +02:00
|
|
|
from aiogram.client.session.base import BaseSession
|
|
|
|
|
from aiogram.methods import TelegramMethod
|
2023-03-11 20:46:36 +02:00
|
|
|
from aiogram.methods.base import Response, TelegramType
|
|
|
|
|
from aiogram.types import UNSET_PARSE_MODE, ResponseParameters, User
|
2019-11-18 17:44:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class MockedSession(BaseSession):
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super(MockedSession, self).__init__()
|
2021-05-25 00:56:44 +03:00
|
|
|
self.responses: Deque[Response[TelegramType]] = deque()
|
2023-03-11 20:46:36 +02:00
|
|
|
self.requests: Deque[TelegramMethod[TelegramType]] = deque()
|
2021-11-08 23:20:12 +02:00
|
|
|
self.closed = True
|
2019-11-18 17:44:07 +02:00
|
|
|
|
2021-05-25 00:56:44 +03:00
|
|
|
def add_result(self, response: Response[TelegramType]) -> Response[TelegramType]:
|
2019-11-18 17:44:07 +02:00
|
|
|
self.responses.append(response)
|
|
|
|
|
return response
|
|
|
|
|
|
2023-03-11 20:46:36 +02:00
|
|
|
def get_request(self) -> TelegramMethod[TelegramType]:
|
2019-11-18 17:44:07 +02:00
|
|
|
return self.requests.pop()
|
|
|
|
|
|
|
|
|
|
async def close(self):
|
2021-11-08 23:20:12 +02:00
|
|
|
self.closed = True
|
2019-11-18 17:44:07 +02:00
|
|
|
|
2020-06-14 17:14:10 +03:00
|
|
|
async def make_request(
|
2023-03-11 20:46:36 +02:00
|
|
|
self,
|
|
|
|
|
bot: Bot,
|
|
|
|
|
method: TelegramMethod[TelegramType],
|
|
|
|
|
timeout: Optional[int] = UNSET_PARSE_MODE,
|
2021-05-25 00:56:44 +03:00
|
|
|
) -> TelegramType:
|
2021-11-08 23:20:12 +02:00
|
|
|
self.closed = False
|
2023-03-11 20:46:36 +02:00
|
|
|
self.requests.append(method)
|
2021-05-25 00:56:44 +03:00
|
|
|
response: Response[TelegramType] = self.responses.pop()
|
|
|
|
|
self.check_response(
|
2023-07-11 23:17:26 +03:00
|
|
|
bot=bot, method=method, status_code=response.error_code, content=response.json()
|
2021-05-25 00:56:44 +03:00
|
|
|
)
|
2019-11-18 17:52:35 +02:00
|
|
|
return response.result # type: ignore
|
2019-11-18 17:44:07 +02:00
|
|
|
|
2020-01-22 22:54:29 +05:00
|
|
|
async def stream_content(
|
2023-02-12 06:56:11 +06:00
|
|
|
self,
|
|
|
|
|
url: str,
|
2023-06-25 01:39:26 +03:00
|
|
|
headers: Optional[Dict[str, Any]] = None,
|
|
|
|
|
timeout: int = 30,
|
|
|
|
|
chunk_size: int = 65536,
|
|
|
|
|
raise_for_status: bool = True,
|
2020-01-22 22:54:29 +05:00
|
|
|
) -> AsyncGenerator[bytes, None]: # pragma: no cover
|
|
|
|
|
yield b""
|
|
|
|
|
|
2019-11-18 17:44:07 +02:00
|
|
|
|
|
|
|
|
class MockedBot(Bot):
|
2019-11-18 17:52:35 +02:00
|
|
|
if TYPE_CHECKING:
|
|
|
|
|
session: MockedSession
|
|
|
|
|
|
2019-12-26 01:35:21 +02:00
|
|
|
def __init__(self, **kwargs):
|
2021-11-08 23:20:12 +02:00
|
|
|
super(MockedBot, self).__init__(
|
|
|
|
|
kwargs.pop("token", "42:TEST"), session=MockedSession(), **kwargs
|
|
|
|
|
)
|
2021-10-06 22:49:14 +03:00
|
|
|
self._me = User(
|
|
|
|
|
id=self.id,
|
|
|
|
|
is_bot=True,
|
|
|
|
|
first_name="FirstName",
|
|
|
|
|
last_name="LastName",
|
|
|
|
|
username="tbot",
|
|
|
|
|
language_code="uk-UA",
|
|
|
|
|
)
|
2019-11-18 17:44:07 +02:00
|
|
|
|
|
|
|
|
def add_result_for(
|
|
|
|
|
self,
|
2021-05-25 00:56:44 +03:00
|
|
|
method: Type[TelegramMethod[TelegramType]],
|
2019-11-18 17:44:07 +02:00
|
|
|
ok: bool,
|
2021-05-25 00:56:44 +03:00
|
|
|
result: TelegramType = None,
|
2019-11-18 17:44:07 +02:00
|
|
|
description: Optional[str] = None,
|
2021-08-01 00:34:50 +03:00
|
|
|
error_code: int = 200,
|
2019-11-18 17:44:07 +02:00
|
|
|
migrate_to_chat_id: Optional[int] = None,
|
|
|
|
|
retry_after: Optional[int] = None,
|
2021-05-25 00:56:44 +03:00
|
|
|
) -> Response[TelegramType]:
|
2019-11-18 17:52:35 +02:00
|
|
|
response = Response[method.__returning__]( # type: ignore
|
2019-11-18 17:44:07 +02:00
|
|
|
ok=ok,
|
|
|
|
|
result=result,
|
|
|
|
|
description=description,
|
|
|
|
|
error_code=error_code,
|
2021-05-25 00:56:44 +03:00
|
|
|
parameters=ResponseParameters(
|
|
|
|
|
migrate_to_chat_id=migrate_to_chat_id,
|
|
|
|
|
retry_after=retry_after,
|
|
|
|
|
),
|
2019-11-18 17:44:07 +02:00
|
|
|
)
|
|
|
|
|
self.session.add_result(response)
|
|
|
|
|
return response
|
|
|
|
|
|
2023-03-11 20:46:36 +02:00
|
|
|
def get_request(self) -> TelegramMethod[TelegramType]:
|
2019-11-18 17:44:07 +02:00
|
|
|
return self.session.get_request()
|