From d4f72f35b690a177c173d2be1b3bcc6b7bc674f5 Mon Sep 17 00:00:00 2001 From: gnito-org <70450336+gnito-org@users.noreply.github.com> Date: Fri, 9 Dec 2022 10:17:06 -0400 Subject: [PATCH] [Notifier] Add SMS options to FortySixElks notifier --- .../Notifier/Bridge/FortySixElks/CHANGELOG.md | 5 ++ .../FortySixElks/FortySixElksOptions.php | 61 +++++++++++++++++++ .../FortySixElks/FortySixElksTransport.php | 14 +++-- .../Tests/FortySixElksOptionsTest.php | 27 ++++++++ .../Tests/FortySixElksTransportTest.php | 2 + 5 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksOptions.php create mode 100644 src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksOptionsTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/FortySixElks/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/FortySixElks/CHANGELOG.md index 4662c26671e03..bc00d64a4339d 100644 --- a/src/Symfony/Component/Notifier/Bridge/FortySixElks/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/FortySixElks/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.3 +--- + + * Add `FortySixElksOptions` class + 6.2 --- diff --git a/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksOptions.php b/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksOptions.php new file mode 100644 index 0000000000000..79a53600fb717 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksOptions.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\FortySixElks; + +use Symfony\Component\Notifier\Message\MessageOptionsInterface; + +/** + * @author gnito-org + */ +final class FortySixElksOptions implements MessageOptionsInterface +{ + private array $options; + + public function __construct(array $options = []) + { + $this->options = $options; + } + + public function getFrom(): ?string + { + return $this->options['from'] ?? null; + } + + public function getRecipientId(): ?string + { + return $this->options['recipient_id'] ?? null; + } + + public function setFrom(string $from): self + { + $this->options['from'] = $from; + + return $this; + } + + public function setRecipientId(string $id): self + { + $this->options['recipient_id'] = $id; + + return $this; + } + + public function toArray(): array + { + $options = $this->options; + if (isset($options['recipient_id'])) { + unset($options['recipient_id']); + } + + return $options; + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksTransport.php b/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksTransport.php index b5bdd6cc502b8..0c419e1c191c1 100644 --- a/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/FortySixElks/FortySixElksTransport.php @@ -48,7 +48,7 @@ public function __toString(): string public function supports(MessageInterface $message): bool { - return $message instanceof SmsMessage; + return $message instanceof SmsMessage && (null === $message->getOptions() || $message->getOptions() instanceof FortySixElksOptions); } protected function doSend(MessageInterface $message): SentMessage @@ -59,14 +59,16 @@ protected function doSend(MessageInterface $message): SentMessage $from = $message->getFrom() ?: $this->from; + $opts = $message->getOptions(); + $options = $opts ? $opts->toArray() : []; + $options['from'] = $options['from'] ?? $from; + $options['to'] = $message->getPhone(); + $options['message'] = $message->getSubject(); + $endpoint = sprintf('https://%s/a1/sms', self::HOST); $response = $this->client->request('POST', $endpoint, [ - 'body' => [ - 'from' => $from, - 'to' => $message->getPhone(), - 'message' => $message->getSubject(), - ], 'auth_basic' => [$this->apiUsername, $this->apiPassword], + 'body' => array_filter($options), ]); try { diff --git a/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksOptionsTest.php b/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksOptionsTest.php new file mode 100644 index 0000000000000..41c2094dd3e84 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksOptionsTest.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\FortySixElks\Tests; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Notifier\Bridge\FortySixElks\FortySixElksOptions; + +class FortySixElksOptionsTest extends TestCase +{ + public function testFortySixElksOptions() + { + $fortySixElksOptions = (new FortySixElksOptions())->setFrom('test_from')->setRecipientId('test_recipient'); + + self::assertSame([ + 'from' => 'test_from', + ], $fortySixElksOptions->toArray()); + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksTransportTest.php b/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksTransportTest.php index c23268d62944a..b1a426d8a0eaf 100644 --- a/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/FortySixElks/Tests/FortySixElksTransportTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Notifier\Bridge\FortySixElks\Tests; use Symfony\Component\HttpClient\MockHttpClient; +use Symfony\Component\Notifier\Bridge\FortySixElks\FortySixElksOptions; use Symfony\Component\Notifier\Bridge\FortySixElks\FortySixElksTransport; use Symfony\Component\Notifier\Exception\TransportException; use Symfony\Component\Notifier\Message\ChatMessage; @@ -37,6 +38,7 @@ public function toStringProvider(): iterable public function supportedMessagesProvider(): iterable { yield [new SmsMessage('+46701111111', 'Hello!')]; + yield [new SmsMessage('+46701111111', 'Hello!', 'from', new FortySixElksOptions(['from' => 'foo']))]; } public function unsupportedMessagesProvider(): iterable