8000 [Notifier] [SpotHit] Support `smslong` and `smslongnbr` API parameters by camillebaronnet · Pull Request #50136 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Notifier] [SpotHit] Support smslong and smslongnbr API parameters #50136

New issue

Have a qu 8000 estion about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/Symfony/Component/Notifier/Bridge/SpotHit/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
CHANGELOG
=========

6.4
---

* Support `SMSLong` and `SMSLongNBr` API parameters

6.2
---

Expand Down
4 changes: 3 additions & 1 deletion src/Symfony/Component/Notifier/Bridge/SpotHit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
---------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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
Expand Down Expand Up @@ -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,
],
]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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'];
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -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!'));
}
}
0