Files
remnawave-minishop/tests/test_main_bot_startup.py
T
2026-05-24 18:51:37 +03:00

80 lines
2.2 KiB
Python

import asyncio
import logging
from aiogram.exceptions import TelegramNetworkError
from bot.main_bot import _run_telegram_startup_step
def test_telegram_startup_network_error_retries_until_success_without_traceback(caplog):
calls = []
async def failing_step():
calls.append("try")
if len(calls) >= 3:
return
try:
raise OSError("Temporary failure in name resolution")
except OSError as exc:
raise TelegramNetworkError(
method=object(),
message="ClientConnectorDNSError: Cannot connect to host api.telegram.org:443",
) from exc
with caplog.at_level(logging.INFO):
result = asyncio.run(
_run_telegram_startup_step(
"registering mini app menu button",
failing_step,
"unexpected",
retry_delay_seconds=0,
)
)
assert result is True
assert calls == ["try", "try", "try"]
assert "Telegram network error while registering mini app menu button" in caplog.text
assert (
"Telegram step succeeded while registering mini app menu button on attempt 3" in caplog.text
)
assert "api.telegram.org" in caplog.text
assert "Temporary failure in name resolution" in caplog.text
assert "Traceback" not in caplog.text
def test_telegram_startup_step_returns_true_on_success():
calls = []
async def successful_step():
calls.append("ok")
result = asyncio.run(
_run_telegram_startup_step(
"setting bot commands",
successful_step,
"unexpected",
)
)
assert result is True
assert calls == ["ok"]
def test_telegram_startup_step_can_be_limited_for_tests(caplog):
async def failing_step():
raise TelegramNetworkError(method=object(), message="temporary dns failure")
with caplog.at_level(logging.WARNING):
result = asyncio.run(
_run_telegram_startup_step(
"setting bot commands",
failing_step,
"unexpected",
attempts=2,
retry_delay_seconds=0,
)
)
assert result is False
assert "after 2 attempts" in caplog.text