diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/SpotHit/CHANGELOG.md index 5092c668a1f20..190646b71aca6 100644 --- a/src/Symfony/Component/Notifier/Bridge/SpotHit/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.4 +--- + + * Support `SMSLong` and `SMSLongNBr` API parameters + 6.2 --- diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/README.md b/src/Symfony/Component/Notifier/Bridge/SpotHit/README.md index ae45ce40f1570..6d54ebdb3f2c7 100644 --- a/src/Symfony/Component/Notifier/Bridge/SpotHit/README.md +++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/README.md @@ -6,12 +6,14 @@ Provides [Spot-Hit](https://www.spot-hit.fr/) integration for Symfony Notifier. #### DSN example ``` -SPOTHIT_DSN=spothit://TOKEN@default?from=FROM +SPOTHIT_DSN=spothit://TOKEN@default?from=FROM&smslong=SMSLONG&smslongnbr=SMSLONGNBR ``` where: - `TOKEN` is your Spot-Hit API key - `FROM` is the custom sender (3-11 letters, default is a 5 digits phone number) + - `SMSLONG` (optional) 0 or 1 : allows SMS messages longer than 160 characters + - `SMSLONGNBR` (optional) integer : allows to check the size of the long SMS sent. You must send the number of concatenated SMS as a value. If our counter indicates a different number, your message will be rejected. Resources --------- diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransport.php b/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransport.php index 1f3434974cb43..7b10b60720322 100644 --- a/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransport.php @@ -35,6 +35,8 @@ final class SpotHitTransport extends AbstractTransport private string $token; private ?string $from; + private ?bool $smsLong = null; + private ?int $smsLongNBr = null; public function __construct(#[\SensitiveParameter] string $token, string $from = null, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null) { @@ -46,7 +48,27 @@ public function __construct(#[\SensitiveParameter] string $token, string $from = public function __toString(): string { - return sprintf('spothit://%s%s', $this->getEndpoint(), null !== $this->from ? '?from='.$this->from : ''); + $query = http_build_query([ + 'from' => $this->from, + 'smslong' => $this->smsLong, + 'smslongnbr' => $this->smsLongNBr, + ]); + + return sprintf('spothit://%s', $this->getEndpoint()).('' !== $query ? '?'.$query : ''); + } + + public function setSmsLong(?bool $smsLong): self + { + $this->smsLong = $smsLong; + + return $this; + } + + public function setLongNBr(?int $smsLongNBr): self + { + $this->smsLongNBr = $smsLongNBr; + + return $this; } public function supports(MessageInterface $message): bool @@ -76,6 +98,8 @@ protected function doSend(MessageInterface $message): SentMessage 'type' => 'premium', 'message' => $message->getSubject(), 'expediteur' => $message->getFrom() ?: $this->from, + 'smslong' => $this->smsLong, + 'smslongnbr' => $this->smsLongNBr, ], ]); diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransportFactory.php index 699e5c3eb63e5..550a5675059a2 100644 --- a/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/SpotHitTransportFactory.php @@ -30,10 +30,12 @@ public function create(Dsn $dsn): SpotHitTransport $token = $this->getUser($dsn); $from = $dsn->getOption('from'); + $smsLong = $dsn->getOption('smslong'); + $smsLongNBr = $dsn->getOption('smslongnbr'); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $port = $dsn->getPort(); - return (new SpotHitTransport($token, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); + return (new SpotHitTransport($token, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port)->setSmsLong($smsLong)->setLongNBr($smsLongNBr); } protected function getSupportedSchemes(): array diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportFactoryTest.php index 444ea14cc920c..c39fef4d9600c 100644 --- a/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportFactoryTest.php @@ -31,11 +31,17 @@ public static function createProvider(): iterable 'spothit://spot-hit.fr?from=MyCompany', 'spothit://api_token@default?from=MyCompany', ]; + yield [ + 'spothit://spot-hit.fr?from=MyCompany&smslong=1', + 'spothit://api_token@default?from=MyCompany&smslong=1', + ]; } public static function supportsProvider(): iterable { yield [true, 'spothit://api_token@default?from=MyCompany']; + yield [true, 'spothit://api_token@default?from=MyCompany&smslong=1']; + yield [true, 'spothit://api_token@default?from=MyCompany&smslongnbr=1']; yield [false, 'somethingElse://api_token@default?from=MyCompany']; } diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportTest.php b/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportTest.php index 17e6179785a56..f0aaea2f6e63b 100644 --- a/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/Tests/SpotHitTransportTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Notifier\Bridge\SpotHit\Tests; use Symfony\Component\HttpClient\MockHttpClient; +use Symfony\Component\HttpClient\Response\MockResponse; use Symfony\Component\Notifier\Bridge\SpotHit\SpotHitTransport; use Symfony\Component\Notifier\Message\ChatMessage; use Symfony\Component\Notifier\Message\SmsMessage; @@ -29,6 +30,9 @@ public static function createTransport(HttpClientInterface $client = null): Spot public static function toStringProvider(): iterable { yield ['spothit://host.test?from=MyCompany', self::createTransport()]; + yield ['spothit://host.test?from=MyCompany&smslong=1', self::createTransport()->setSmsLong(true)]; + yield ['spothit://host.test?from=MyCompany&smslongnbr=3', self::createTransport()->setLongNBr(3)]; + yield ['spothit://host.test?from=MyCompany&smslong=1&smslongnbr=3', self::createTransport()->setSmsLong(true)->setLongNBr(3)]; } public static function supportedMessagesProvider(): iterable @@ -42,4 +46,72 @@ public static function unsupportedMessagesProvider(): iterable yield [new ChatMessage('Hello!')]; yield [new DummyMessage()]; } + + public function testShouldSendAMessageUsingTheSpotHitAPI() + { + $expectedRequest = [ + function ($method, $url, $options) { + $this->assertSame('POST', $method); + $this->assertSame('https://www.spot-hit.fr/api/envoyer/sms', $url); + $this->assertSame('key=&destinataires=0611223344&type=premium&message=Hello%21&expediteur=', $options['body']); + + return new MockResponse(json_encode([ + 'resultat' => ['success' => 'true'], + 'id' => '???', + ], \JSON_THROW_ON_ERROR)); + }, + ]; + + $client = new MockHttpClient($expectedRequest); + $transport = new SpotHitTransport('', '', $client, null); + $transport->send(new SmsMessage('0611223344', 'Hello!')); + } + + public function argumentsProvider(): \Generator + { + yield [ + function (SpotHitTransport $transport) { $transport->setSmsLong(true); }, + function (array $bodyArguments) { $this->assertSame('1', $bodyArguments['smslong']); }, + ]; + + yield [ + function (SpotHitTransport $transport) { $transport->setLongNBr(3); }, + function (array $bodyArguments) { $this->assertSame('3', $bodyArguments['smslongnbr']); }, + ]; + + yield [ + function (SpotHitTransport $transport) { + $transport->setSmsLong(true); + $transport->setLongNBr(3); + }, + function (array $bodyArguments) { + $this->assertSame('1', $bodyArguments['smslong']); + $this->assertSame('3', $bodyArguments['smslongnbr']); + }, + ]; + } + + /** + * @dataProvider argumentsProvider + */ + public function testShouldForwardArgumentToRequest($setupTransport, $assertions) + { + $expectedRequest = [ + function ($method, $url, $options) use ($assertions) { + $bodyFields = []; + parse_str($options['body'], $bodyFields); + $assertions($bodyFields); + + return new MockResponse(json_encode([ + 'resultat' => ['success' => 'true'], + 'id' => '???', + ], \JSON_THROW_ON_ERROR)); + }, + ]; + + $client = new MockHttpClient($expectedRequest); + $transport = new SpotHitTransport('', '', $client, null); + $setupTransport($transport); + $transport->send(new SmsMessage('0611223344', 'Hello!')); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy