diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php index a31a394c518b7..bd9966d1cb27c 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php @@ -79,8 +79,9 @@ protected function doSend(MessageInterface $message): SentMessage $options['text'] = $message->getSubject(); - if (!isset($options['parse_mode'])) { + if (!isset($options['parse_mode']) || TelegramOptions::PARSE_MODE_MARKDOWN_V2 === $options['parse_mode']) { $options['parse_mode'] = TelegramOptions::PARSE_MODE_MARKDOWN_V2; + $options['text'] = str_replace('.', '\.', $message->getSubject()); } $response = $this->client->request('POST', $endpoint, [ diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php index 869ec7e1abde3..25bc56a905c3e 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php @@ -185,4 +185,56 @@ public function testSendWithChannelOverride() $this->assertEquals(1, $sentMessage->getMessageId()); $this->assertEquals('telegram://api.telegram.org?channel=defaultChannel', $sentMessage->getTransport()); } + + public function testSendWithMarkdownShouldEscapeDots() + { + $response = $this->createMock(ResponseInterface::class); + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $content = <<expects($this->once()) + ->method('getContent') + ->willReturn($content) + ; + + $expectedBody = [ + 'chat_id' => 'testChannel', + 'text' => 'I contain a \.', + 'parse_mode' => 'MarkdownV2', + ]; + + $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response, $expectedBody): ResponseInterface { + $this->assertSame($expectedBody, json_decode($options['body'], true)); + + return $response; + }); + + $transport = $this->createTransport($client, 'testChannel'); + + $transport->send(new ChatMessage('I contain a .')); + } }