feat: show editable operation status

This commit is contained in:
admin committed 2026-10-09 16:46:11 +02:00
1 parent 189f6bc1f0
commit 3e33a9deb5
6 files changed
+129 -15

No files matched your search

+9 -2
View File
@@ -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()
+15
View File
@@ -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):