90 lines
3.0 KiB
Python
90 lines
3.0 KiB
Python
import unittest
|
|
from types import SimpleNamespace
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
from bot.handlers.admin import common as admin_common
|
|
from bot.handlers.admin import sync_admin as sync_module
|
|
|
|
|
|
class _I18n:
|
|
def gettext(self, _lang, key, **kwargs):
|
|
if kwargs:
|
|
return f"{key}:{kwargs}"
|
|
return key
|
|
|
|
|
|
def _settings():
|
|
return SimpleNamespace(DEFAULT_LANGUAGE="ru")
|
|
|
|
|
|
class AdminBotSyncQueueTests(unittest.IsolatedAsyncioTestCase):
|
|
async def test_sync_command_enqueues_panel_sync_instead_of_running_inline(self):
|
|
enqueued = []
|
|
|
|
async def fake_enqueue(settings, provider, payload, *, event_id=None):
|
|
enqueued.append((settings, provider, payload, event_id))
|
|
return True
|
|
|
|
message = SimpleNamespace(
|
|
from_user=SimpleNamespace(id=42),
|
|
chat=SimpleNamespace(id=100500),
|
|
answer=AsyncMock(),
|
|
)
|
|
i18n_data = {"current_language": "ru", "i18n_instance": _I18n()}
|
|
|
|
with (
|
|
patch.object(sync_module, "enqueue_webhook_event", fake_enqueue),
|
|
patch.object(sync_module, "perform_sync", AsyncMock()) as perform_sync,
|
|
):
|
|
await sync_module.sync_command_handler(
|
|
message_event=message,
|
|
bot=AsyncMock(),
|
|
settings=_settings(),
|
|
i18n_data=i18n_data,
|
|
panel_service=AsyncMock(),
|
|
session=AsyncMock(),
|
|
)
|
|
|
|
perform_sync.assert_not_awaited()
|
|
message.answer.assert_awaited_once_with("sync_started_simple")
|
|
self.assertEqual(len(enqueued), 1)
|
|
_, provider, payload, event_id = enqueued[0]
|
|
self.assertEqual(provider, "panel_sync")
|
|
self.assertIsNone(event_id)
|
|
self.assertEqual(
|
|
payload,
|
|
{
|
|
"source": "bot_admin",
|
|
"requested_by": 42,
|
|
"target_chat_id": 100500,
|
|
"language": "ru",
|
|
},
|
|
)
|
|
|
|
async def test_admin_sync_button_delegates_to_sync_handler_without_second_answer(self):
|
|
callback = SimpleNamespace(
|
|
data="admin_action:sync_panel",
|
|
from_user=SimpleNamespace(id=42),
|
|
message=SimpleNamespace(chat=SimpleNamespace(id=100500)),
|
|
answer=AsyncMock(),
|
|
)
|
|
|
|
with patch.object(
|
|
admin_common.admin_sync_handlers,
|
|
"sync_command_handler",
|
|
AsyncMock(),
|
|
) as sync_command:
|
|
await admin_common.admin_panel_actions_callback_handler(
|
|
callback=callback,
|
|
state=AsyncMock(),
|
|
settings=_settings(),
|
|
i18n_data={"current_language": "ru", "i18n_instance": _I18n()},
|
|
bot=AsyncMock(),
|
|
panel_service=AsyncMock(),
|
|
subscription_service=AsyncMock(),
|
|
session=AsyncMock(),
|
|
)
|
|
|
|
sync_command.assert_awaited_once()
|
|
callback.answer.assert_not_awaited()
|