Added caption extraction when send a msg with a file (#4499)

Closes #4499
This commit is contained in:
Gregory Eremeev 2024-10-24 15:53:25 -03:00
parent 3f589b287d
commit 3a1d25c80a
2 changed files with 39 additions and 0 deletions

View File

@ -826,6 +826,8 @@ 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):
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
@pytest.mark.asyncio @pytest.mark.asyncio
@ -38,3 +42,36 @@ 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
async def test_send_msg_and_file(self):
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,
)
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,
)
mock_obj.assert_called_once_with(
entity, media_file, caption=message.message,
reply_to=None, attributes=None, parse_mode=(),
force_document=False, thumb=None, buttons=None,
clear_draft=False, silent=None, schedule=None,
supports_streaming=False, formatting_entities=None,
comment_to=None, background=None, nosound_video=None,
)
assert result == expected_result