From d80429fd7815205ee266c06cc7e3aed92020a183 Mon Sep 17 00:00:00 2001 From: Evert Jan Hakvoort Date: Mon, 26 Jul 2021 16:40:25 +0200 Subject: [PATCH 1/4] [Notifier] Added MessageBirdOptions to the message-bird-notifier bridge --- .../Notifier/Bridge/MessageBird/CHANGELOG.md | 5 ++ .../Bridge/MessageBird/MessageBirdOptions.php | 53 +++++++++++++++++++ .../MessageBird/MessageBirdTransport.php | 10 +++- .../Tests/MessageBirdOptionsTest.php | 50 +++++++++++++++++ 4 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php create mode 100644 src/Symfony/Component/Notifier/Bridge/MessageBird/Tests/MessageBirdOptionsTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md index 1f2b652ac20ea..e131a1b40c6a7 100644 --- a/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +5.4 +--- + +* Added MessageBirdOptions + 5.3 --- diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php new file mode 100644 index 0000000000000..1a2485c0a0025 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\MessageBird; + +use Symfony\Component\Notifier\Message\MessageOptionsInterface; + +/** + * @author Evert Jan Hakvoort + * + * @see https://developers.messagebird.com/api/sms-messaging/#sms-api + */ +final class MessageBirdOptions implements MessageOptionsInterface +{ + private $options; + + public function __construct(array $options = []) + { + $this->options = $options; + } + + public function toArray(): array + { + return $this->options; + } + + public function getRecipientId(): ?string + { + return $this->options['recipients'] ?? null; + } + + public function validity(int $validity): self + { + $this->options['validity'] = $validity; + + return $this; + } + + public function reference(string $reference): self + { + $this->options['reference'] = $reference; + + return $this; + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php index cb56f6a843c0c..7da019aa2902b 100644 --- a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Notifier\Bridge\MessageBird; +use Symfony\Component\Notifier\Exception\LogicException; use Symfony\Component\Notifier\Exception\TransportException; use Symfony\Component\Notifier\Exception\UnsupportedMessageTypeException; use Symfony\Component\Notifier\Message\MessageInterface; @@ -55,14 +56,19 @@ protected function doSend(MessageInterface $message): SentMessage throw new UnsupportedMessageTypeException(__CLASS__, SmsMessage::class, $message); } + $options = $message->getOptions(); + if ($options !== null && !$options instanceof MessageBirdOptions) { + throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" for options.', __CLASS__, MessageBirdOptions::class)); + } + $endpoint = sprintf('https://%s/messages', $this->getEndpoint()); $response = $this->client->request('POST', $endpoint, [ 'auth_basic' => 'AccessKey:'.$this->token, - 'body' => [ + 'body' => array_merge([ 'originator' => $this->from, 'recipients' => $message->getPhone(), 'body' => $message->getSubject(), - ], + ], $options !== null ? $options->toArray() : []), ]); try { diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/Tests/MessageBirdOptionsTest.php b/src/Symfony/Component/Notifier/Bridge/MessageBird/Tests/MessageBirdOptionsTest.php new file mode 100644 index 0000000000000..db9965e088c89 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/Tests/MessageBirdOptionsTest.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\MessageBird\Tests; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Notifier\Bridge\MessageBird\MessageBirdOptions; + +final class MessageBirdOptionsTest extends TestCase +{ + public function testGetRecipientIdWhenSet() + { + $messagebirdOptions = new MessageBirdOptions([ + 'recipients' => 'foo', + ]); + + $this->assertSame('foo', $messagebirdOptions->getRecipientId()); + } + + public function testGetRecipientIdWhenNotSet() + { + $this->assertNull((new MessageBirdOptions())->getRecipientId()); + } + + public function testSetValidity() + { + $messagebirdOptions = new MessageBirdOptions(); + + $messagebirdOptions->validity(500); + + $this->assertSame(500, $messagebirdOptions->toArray()['validity']); + } + + public function testSetReference() + { + $messagebirdOptions = new MessageBirdOptions(); + + $messagebirdOptions->reference('foo'); + + $this->assertSame('foo', $messagebirdOptions->toArray()['reference']); + } +} From e0df4f92ee3e947d1eab24fd373007b695598310 Mon Sep 17 00:00:00 2001 From: Evert Jan Hakvoort Date: Mon, 26 Jul 2021 19:25:11 +0200 Subject: [PATCH 2/4] [Notifier] Updated codestyle --- .../Notifier/Bridge/MessageBird/MessageBirdTransport.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php index 7da019aa2902b..2d6716a0706a8 100644 --- a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdTransport.php @@ -57,7 +57,7 @@ protected function doSend(MessageInterface $message): SentMessage } $options = $message->getOptions(); - if ($options !== null && !$options instanceof MessageBirdOptions) { + if (null !== $options && !$options instanceof MessageBirdOptions) { throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" for options.', __CLASS__, MessageBirdOptions::class)); } @@ -68,7 +68,7 @@ protected function doSend(MessageInterface $message): SentMessage 'originator' => $this->from, 'recipients' => $message->getPhone(), 'body' => $message->getSubject(), - ], $options !== null ? $options->toArray() : []), + ], null !== $options ? $options->toArray() : []), ]); try { From 5b230be4e03bce383b42f9aaac8a9247a3eb4fd7 Mon Sep 17 00:00:00 2001 From: Evert Jan Hakvoort <31619091+EJTJ3@users.noreply.github.com> Date: Tue, 27 Jul 2021 18:44:40 +0200 Subject: [PATCH 3/4] Update src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md Co-authored-by: Oskar Stark --- src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md index e131a1b40c6a7..2271a71170523 100644 --- a/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md @@ -4,7 +4,7 @@ CHANGELOG 5.4 --- -* Added MessageBirdOptions +* Add `MessageBirdOptions` 5.3 --- From f87428770055746436772da84fb5a71a207e45fe Mon Sep 17 00:00:00 2001 From: Evert Jan Hakvoort Date: Sat, 11 Sep 2021 11:56:16 +0200 Subject: [PATCH 4/4] updated codestyle --- .../Component/Notifier/Bridge/MessageBird/CHANGELOG.md | 2 +- .../Notifier/Bridge/MessageBird/MessageBirdOptions.php | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md index 2271a71170523..ca59e807d5bf8 100644 --- a/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/CHANGELOG.md @@ -4,7 +4,7 @@ CHANGELOG 5.4 --- -* Add `MessageBirdOptions` + * Add `MessageBirdOptions` 5.3 --- diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php index 1a2485c0a0025..724622e7352ab 100644 --- a/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php +++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/MessageBirdOptions.php @@ -37,6 +37,9 @@ public function getRecipientId(): ?string return $this->options['recipients'] ?? null; } + /** + * @return $this + */ public function validity(int $validity): self { $this->options['validity'] = $validity; @@ -44,6 +47,9 @@ public function validity(int $validity): self return $this; } + /** + * @return $this + */ public function reference(string $reference): self { $this->options['reference'] = $reference;