feat: show editable operation status
This commit is contained in:
1 parent
189f6bc1f0
commit
3e33a9deb5
6 files changed
+129
-15
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import unittest
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
from typing import Any, cast
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
from aiogram.types import Chat, Message
|
||||
@@ -232,7 +233,10 @@ class ModeRoutingTests(unittest.IsolatedAsyncioTestCase):
|
||||
message = _StubMessage("Кофейня в Калининграде для семей с детьми")
|
||||
with patch.object(bot, "_rebuild_account_profile", new=AsyncMock()) as rebuild:
|
||||
await bot.handle_text(message, _StubState("training"))
|
||||
rebuild.assert_awaited_once_with(42, message, new_note="Кофейня в Калининграде для семей с детьми")
|
||||
call = cast(Any, rebuild.await_args)
|
||||
self.assertEqual(call.args, (42, message))
|
||||
self.assertEqual(call.kwargs["new_note"], "Кофейня в Калининграде для семей с детьми")
|
||||
self.assertIsInstance(call.kwargs["status"], bot.OperationStatus)
|
||||
|
||||
async def test_plain_text_is_only_sent_to_generator_in_generation_mode(self):
|
||||
message = _StubMessage("Напиши пост про запуск продукта")
|
||||
@@ -316,7 +320,10 @@ class ModeRoutingTests(unittest.IsolatedAsyncioTestCase):
|
||||
):
|
||||
await bot._process_voice(message, bot_client, state)
|
||||
stt.assert_awaited_once()
|
||||
rebuild.assert_awaited_once_with(42, message, new_note="Мы — кофейня в Калининграде")
|
||||
call = cast(Any, rebuild.await_args)
|
||||
self.assertEqual(call.args, (42, message))
|
||||
self.assertEqual(call.kwargs["new_note"], "Мы — кофейня в Калининграде")
|
||||
self.assertIsNone(call.kwargs["status"])
|
||||
classify.assert_not_awaited()
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import asyncio
|
||||
import unittest
|
||||
from typing import Any, cast
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import bot
|
||||
@@ -45,6 +46,20 @@ class MediaGroupTests(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
|
||||
class TypingStatusTests(unittest.IsolatedAsyncioTestCase):
|
||||
async def test_operation_status_is_edited_and_finished_in_place(self):
|
||||
status_message = cast(Any, type("StatusMessage", (), {"edit_text": AsyncMock()})())
|
||||
message = cast(Any, type("Message", (), {"answer": AsyncMock(return_value=status_message)})())
|
||||
|
||||
status = await bot.OperationStatus.start(message, "⏳ Старт")
|
||||
await status.update("⏳ Работаю")
|
||||
await status.finish("✅ Готово")
|
||||
|
||||
message.answer.assert_awaited_once_with("⏳ Старт")
|
||||
self.assertEqual(
|
||||
[call.args[0] for call in status_message.edit_text.await_args_list],
|
||||
["⏳ Работаю", "✅ Готово"],
|
||||
)
|
||||
|
||||
async def test_sends_immediately_refreshes_and_cancels(self):
|
||||
fake_bot = AsyncMock()
|
||||
with patch.object(bot, "TYPING_REFRESH_SECONDS", 0.01):
|
||||
|
||||
Reference in new issue
Block a user