Skip to content

Commit a77835a

Browse files
authored
Fix reuse of captions during send msg with file (#4500)
1 parent 85c4a91 commit a77835a

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

telethon/client/messages.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,9 @@ async def callback(event):
826826
await client.send_message(chat, 'Hi, future!', schedule=timedelta(minutes=5))
827827
"""
828828
if file is not None:
829+
if isinstance(message, types.Message):
830+
formatting_entities = formatting_entities or message.entities
831+
message = message.message
829832
return await self.send_file(
830833
entity, file, caption=message, reply_to=reply_to,
831834
attributes=attributes, parse_mode=parse_mode,

tests/telethon/client/test_messages.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import inspect
2+
from unittest import mock
3+
from unittest.mock import MagicMock
24

35
import pytest
46

57
from telethon import TelegramClient
8+
from telethon.client import MessageMethods
9+
from telethon.tl.types import PeerChat, MessageMediaDocument, Message, MessageEntityBold
610

711

812
@pytest.mark.asyncio
@@ -38,3 +42,42 @@ async def send_file(self, entity, file, **kwargs):
3842

3943
client = MockedClient()
4044
assert (await client.send_message('a', file='b', **arguments)) == sentinel
45+
46+
47+
class TestMessageMethods:
48+
@pytest.mark.asyncio
49+
@pytest.mark.parametrize(
50+
'formatting_entities',
51+
([MessageEntityBold(offset=0, length=0)], None)
52+
)
53+
async def test_send_msg_and_file(self, formatting_entities):
54+
async def async_func(result): # AsyncMock was added only in 3.8
55+
return result
56+
msg_methods = MessageMethods()
57+
expected_result = Message(
58+
id=0, peer_id=PeerChat(chat_id=0), message='', date=None,
59+
)
60+
entity = 'test_entity'
61+
message = Message(
62+
id=1, peer_id=PeerChat(chat_id=0), message='expected_caption', date=None,
63+
entities=[MessageEntityBold(offset=9, length=9)],
64+
)
65+
media_file = MessageMediaDocument()
66+
67+
with mock.patch.object(
68+
target=MessageMethods, attribute='send_file',
69+
new=MagicMock(return_value=async_func(expected_result)), create=True,
70+
) as mock_obj:
71+
result = await msg_methods.send_message(
72+
entity=entity, message=message, file=media_file,
73+
formatting_entities=formatting_entities,
74+
)
75+
mock_obj.assert_called_once_with(
76+
entity, media_file, caption=message.message,
77+
formatting_entities=formatting_entities or message.entities,
78+
reply_to=None, silent=None, attributes=None, parse_mode=(),
79+
force_document=False, thumb=None, buttons=None,
80+
clear_draft=False, schedule=None, supports_streaming=False,
81+
comment_to=None, background=None, nosound_video=None,
82+
)
83+
assert result == expected_result

0 commit comments

Comments
 (0)