Add Notifier SentMessage
This commit is contained in:
parent
1b41bdee86
commit
5a6f0537ec
@ -16,6 +16,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
@ -50,7 +51,7 @@ final class FirebaseTransport extends AbstractTransport
|
||||
return $message instanceof ChatMessage;
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof ChatMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||
@ -84,5 +85,12 @@ final class FirebaseTransport extends AbstractTransport
|
||||
if ($jsonContents && isset($jsonContents['results']['error'])) {
|
||||
throw new TransportException(sprintf('Unable to post the Firebase message: %s.', $jsonContents['error']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['results'][0]['message_id']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Firebase\\": "" },
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\FreeMobile;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
@ -51,7 +52,7 @@ final class FreeMobileTransport extends AbstractTransport
|
||||
return $message instanceof SmsMessage && $this->phone === $message->getPhone();
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$this->supports($message)) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given) and configured with your phone number.', __CLASS__, SmsMessage::class, \get_class($message)));
|
||||
@ -75,5 +76,7 @@ final class FreeMobileTransport extends AbstractTransport
|
||||
|
||||
throw new TransportException(sprintf('Unable to send the SMS: error %d: ', $response->getStatusCode()).($errors[$response->getStatusCode()] ?? ''), $response);
|
||||
}
|
||||
|
||||
return new SentMessage($message, (string) $this);
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.1",
|
||||
"symfony/notifier": "^5.1"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\FreeMobile\\": "" },
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
@ -50,7 +51,7 @@ final class MattermostTransport extends AbstractTransport
|
||||
/**
|
||||
* @see https://api.mattermost.com
|
||||
*/
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof ChatMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||
@ -74,5 +75,12 @@ final class MattermostTransport extends AbstractTransport
|
||||
|
||||
throw new TransportException(sprintf('Unable to post the Mattermost message: %s (%s).', $result['message'], $result['id']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['id']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Mattermost\\": "" },
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\Nexmo;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
@ -51,7 +52,7 @@ final class NexmoTransport extends AbstractTransport
|
||||
return $message instanceof SmsMessage;
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof SmsMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||
@ -73,5 +74,12 @@ final class NexmoTransport extends AbstractTransport
|
||||
throw new TransportException('Unable to send the SMS: '.$msg['error-text'].sprintf(' (code %s).', $msg['status']), $response);
|
||||
}
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['messages'][0]['message-id']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Nexmo\\": "" },
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\OvhCloud;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
@ -53,7 +54,7 @@ final class OvhCloudTransport extends AbstractTransport
|
||||
return $message instanceof SmsMessage;
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof SmsMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||
@ -90,6 +91,13 @@ final class OvhCloudTransport extends AbstractTransport
|
||||
|
||||
throw new TransportException(sprintf('Unable to send the SMS: %s.', $error['message']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['ids'][0]);
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\OvhCloud\\": "" },
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
@ -55,7 +56,7 @@ final class RocketChatTransport extends AbstractTransport
|
||||
/**
|
||||
* @see https://rocket.chat/docs/administrator-guides/integrations/
|
||||
*/
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof ChatMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||
@ -86,5 +87,12 @@ final class RocketChatTransport extends AbstractTransport
|
||||
if (!$result['success']) {
|
||||
throw new TransportException(sprintf('Unable to post the RocketChat message: %s.', $result['error']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['message']['_id']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\RocketChat\\": "" },
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\Sinch;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
@ -51,7 +52,7 @@ final class SinchTransport extends AbstractTransport
|
||||
return $message instanceof SmsMessage;
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof SmsMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||
@ -72,5 +73,12 @@ final class SinchTransport extends AbstractTransport
|
||||
|
||||
throw new TransportException(sprintf('Unable to send the SMS: %s (%s).', $error['text'], $error['code']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['id']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
"php": ">=7.2.5",
|
||||
"ext-json": "*",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Sinch\\": "" },
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
@ -58,7 +59,7 @@ final class SlackTransport extends AbstractTransport
|
||||
return $message instanceof ChatMessage && (null === $message->getOptions() || $message->getOptions() instanceof SlackOptions);
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof ChatMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||
@ -86,5 +87,7 @@ final class SlackTransport extends AbstractTransport
|
||||
if ('ok' !== $result) {
|
||||
throw new TransportException('Unable to post the Slack message: '.$result, $response);
|
||||
}
|
||||
|
||||
return new SentMessage($message, (string) $this);
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.1"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/event-dispatcher": "^4.3|^5.0"
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
@ -60,7 +61,7 @@ final class TelegramTransport extends AbstractTransport
|
||||
/**
|
||||
* @see https://core.telegram.org/bots/api
|
||||
*/
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof ChatMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||
@ -82,5 +83,12 @@ final class TelegramTransport extends AbstractTransport
|
||||
|
||||
throw new TransportException('Unable to post the Telegram message: '.$result['description'].sprintf(' (code %s).', $result['error_code']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['result']['message_id']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -80,9 +80,34 @@ final class TelegramTransportTest extends TestCase
|
||||
$response->expects($this->exactly(2))
|
||||
->method('getStatusCode')
|
||||
->willReturn(200);
|
||||
|
||||
$content = <<<JSON
|
||||
{
|
||||
"ok": true,
|
||||
"result": {
|
||||
"message_id": 1,
|
||||
"from": {
|
||||
"id": 12345678,
|
||||
"first_name": "YourBot",
|
||||
"username": "YourBot"
|
||||
},
|
||||
"chat": {
|
||||
"id": 1234567890,
|
||||
"first_name": "John",
|
||||
"last_name": "Doe",
|
||||
"username": "JohnDoe",
|
||||
"type": "private"
|
||||
},
|
||||
"date": 1459958199,
|
||||
"text": "Hello from Bot!"
|
||||
}
|
||||
}
|
||||
JSON;
|
||||
|
||||
$response->expects($this->once())
|
||||
->method('getContent')
|
||||
->willReturn('');
|
||||
->willReturn($content)
|
||||
;
|
||||
|
||||
$expectedBody = [
|
||||
'chat_id' => $channel,
|
||||
@ -98,7 +123,10 @@ final class TelegramTransportTest extends TestCase
|
||||
|
||||
$transport = new TelegramTransport('testToken', $channel, $client);
|
||||
|
||||
$transport->send(new ChatMessage('testMessage'));
|
||||
$sentMessage = $transport->send(new ChatMessage('testMessage'));
|
||||
|
||||
$this->assertEquals(1, $sentMessage->getMessageId());
|
||||
$this->assertEquals('telegram://api.telegram.org?channel=testChannel', $sentMessage->getTransport());
|
||||
}
|
||||
|
||||
public function testSendWithChannelOverride(): void
|
||||
@ -109,9 +137,33 @@ final class TelegramTransportTest extends TestCase
|
||||
$response->expects($this->exactly(2))
|
||||
->method('getStatusCode')
|
||||
->willReturn(200);
|
||||
$content = <<<JSON
|
||||
{
|
||||
"ok": true,
|
||||
"result": {
|
||||
"message_id": 1,
|
||||
"from": {
|
||||
"id": 12345678,
|
||||
"first_name": "YourBot",
|
||||
"username": "YourBot"
|
||||
},
|
||||
"chat": {
|
||||
"id": 1234567890,
|
||||
"first_name": "John",
|
||||
"last_name": "Doe",
|
||||
"username": "JohnDoe",
|
||||
"type": "private"
|
||||
},
|
||||
"date": 1459958199,
|
||||
"text": "Hello from Bot!"
|
||||
}
|
||||
}
|
||||
JSON;
|
||||
|
||||
$response->expects($this->once())
|
||||
->method('getContent')
|
||||
->willReturn('');
|
||||
->willReturn($content)
|
||||
;
|
||||
|
||||
$expectedBody = [
|
||||
'chat_id' => $channelOverride,
|
||||
@ -133,6 +185,9 @@ final class TelegramTransportTest extends TestCase
|
||||
->method('getRecipientId')
|
||||
->willReturn($channelOverride);
|
||||
|
||||
$transport->send(new ChatMessage('testMessage', $messageOptions));
|
||||
$sentMessage = $transport->send(new ChatMessage('testMessage', $messageOptions));
|
||||
|
||||
$this->assertEquals(1, $sentMessage->getMessageId());
|
||||
$this->assertEquals('telegram://api.telegram.org?channel=defaultChannel', $sentMessage->getTransport());
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.1"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/event-dispatcher": "^4.3|^5.0"
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\Twilio;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\TransportException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
@ -51,7 +52,7 @@ final class TwilioTransport extends AbstractTransport
|
||||
return $message instanceof SmsMessage;
|
||||
}
|
||||
|
||||
protected function doSend(MessageInterface $message): void
|
||||
protected function doSend(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$message instanceof SmsMessage) {
|
||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||
@ -72,5 +73,12 @@ final class TwilioTransport extends AbstractTransport
|
||||
|
||||
throw new TransportException('Unable to send the SMS: '.$error['message'].sprintf(' (see %s).', $error['more_info']), $response);
|
||||
}
|
||||
|
||||
$success = $response->toArray(false);
|
||||
|
||||
$message = new SentMessage($message, (string) $this);
|
||||
$message->setMessageId($success['sid']);
|
||||
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/http-client": "^4.3|^5.0",
|
||||
"symfony/notifier": "^5.0"
|
||||
"symfony/notifier": "^5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Twilio\\": "" },
|
||||
|
@ -1,6 +1,11 @@
|
||||
CHANGELOG
|
||||
=========
|
||||
|
||||
5.2.0
|
||||
-----
|
||||
|
||||
* [BC BREAK] The `TransportInterface::send()` and `AbstractTransport::doSend()` methods changed to return a `SentMessage` instance instead of `void`.
|
||||
|
||||
5.1.0
|
||||
-----
|
||||
|
||||
|
@ -16,6 +16,7 @@ use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
||||
use Symfony\Component\Messenger\MessageBusInterface;
|
||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
@ -47,12 +48,10 @@ final class Chatter implements ChatterInterface
|
||||
return $this->transport->supports($message);
|
||||
}
|
||||
|
||||
public function send(MessageInterface $message): void
|
||||
public function send(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (null === $this->bus) {
|
||||
$this->transport->send($message);
|
||||
|
||||
return;
|
||||
return $this->transport->send($message);
|
||||
}
|
||||
|
||||
if (null !== $this->dispatcher) {
|
||||
|
50
src/Symfony/Component/Notifier/Message/SentMessage.php
Normal file
50
src/Symfony/Component/Notifier/Message/SentMessage.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Notifier\Message;
|
||||
|
||||
/**
|
||||
* @author Jérémy Romey <jeremy@free-agent.fr>
|
||||
*
|
||||
* @experimental in 5.2
|
||||
*/
|
||||
final class SentMessage
|
||||
{
|
||||
private $original;
|
||||
private $transport;
|
||||
private $messageId;
|
||||
|
||||
public function __construct(MessageInterface $original, string $transport)
|
||||
{
|
||||
$this->original = $original;
|
||||
$this->transport = $transport;
|
||||
}
|
||||
|
||||
public function getOriginalMessage(): MessageInterface
|
||||
{
|
||||
return $this->original;
|
||||
}
|
||||
|
||||
public function getTransport(): string
|
||||
{
|
||||
return $this->transport;
|
||||
}
|
||||
|
||||
public function setMessageId(string $id): void
|
||||
{
|
||||
$this->messageId = $id;
|
||||
}
|
||||
|
||||
public function getMessageId(): ?string
|
||||
{
|
||||
return $this->messageId;
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||
use Symfony\Component\Notifier\Transport\Transports;
|
||||
|
||||
@ -30,9 +31,12 @@ class TransportsTest extends TestCase
|
||||
|
||||
$one->method('supports')->with($message)->willReturn(true);
|
||||
|
||||
$one->expects($this->once())->method('send');
|
||||
$one->expects($this->once())->method('send')->willReturn(new SentMessage($message, 'one'));
|
||||
|
||||
$transports->send($message);
|
||||
$sentMessage = $transports->send($message);
|
||||
|
||||
$this->assertSame($message, $sentMessage->getOriginalMessage());
|
||||
$this->assertSame('one', $sentMessage->getTransport());
|
||||
}
|
||||
|
||||
public function testSendToFirstSupportedTransportIfMessageDoesNotDefineATransport(): void
|
||||
@ -47,10 +51,16 @@ class TransportsTest extends TestCase
|
||||
$one->method('supports')->with($message)->willReturn(false);
|
||||
$two->method('supports')->with($message)->willReturn(true);
|
||||
|
||||
$one->expects($this->never())->method('send');
|
||||
$two->expects($this->once())->method('send');
|
||||
$one->method('send')->with($message)->willReturn(new SentMessage($message, 'one'));
|
||||
$two->method('send')->with($message)->willReturn(new SentMessage($message, 'two'));
|
||||
|
||||
$transports->send($message);
|
||||
$one->expects($this->never())->method('send');
|
||||
$two->expects($this->once())->method('send')->willReturn(new SentMessage($message, 'two'));
|
||||
|
||||
$sentMessage = $transports->send($message);
|
||||
|
||||
$this->assertSame($message, $sentMessage->getOriginalMessage());
|
||||
$this->assertSame('two', $sentMessage->getTransport());
|
||||
}
|
||||
|
||||
public function testThrowExceptionIfNoSupportedTransportWasFound(): void
|
||||
|
@ -16,6 +16,7 @@ use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
||||
use Symfony\Component\Messenger\MessageBusInterface;
|
||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
@ -47,12 +48,10 @@ final class Texter implements TexterInterface
|
||||
return $this->transport->supports($message);
|
||||
}
|
||||
|
||||
public function send(MessageInterface $message): void
|
||||
public function send(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (null === $this->bus) {
|
||||
$this->transport->send($message);
|
||||
|
||||
return;
|
||||
return $this->transport->send($message);
|
||||
}
|
||||
|
||||
if (null !== $this->dispatcher) {
|
||||
|
@ -17,6 +17,7 @@ use Symfony\Component\HttpClient\HttpClient;
|
||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
|
||||
@ -69,16 +70,16 @@ abstract class AbstractTransport implements TransportInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function send(MessageInterface $message): void
|
||||
public function send(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (null !== $this->dispatcher) {
|
||||
$this->dispatcher->dispatch(new MessageEvent($message));
|
||||
}
|
||||
|
||||
$this->doSend($message);
|
||||
return $this->doSend($message);
|
||||
}
|
||||
|
||||
abstract protected function doSend(MessageInterface $message): void;
|
||||
abstract protected function doSend(MessageInterface $message): SentMessage;
|
||||
|
||||
protected function getEndpoint(): ?string
|
||||
{
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\EventDispatcher\Event;
|
||||
use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
/**
|
||||
@ -31,11 +32,13 @@ class NullTransport implements TransportInterface
|
||||
$this->dispatcher = class_exists(Event::class) ? LegacyEventDispatcherProxy::decorate($dispatcher) : $dispatcher;
|
||||
}
|
||||
|
||||
public function send(MessageInterface $message): void
|
||||
public function send(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (null !== $this->dispatcher) {
|
||||
$this->dispatcher->dispatch(new MessageEvent($message));
|
||||
}
|
||||
|
||||
return new SentMessage($message, (string) $this);
|
||||
}
|
||||
|
||||
public function __toString(): string
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Exception\RuntimeException;
|
||||
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
|
||||
/**
|
||||
* Uses several Transports using a round robin algorithm.
|
||||
@ -63,13 +64,11 @@ class RoundRobinTransport implements TransportInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
public function send(MessageInterface $message): void
|
||||
public function send(MessageInterface $message): SentMessage
|
||||
{
|
||||
while ($transport = $this->getNextTransport($message)) {
|
||||
try {
|
||||
$transport->send($message);
|
||||
|
||||
return;
|
||||
return $transport->send($message);
|
||||
} catch (TransportExceptionInterface $e) {
|
||||
$this->deadTransports[$transport] = microtime(true);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Notifier\Transport;
|
||||
|
||||
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
|
||||
/**
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
@ -24,7 +25,7 @@ interface TransportInterface
|
||||
/**
|
||||
* @throws TransportExceptionInterface
|
||||
*/
|
||||
public function send(MessageInterface $message): void;
|
||||
public function send(MessageInterface $message): SentMessage;
|
||||
|
||||
public function supports(MessageInterface $message): bool;
|
||||
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Transport;
|
||||
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
|
||||
use Symfony\Component\Notifier\Exception\LogicException;
|
||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||
use Symfony\Component\Notifier\Message\SentMessage;
|
||||
|
||||
/**
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
@ -51,17 +52,14 @@ final class Transports implements TransportInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
public function send(MessageInterface $message): void
|
||||
public function send(MessageInterface $message): SentMessage
|
||||
{
|
||||
if (!$transport = $message->getTransport()) {
|
||||
foreach ($this->transports as $transport) {
|
||||
if ($transport->supports($message)) {
|
||||
$transport->send($message);
|
||||
|
||||
return;
|
||||
return $transport->send($message);
|
||||
}
|
||||
}
|
||||
|
||||
throw new LogicException(sprintf('None of the available transports support the given message (available transports: "%s").', implode('", "', array_keys($this->transports))));
|
||||
}
|
||||
|
||||
@ -73,6 +71,6 @@ final class Transports implements TransportInterface
|
||||
throw new LogicException(sprintf('The "%s" transport does not support the given message.', $transport));
|
||||
}
|
||||
|
||||
$this->transports[$transport]->send($message);
|
||||
return $this->transports[$transport]->send($message);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user