Fix reuse of captions during send msg with file (#4500)

This commit is contained in:
Greg Eremeev 2024-10-25 18:27:58 -03:00 committed by GitHub
parent 85c4a91317
commit a77835a7d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 0 deletions

View File

@ -826,6 +826,9 @@ class MessageMethods:
await client.send_message(chat, 'Hi, future!', schedule=timedelta(minutes=5)) await client.send_message(chat, 'Hi, future!', schedule=timedelta(minutes=5))
""" """
if file is not None: if file is not None:
if isinstance(message, types.Message):
formatting_entities = formatting_entities or message.entities
message = message.message
return await self.send_file( return await self.send_file(
entity, file, caption=message, reply_to=reply_to, entity, file, caption=message, reply_to=reply_to,
attributes=attributes, parse_mode=parse_mode, attributes=attributes, parse_mode=parse_mode,

View File

@ -1,8 +1,12 @@
import inspect import inspect
from unittest import mock
from unittest.mock import MagicMock
import pytest import pytest
from telethon import TelegramClient from telethon import TelegramClient
from telethon.client import MessageMethods
from telethon.tl.types import PeerChat, MessageMediaDocument, Message, MessageEntityBold
@pytest.mark.asyncio @pytest.mark.asyncio
@ -38,3 +42,42 @@ async def test_send_message_with_file_forwards_args():
client = MockedClient() client = MockedClient()
assert (await client.send_message('a', file='b', **arguments)) == sentinel assert (await client.send_message('a', file='b', **arguments)) == sentinel
class TestMessageMethods:
@pytest.mark.asyncio
@pytest.mark.parametrize(
'formatting_entities',
([MessageEntityBold(offset=0, length=0)], None)
)
async def test_send_msg_and_file(self, formatting_entities):
async def async_func(result): # AsyncMock was added only in 3.8
return result
msg_methods = MessageMethods()
expected_result = Message(
id=0, peer_id=PeerChat(chat_id=0), message='', date=None,
)
entity = 'test_entity'
message = Message(
id=1, peer_id=PeerChat(chat_id=0), message='expected_caption', date=None,
entities=[MessageEntityBold(offset=9, length=9)],
)
media_file = MessageMediaDocument()
with mock.patch.object(
target=MessageMethods, attribute='send_file',
new=MagicMock(return_value=async_func(expected_result)), create=True,
) as mock_obj:
result = await msg_methods.send_message(
entity=entity, message=message, file=media_file,
formatting_entities=formatting_entities,
)
mock_obj.assert_called_once_with(
entity, media_file, caption=message.message,
formatting_entities=formatting_entities or message.entities,
reply_to=None, silent=None, attributes=None, parse_mode=(),
force_document=False, thumb=None, buttons=None,
clear_draft=False, schedule=None, supports_streaming=False,
comment_to=None, background=None, nosound_video=None,
)
assert result == expected_result