From 568523bf7a8c8021dc982f559803591ca2a87bae Mon Sep 17 00:00:00 2001 From: Oskar Stark Date: Wed, 9 Dec 2020 14:38:16 +0100 Subject: [PATCH] [Notifier][Twilio] Add tests --- .../Tests/TwilioTransportFactoryTest.php | 68 +++++++++++++++++++ .../Twilio/Tests/TwilioTransportTest.php | 51 ++++++++++++++ .../Bridge/Twilio/TwilioTransportFactory.php | 6 ++ .../Notifier/Bridge/Twilio/phpunit.xml.dist | 31 +++++++++ 4 files changed, 156 insertions(+) create mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportFactoryTest.php create mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportTest.php create mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/phpunit.xml.dist diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportFactoryTest.php new file mode 100644 index 0000000000000..9ff62a20fa17e --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportFactoryTest.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\Twilio\Tests; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Notifier\Bridge\Twilio\TwilioTransportFactory; +use Symfony\Component\Notifier\Exception\IncompleteDsnException; +use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; +use Symfony\Component\Notifier\Transport\Dsn; + +final class TwilioTransportFactoryTest extends TestCase +{ + public function testCreateWithDsn(): void + { + $factory = $this->createFactory(); + + $dsn = 'twilio://accountSid:authToken@default?from=0611223344'; + $transport = $factory->create(Dsn::fromString($dsn)); + $transport->setHost('host.test'); + + $this->assertSame('twilio://host.test?from=0611223344', (string) $transport); + } + + public function testCreateWithNoFromThrowsMalformed(): void + { + $factory = $this->createFactory(); + + $this->expectException(IncompleteDsnException::class); + + $dsnIncomplete = 'twilio://accountSid:authToken@default'; + $factory->create(Dsn::fromString($dsnIncomplete)); + } + + public function testSupportsTwilioScheme(): void + { + $factory = $this->createFactory(); + + $dsn = 'twilio://accountSid:authToken@default?from=0611223344'; + $dsnUnsupported = 'twilioooo://accountSid:authToken@default?from=0611223344'; + + $this->assertTrue($factory->supports(Dsn::fromString($dsn))); + $this->assertFalse($factory->supports(Dsn::fromString($dsnUnsupported))); + } + + public function testNonTwilioSchemeThrows(): void + { + $factory = $this->createFactory(); + + $this->expectException(UnsupportedSchemeException::class); + + $dsnUnsupported = 'twilioooo://accountSid:authToken@default?from=0611223344'; + $factory->create(Dsn::fromString($dsnUnsupported)); + } + + private function createFactory(): TwilioTransportFactory + { + return new TwilioTransportFactory(); + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportTest.php new file mode 100644 index 0000000000000..1142c3e9ccb06 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/TwilioTransportTest.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\Twilio\Tests; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Notifier\Bridge\Twilio\TwilioTransport; +use Symfony\Component\Notifier\Exception\LogicException; +use Symfony\Component\Notifier\Message\MessageInterface; +use Symfony\Component\Notifier\Message\SmsMessage; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +final class TwilioTransportTest extends TestCase +{ + public function testToStringContainsProperties(): void + { + $transport = $this->createTransport(); + + $this->assertSame('twilio://host.test?from=sender', (string) $transport); + } + + public function testSupportsMessageInterface(): void + { + $transport = $this->createTransport(); + + $this->assertTrue($transport->supports(new SmsMessage('0611223344', 'Hello!'))); + $this->assertFalse($transport->supports($this->createMock(MessageInterface::class))); + } + + public function testSendNonSmsMessageThrowsException(): void + { + $transport = $this->createTransport(); + + $this->expectException(LogicException::class); + + $transport->send($this->createMock(MessageInterface::class)); + } + + private function createTransport(): TwilioTransport + { + return (new TwilioTransport('accountSid', 'authToken', 'sender', $this->createMock(HttpClientInterface::class)))->setHost('host.test'); + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/TwilioTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/Twilio/TwilioTransportFactory.php index f307a950562fd..54634820cd308 100644 --- a/src/Symfony/Component/Notifier/Bridge/Twilio/TwilioTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/Twilio/TwilioTransportFactory.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Notifier\Bridge\Twilio; +use Symfony\Component\Notifier\Exception\IncompleteDsnException; use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; use Symfony\Component\Notifier\Transport\AbstractTransportFactory; use Symfony\Component\Notifier\Transport\Dsn; @@ -32,6 +33,11 @@ public function create(Dsn $dsn): TransportInterface $accountSid = $this->getUser($dsn); $authToken = $this->getPassword($dsn); $from = $dsn->getOption('from'); + + if (!$from) { + throw new IncompleteDsnException('Missing from.', $dsn->getOriginalDsn()); + } + $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $port = $dsn->getPort(); diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/phpunit.xml.dist b/src/Symfony/Component/Notifier/Bridge/Twilio/phpunit.xml.dist new file mode 100644 index 0000000000000..befd94d20307f --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Twilio/phpunit.xml.dist @@ -0,0 +1,31 @@ + + + + + + + + + + ./Tests/ + + + + + + ./ + + ./Resources + ./Tests + ./vendor + + + +