fix: push the final text into the draft before sending it as a message

Драфт с последней фразой висел в чате ещё несколько секунд после того, как
уже ушло сообщение «✅ Обучение завершено»: содержимое драфта не совпадало
с финальным сообщением, и клиент не мог их слить.

Финальный текст теперь сначала пушится в драфт тем же draft_id, и только
потом уходит реальным сообщением с тем же текстом — драфт заменяется без
задержки. finish() без текста гасит драфт пустым пушем.

Проверено: 198 тестов OK (2 новых на совпадение текста драфта и сообщения).

VERSION: 0.1.0+50 -> 0.1.0+51
This commit is contained in:
admin committed 2026-10-11 15:34:15 +02:00
1 parent 635b78cb86
commit 7a630a974f
5 files changed
+69 -13

No files matched your search

+15 -2
View File
@@ -150,13 +150,26 @@ class GroupStatusTests(unittest.IsolatedAsyncioTestCase):
status = await bot.OperationStatus.start(message, "⏳ Старт", kind="generation")
self.assertIsNone(status._rotation_task)
async def test_finish_without_text_only_stops_rotation(self):
async def test_finish_pushes_final_text_into_draft_before_sending(self):
"""Драфт приводится к финальному тексту, иначе он висит ещё несколько секунд."""
message = make_message("private")
status = await bot.OperationStatus.start(message, "⏳ Старт", kind="generation")
await status.finish("✅ Обучение завершено")
drafts = message.bot.send_message_draft.await_args_list
# Последний пуш в драфт — тем же текстом, что ушёл реальным сообщением.
self.assertEqual(drafts[-1].kwargs["text"], "✅ Обучение завершено")
self.assertEqual(drafts[-1].kwargs["draft_id"], status._finished_draft_id)
message.answer.assert_awaited_once_with("✅ Обучение завершено")
async def test_finish_without_text_clears_draft(self):
message = make_message("private")
status = await bot.OperationStatus.start(message, "⏳ Старт", kind="generation")
await status.finish()
# Никакого сообщения, но ротация остановлена и статус закрыт.
# Никакого сообщения, но драфт погашен и ротация остановлена.
message.answer.assert_not_awaited()
self.assertEqual(message.bot.send_message_draft.await_args_list[-1].kwargs["text"], "")
self.assertTrue(status._closed)
self.assertIsNone(status._rotation_task)