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:
1 parent
635b78cb86
commit
7a630a974f
5 files changed
+69
-13
No files matched your search
@@ -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)
|
||||
|
||||
|
||||
Reference in new issue
Block a user