From 8c24a537c71d34321aedda9a57750bbcdb789e73 Mon Sep 17 00:00:00 2001 From: Konstantin Myakshin Date: Tue, 16 Jul 2019 23:16:46 +0300 Subject: [PATCH] [Mailer][DX] Improve exception message for unsupported scheme --- .../Mailer/Bridge/Amazon/Factory/SesTransportFactory.php | 2 +- .../Bridge/Amazon/Tests/Factory/SesTransportFactoryTest.php | 5 ++++- .../Mailer/Bridge/Google/Factory/GmailTransportFactory.php | 2 +- .../Google/Tests/Factory/GmailTransportFactoryTest.php | 5 ++++- .../Bridge/Mailchimp/Factory/MandrillTransportFactory.php | 2 +- .../Tests/Factory/MandrillTransportFactoryTest.php | 5 ++++- .../Bridge/Mailgun/Factory/MailgunTransportFactory.php | 2 +- .../Mailgun/Tests/Factory/MailgunTransportFactoryTest.php | 5 ++++- .../Bridge/Postmark/Factory/PostmarkTransportFactory.php | 2 +- .../Postmark/Tests/Factory/PostmarkTransportFactoryTest.php | 5 ++++- .../Bridge/Sendgrid/Factory/SendgridTransportFactory.php | 2 +- .../Sendgrid/Tests/Factory/SendgridTransportFactoryTest.php | 5 ++++- .../Mailer/Exception/UnsupportedSchemeException.php | 4 ++-- .../Mailer/Tests/Transport/NullTransportFactoryTest.php | 5 ++++- .../Mailer/Tests/Transport/SendmailTransportFactoryTest.php | 5 ++++- .../Component/Mailer/Tests/TransportFactoryTestCase.php | 6 +++++- .../Component/Mailer/Transport/NullTransportFactory.php | 2 +- .../Component/Mailer/Transport/SendmailTransportFactory.php | 2 +- 18 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Factory/SesTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Factory/SesTransportFactory.php index ca6fd49829a9..5e1b3d473d74 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Factory/SesTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Factory/SesTransportFactory.php @@ -41,7 +41,7 @@ public function create(Dsn $dsn): TransportInterface return new Amazon\Smtp\SesTransport($user, $password, $region, $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['api', 'http', 'smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Factory/SesTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Factory/SesTransportFactoryTest.php index 595f725828f1..8b5a6c8d935f 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Factory/SesTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Factory/SesTransportFactoryTest.php @@ -86,7 +86,10 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('foo', 'ses', self::USER, self::PASSWORD)]; + yield [ + new Dsn('foo', 'ses', self::USER, self::PASSWORD), + 'The "foo" scheme is not supported for mailer "ses". Supported schemes are: "api", "http", "smtp".', + ]; } public function incompleteDsnProvider(): iterable diff --git a/src/Symfony/Component/Mailer/Bridge/Google/Factory/GmailTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Google/Factory/GmailTransportFactory.php index d96a4710188f..76f9fadfd2e3 100644 --- a/src/Symfony/Component/Mailer/Bridge/Google/Factory/GmailTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Google/Factory/GmailTransportFactory.php @@ -28,7 +28,7 @@ public function create(Dsn $dsn): TransportInterface return new GmailTransport($this->getUser($dsn), $this->getPassword($dsn), $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Bridge/Google/Tests/Factory/GmailTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Google/Tests/Factory/GmailTransportFactoryTest.php index a8a2f073961a..27e44d917225 100644 --- a/src/Symfony/Component/Mailer/Bridge/Google/Tests/Factory/GmailTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Google/Tests/Factory/GmailTransportFactoryTest.php @@ -38,7 +38,10 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('http', 'gmail', self::USER, self::PASSWORD)]; + yield [ + new Dsn('foo', 'gmail', self::USER, self::PASSWORD), + 'The "foo" scheme is not supported for mailer "gmail". Supported schemes are: "smtp".', + ]; } public function incompleteDsnProvider(): iterable diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Factory/MandrillTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Factory/MandrillTransportFactory.php index 265302fa8b8e..f0ca3349e40b 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Factory/MandrillTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Factory/MandrillTransportFactory.php @@ -41,7 +41,7 @@ public function create(Dsn $dsn): TransportInterface return new Mailchimp\Smtp\MandrillTransport($user, $password, $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['api', 'http', 'smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Factory/MandrillTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Factory/MandrillTransportFactoryTest.php index 07dbdd493710..17e6d2d8dd18 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Factory/MandrillTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Factory/MandrillTransportFactoryTest.php @@ -71,7 +71,10 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('foo', 'mandrill', self::USER)]; + yield [ + new Dsn('foo', 'mandrill', self::USER), + 'The "foo" scheme is not supported for mailer "mandrill". Supported schemes are: "api", "http", "smtp".', + ]; } public function incompleteDsnProvider(): iterable diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/Factory/MailgunTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Mailgun/Factory/MailgunTransportFactory.php index 3cb4369eb398..2f0c369c8568 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Factory/MailgunTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Factory/MailgunTransportFactory.php @@ -41,7 +41,7 @@ public function create(Dsn $dsn): TransportInterface return new Mailgun\Smtp\MailgunTransport($user, $password, $region, $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['api', 'http', 'smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Factory/MailgunTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Factory/MailgunTransportFactoryTest.php index 0b2c31e36243..535042bf349c 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Factory/MailgunTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Factory/MailgunTransportFactoryTest.php @@ -76,7 +76,10 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('foo', 'mailgun', self::USER, self::PASSWORD)]; + yield [ + new Dsn('foo', 'mailgun', self::USER, self::PASSWORD), + 'The "foo" scheme is not supported for mailer "mailgun". Supported schemes are: "api", "http", "smtp".', + ]; } public function incompleteDsnProvider(): iterable diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Factory/PostmarkTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Factory/PostmarkTransportFactory.php index 0a67102120de..cefcd3cd304b 100644 --- a/src/Symfony/Component/Mailer/Bridge/Postmark/Factory/PostmarkTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Factory/PostmarkTransportFactory.php @@ -35,7 +35,7 @@ public function create(Dsn $dsn): TransportInterface return new Postmark\Smtp\PostmarkTransport($user, $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['api', 'smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Factory/PostmarkTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Factory/PostmarkTransportFactoryTest.php index 0de2e35aea9e..0a7175cbaf31 100644 --- a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Factory/PostmarkTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Factory/PostmarkTransportFactoryTest.php @@ -60,7 +60,10 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('foo', 'postmark', self::USER)]; + yield [ + new Dsn('foo', 'postmark', self::USER), + 'The "foo" scheme is not supported for mailer "postmark". Supported schemes are: "api", "smtp".', + ]; } public function incompleteDsnProvider(): iterable diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Factory/SendgridTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Factory/SendgridTransportFactory.php index ec7ed3cfdd2f..a2d1bfdae666 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Factory/SendgridTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Factory/SendgridTransportFactory.php @@ -34,7 +34,7 @@ public function create(Dsn $dsn): TransportInterface return new Sendgrid\Smtp\SendgridTransport($key, $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['api', 'smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Factory/SendgridTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Factory/SendgridTransportFactoryTest.php index 82ac41e03b04..2f287c8469fe 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Factory/SendgridTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Factory/SendgridTransportFactoryTest.php @@ -60,6 +60,9 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('foo', 'sendgrid', self::USER)]; + yield [ + new Dsn('foo', 'sendgrid', self::USER), + 'The "foo" scheme is not supported for mailer "sendgrid". Supported schemes are: "api", "smtp".', + ]; } } diff --git a/src/Symfony/Component/Mailer/Exception/UnsupportedSchemeException.php b/src/Symfony/Component/Mailer/Exception/UnsupportedSchemeException.php index 8457378c46e3..e67733630cea 100644 --- a/src/Symfony/Component/Mailer/Exception/UnsupportedSchemeException.php +++ b/src/Symfony/Component/Mailer/Exception/UnsupportedSchemeException.php @@ -18,8 +18,8 @@ */ class UnsupportedSchemeException extends LogicException { - public function __construct(Dsn $dsn) + public function __construct(Dsn $dsn, array $supported) { - parent::__construct(sprintf('The "%s" scheme is not supported for mailer "%s".', $dsn->getScheme(), $dsn->getHost())); + parent::__construct(sprintf('The "%s" scheme is not supported for mailer "%s". Supported schemes are: "%s".', $dsn->getScheme(), $dsn->getHost(), implode('", "', $supported))); } } diff --git a/src/Symfony/Component/Mailer/Tests/Transport/NullTransportFactoryTest.php b/src/Symfony/Component/Mailer/Tests/Transport/NullTransportFactoryTest.php index 8b8ab4a8cd81..f5327fb03c0f 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/NullTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/NullTransportFactoryTest.php @@ -47,6 +47,9 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('foo', 'null')]; + yield [ + new Dsn('foo', 'null'), + 'The "foo" scheme is not supported for mailer "null". Supported schemes are: "smtp".', + ]; } } diff --git a/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportFactoryTest.php b/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportFactoryTest.php index d5ee4bec5211..c1a03cbdb308 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportFactoryTest.php @@ -47,6 +47,9 @@ public function createProvider(): iterable public function unsupportedSchemeProvider(): iterable { - yield [new Dsn('http', 'sendmail')]; + yield [ + new Dsn('http', 'sendmail'), + 'The "http" scheme is not supported for mailer "sendmail". Supported schemes are: "smtp".', + ]; } } diff --git a/src/Symfony/Component/Mailer/Tests/TransportFactoryTestCase.php b/src/Symfony/Component/Mailer/Tests/TransportFactoryTestCase.php index b17f81c1e664..5f6ada0d4407 100644 --- a/src/Symfony/Component/Mailer/Tests/TransportFactoryTestCase.php +++ b/src/Symfony/Component/Mailer/Tests/TransportFactoryTestCase.php @@ -69,11 +69,15 @@ public function testCreate(Dsn $dsn, TransportInterface $transport): void /** * @dataProvider unsupportedSchemeProvider */ - public function testUnsupportedSchemeException(Dsn $dsn): void + public function testUnsupportedSchemeException(Dsn $dsn, string $message = null): void { $factory = $this->getFactory(); $this->expectException(UnsupportedSchemeException::class); + if (null !== $message) { + $this->expectExceptionMessage($message); + } + $factory->create($dsn); } diff --git a/src/Symfony/Component/Mailer/Transport/NullTransportFactory.php b/src/Symfony/Component/Mailer/Transport/NullTransportFactory.php index 34600f7ec3bd..d874e5b583c4 100644 --- a/src/Symfony/Component/Mailer/Transport/NullTransportFactory.php +++ b/src/Symfony/Component/Mailer/Transport/NullTransportFactory.php @@ -24,7 +24,7 @@ public function create(Dsn $dsn): TransportInterface return new NullTransport($this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['smtp']); } public function supports(Dsn $dsn): bool diff --git a/src/Symfony/Component/Mailer/Transport/SendmailTransportFactory.php b/src/Symfony/Component/Mailer/Transport/SendmailTransportFactory.php index 99e7bbf097ef..5e89a2070e06 100644 --- a/src/Symfony/Component/Mailer/Transport/SendmailTransportFactory.php +++ b/src/Symfony/Component/Mailer/Transport/SendmailTransportFactory.php @@ -24,7 +24,7 @@ public function create(Dsn $dsn): TransportInterface return new SendmailTransport(null, $this->dispatcher, $this->logger); } - throw new UnsupportedSchemeException($dsn); + throw new UnsupportedSchemeException($dsn, ['smtp']); } public function supports(Dsn $dsn): bool