MpakoImageAIbot/tests/test_settings.py

77 lines
2.2 KiB
Python

from __future__ import annotations
from telegram import BotCommand, MenuButtonCommands, MenuButtonDefault
from bot import BOT_COMMANDS, MpakoBot, commands_need_update
from config import Settings
class FakeCommandsBot:
def __init__(self) -> None:
self.commands: tuple[BotCommand, ...] = ()
self.menu = MenuButtonDefault()
self.set_commands_calls = 0
async def get_my_commands(self):
return self.commands
async def set_my_commands(self, commands, **kwargs):
self.commands = tuple(commands)
self.set_commands_calls += 1
return True
async def get_chat_menu_button(self):
return self.menu
async def set_chat_menu_button(self, menu_button=None, **kwargs):
self.menu = menu_button
return True
def test_commands_need_update() -> None:
assert commands_need_update(BOT_COMMANDS, BOT_COMMANDS) is False
assert commands_need_update((), BOT_COMMANDS) is True
async def test_setup_commands_sets_commands_and_menu_once() -> None:
bot = MpakoBot(Settings(bot_token=""))
fake = FakeCommandsBot()
bot._bot = fake # type: ignore[assignment]
await bot._setup_commands()
assert fake.commands == BOT_COMMANDS
assert isinstance(fake.menu, MenuButtonCommands)
assert fake.set_commands_calls == 1
await bot._setup_commands()
assert fake.set_commands_calls == 1
def test_settings_command_is_not_shadowed_by_settings_attribute() -> None:
bot = MpakoBot(Settings(bot_token=""))
assert callable(bot._settings_command)
def test_quality_keyboard_marks_standard() -> None:
keyboard = MpakoBot._quality_keyboard("standard")
rows = keyboard.inline_keyboard
assert [row[0].text for row in rows] == [
"Стандартная ✅",
"Улучшенная",
]
assert [row[0].callback_data for row in rows] == [
"quality:standard",
"quality:improved",
]
def test_quality_keyboard_marks_improved() -> None:
keyboard = MpakoBot._quality_keyboard("improved")
rows = keyboard.inline_keyboard
assert [row[0].text for row in rows] == [
"Стандартная",
"Улучшенная ✅",
]