fix: queue bot panel sync requests
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user