def api_builder( text: str, from_id: int = 92540660, on_datetime: datetime.datetime = datetime.datetime.fromtimestamp( 1620678005), n_messages: int = 1): # Все подобрано как отвечает реальный ВК, поэтому дважды подумайте, прежде чем менять # Забрал с https://github.com/timoniq/vkbottle/blob/c6ebefb/tests/bot_test.py def callback(data: dict): # Этот парень нужен if "groups.getById" in data["url"]: return {"response": [{"id": 1}]} # И этот тоже elif "groups.getLongPollServer" in data["url"]: return {"response": {"ts": 1, "server": "!SERVER!", "key": ""}} # И этот тоже elif "!SERVER!" in data["url"]: return raw_message_builder(text=text, from_id=from_id, on_datetime=on_datetime, n_messages=n_messages) # Отправка сообщений со стороны бота. elif "messages.send" in data["url"]: target_data = data['data'] if 'keyboard' in target_data: try: json.dumps(target_data['keyboard']) except TypeError: target_data['keyboard'] = target_data[ 'keyboard'].get_json() return json.dumps({"response": {**data['data'], **{"r": 1}}}) # Создадим API, в котором клиент будет ходить на коллбеки выше ВМЕСТО vk.com api = API("token") api.http._session = MockedClient(None, callback=callback) return api
async def test_client(): client = MockedClient("some text") text = await client.request_text("https://example.com") await client.close() assert text == "some text"
async def test_session_manager(): session_manager = ManySessionManager(lambda: MockedClient("some text")) async with session_manager as session: assert await session.request_text("GET", "https://example.com") == "some text"
def set_http_callback(api: API, callback: Callable[[dict], Any]): api.http_client = MockedClient(callback=callback)
def set_http_callback(api: API, callback: typing.Callable[[dict], typing.Any]): api.http._session = MockedClient(callback=callback)