fix linter, fix ci, fix tests
This commit is contained in:
@@ -5,12 +5,9 @@ from unittest.mock import AsyncMock, MagicMock, Mock, patch
|
||||
import pytest
|
||||
from aiogram import types
|
||||
from aiogram.fsm.context import FSMContext
|
||||
|
||||
from helper_bot.handlers.private.constants import BUTTON_TEXTS, FSM_STATES
|
||||
from helper_bot.handlers.private.private_handlers import (
|
||||
PrivateHandlers,
|
||||
create_private_handlers,
|
||||
)
|
||||
PrivateHandlers, create_private_handlers)
|
||||
from helper_bot.handlers.private.services import BotSettings
|
||||
|
||||
|
||||
@@ -125,18 +122,19 @@ class TestPrivateHandlers:
|
||||
)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_handle_emoji_message_no_emoji(self, mock_db, mock_settings, mock_message, mock_state):
|
||||
async def test_handle_emoji_message_no_emoji(
|
||||
self, mock_db, mock_settings, mock_message, mock_state
|
||||
):
|
||||
"""handle_emoji_message при user_emoji=None не отправляет ответ с эмодзи."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.check_user_emoji', AsyncMock(return_value=None))
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.check_user_emoji",
|
||||
AsyncMock(return_value=None),
|
||||
)
|
||||
await handlers.handle_emoji_message(mock_message, mock_state)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["START"])
|
||||
mock_message.answer.assert_not_called()
|
||||
|
||||
mock_message.forward.assert_called_once_with(
|
||||
chat_id=mock_settings.group_for_logs
|
||||
)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_handle_start_message(
|
||||
@@ -172,13 +170,24 @@ class TestPrivateHandlers:
|
||||
mock_db.update_user_date.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_handle_restart_message(self, mock_db, mock_settings, mock_message, mock_state):
|
||||
async def test_handle_restart_message(
|
||||
self, mock_db, mock_settings, mock_message, mock_state
|
||||
):
|
||||
"""handle_restart_message перезапускает состояние и отправляет сообщение."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.get_reply_keyboard', AsyncMock(return_value=Mock()))
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.update_user_info', AsyncMock())
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.check_user_emoji', AsyncMock())
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.get_reply_keyboard",
|
||||
AsyncMock(return_value=Mock()),
|
||||
)
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.update_user_info",
|
||||
AsyncMock(),
|
||||
)
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.check_user_emoji",
|
||||
AsyncMock(),
|
||||
)
|
||||
await handlers.handle_restart_message(mock_message, mock_state)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["START"])
|
||||
mock_message.answer.assert_called_once()
|
||||
@@ -188,7 +197,10 @@ class TestPrivateHandlers:
|
||||
"""suggest_post переводит в состояние SUGGEST и отправляет текст."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.messages.get_message', lambda x, y: "Suggest text")
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.messages.get_message",
|
||||
lambda x, y: "Suggest text",
|
||||
)
|
||||
await handlers.suggest_post(mock_message, mock_state)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["SUGGEST"])
|
||||
mock_message.answer.assert_called_once()
|
||||
@@ -198,7 +210,10 @@ class TestPrivateHandlers:
|
||||
"""end_message отправляет прощание и переводит в START."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.messages.get_message', lambda x, y: "Bye")
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.messages.get_message",
|
||||
lambda x, y: "Bye",
|
||||
)
|
||||
await handlers.end_message(mock_message, mock_state)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["START"])
|
||||
assert mock_message.answer.await_count >= 1
|
||||
@@ -208,55 +223,93 @@ class TestPrivateHandlers:
|
||||
"""stickers обновляет инфо о стикерах и отправляет ссылку."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.get_reply_keyboard', AsyncMock(return_value=Mock()))
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.get_reply_keyboard",
|
||||
AsyncMock(return_value=Mock()),
|
||||
)
|
||||
await handlers.stickers(mock_message, mock_state)
|
||||
mock_db.update_stickers_info.assert_awaited_once_with(mock_message.from_user.id)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["START"])
|
||||
mock_message.answer.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_connect_with_admin(self, mock_db, mock_settings, mock_message, mock_state):
|
||||
async def test_connect_with_admin(
|
||||
self, mock_db, mock_settings, mock_message, mock_state
|
||||
):
|
||||
"""connect_with_admin переводит в PRE_CHAT и отправляет сообщение."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.messages.get_message', lambda x, y: "Admin contact")
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.messages.get_message",
|
||||
lambda x, y: "Admin contact",
|
||||
)
|
||||
await handlers.connect_with_admin(mock_message, mock_state)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["PRE_CHAT"])
|
||||
mock_message.answer.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_resend_message_in_group_pre_chat(self, mock_db, mock_settings, mock_message, mock_state):
|
||||
async def test_resend_message_in_group_pre_chat(
|
||||
self, mock_db, mock_settings, mock_message, mock_state
|
||||
):
|
||||
"""resend_message_in_group при PRE_CHAT переводит в START и отправляет question."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
mock_state.get_state = AsyncMock(return_value=FSM_STATES["PRE_CHAT"])
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.get_reply_keyboard', AsyncMock(return_value=Mock()))
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.messages.get_message', lambda x, y: "Question?")
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.get_reply_keyboard",
|
||||
AsyncMock(return_value=Mock()),
|
||||
)
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.messages.get_message",
|
||||
lambda x, y: "Question?",
|
||||
)
|
||||
await handlers.resend_message_in_group_for_message(mock_message, mock_state)
|
||||
mock_message.forward.assert_called_once_with(chat_id=mock_settings.group_for_message)
|
||||
mock_message.forward.assert_called_once_with(
|
||||
chat_id=mock_settings.group_for_message
|
||||
)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["START"])
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_resend_message_in_group_chat(self, mock_db, mock_settings, mock_message, mock_state):
|
||||
async def test_resend_message_in_group_chat(
|
||||
self, mock_db, mock_settings, mock_message, mock_state
|
||||
):
|
||||
"""resend_message_in_group при CHAT оставляет в CHAT и отправляет question с leave markup."""
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
mock_state.get_state = AsyncMock(return_value=FSM_STATES["CHAT"])
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.get_reply_keyboard_leave_chat', lambda: Mock())
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.messages.get_message', lambda x, y: "Question?")
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.get_reply_keyboard_leave_chat",
|
||||
lambda: Mock(),
|
||||
)
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.messages.get_message",
|
||||
lambda x, y: "Question?",
|
||||
)
|
||||
await handlers.resend_message_in_group_for_message(mock_message, mock_state)
|
||||
mock_message.forward.assert_called_once_with(chat_id=mock_settings.group_for_message)
|
||||
mock_message.forward.assert_called_once_with(
|
||||
chat_id=mock_settings.group_for_message
|
||||
)
|
||||
mock_message.answer.assert_called()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_suggest_router_answers_and_schedules_background(self, mock_db, mock_settings, mock_message, mock_state):
|
||||
async def test_suggest_router_answers_and_schedules_background(
|
||||
self, mock_db, mock_settings, mock_message, mock_state
|
||||
):
|
||||
"""suggest_router сразу отвечает и планирует фоновую обработку."""
|
||||
mock_message.media_group_id = None
|
||||
handlers = create_private_handlers(mock_db, mock_settings)
|
||||
with pytest.MonkeyPatch().context() as m:
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.get_reply_keyboard', AsyncMock(return_value=Mock()))
|
||||
m.setattr('helper_bot.handlers.private.private_handlers.messages.get_message', lambda x, y: "Success")
|
||||
with patch.object(handlers.post_service, 'process_post', new_callable=AsyncMock):
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.get_reply_keyboard",
|
||||
AsyncMock(return_value=Mock()),
|
||||
)
|
||||
m.setattr(
|
||||
"helper_bot.handlers.private.private_handlers.messages.get_message",
|
||||
lambda x, y: "Success",
|
||||
)
|
||||
with patch.object(
|
||||
handlers.post_service, "process_post", new_callable=AsyncMock
|
||||
):
|
||||
await handlers.suggest_router(mock_message, mock_state)
|
||||
mock_state.set_state.assert_called_once_with(FSM_STATES["START"])
|
||||
mock_message.answer.assert_called_once()
|
||||
|
||||
Reference in New Issue
Block a user