fix max-bot, add tests
This commit is contained in:
parent
7abbaf7e7a
commit
2ad1438e1c
17 changed files with 1621 additions and 494 deletions
90
tests/adapter/max/test_api_client.py
Normal file
90
tests/adapter/max/test_api_client.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
from adapter.max.api_client import MaxApiError, MaxBotApi
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_updates_returns_marker_and_updates():
|
||||
api = MaxBotApi("token-x", base_url="http://max.test")
|
||||
try:
|
||||
api._client.request = AsyncMock(
|
||||
return_value=httpx.Response(
|
||||
200,
|
||||
json={
|
||||
"updates": [{"update_type": "message_created", "timestamp": 1}],
|
||||
"marker": 7,
|
||||
},
|
||||
)
|
||||
)
|
||||
updates, marker = await api.get_updates(types=["message_created"])
|
||||
assert len(updates) == 1
|
||||
assert updates[0]["update_type"] == "message_created"
|
||||
assert marker == 7
|
||||
|
||||
_, kwargs = api._client.request.call_args
|
||||
assert kwargs["params"]["types"] == "message_created"
|
||||
finally:
|
||||
await api.aclose()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_updates_non_dict_body():
|
||||
api = MaxBotApi("token-x", base_url="http://max.test")
|
||||
try:
|
||||
api._client.request = AsyncMock(return_value=httpx.Response(200, text="oops"))
|
||||
updates, marker = await api.get_updates()
|
||||
assert updates == []
|
||||
assert marker is None
|
||||
finally:
|
||||
await api.aclose()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_http_error_raises_max_api_error():
|
||||
api = MaxBotApi("token-x", base_url="http://max.test")
|
||||
try:
|
||||
api._client.request = AsyncMock(
|
||||
return_value=httpx.Response(401, json={"code": "verify.token", "message": "bad"})
|
||||
)
|
||||
with pytest.raises(MaxApiError) as ei:
|
||||
await api.get_me()
|
||||
assert ei.value.status == 401
|
||||
assert "bad" in str(ei.value).lower() or ei.value.payload
|
||||
finally:
|
||||
await api.aclose()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_send_message_to_chat_posts_json_body():
|
||||
api = MaxBotApi("token-x", base_url="http://max.test")
|
||||
try:
|
||||
api._client.request = AsyncMock(return_value=httpx.Response(200, json={"message": {}}))
|
||||
|
||||
await api.send_message_to_chat(12345, text="hi", attachments=None, fmt=None)
|
||||
|
||||
args, kw = api._client.request.call_args
|
||||
assert args[0] == "POST"
|
||||
assert args[1] == "/messages"
|
||||
assert kw["params"]["chat_id"] == 12345
|
||||
assert kw["json"] == {"text": "hi"}
|
||||
finally:
|
||||
await api.aclose()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_download_file_uses_get():
|
||||
api = MaxBotApi("token-x", base_url="http://max.test")
|
||||
try:
|
||||
api._client.get = AsyncMock(return_value=httpx.Response(200, content=b"\xff\xd8"))
|
||||
|
||||
buf = await api.download_file("https://files.example/bin")
|
||||
|
||||
assert buf == b"\xff\xd8"
|
||||
api._client.get.assert_awaited_once()
|
||||
finally:
|
||||
await api.aclose()
|
||||
Loading…
Add table
Add a link
Reference in a new issue