Skip to content

Commit f2dbd83

Browse files
OskarStarknicolas-grekas
authored andcommitted
Add tests for UnsupportedSchemeException
1 parent 7d79b85 commit f2dbd83

File tree

3 files changed

+119
-20
lines changed

3 files changed

+119
-20
lines changed

Exception/UnsupportedSchemeException.php

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ class UnsupportedSchemeException extends LogicException
2828
'class' => Bridge\Mailgun\Transport\MailgunTransportFactory::class,
2929
'package' => 'symfony/mailgun-mailer',
3030
],
31+
'mailjet' => [
32+
'class' => Bridge\Mailjet\Transport\MailjetTransportFactory::class,
33+
'package' => 'symfony/mailjet-mailer',
34+
],
35+
'mandrill' => [
36+
'class' => Bridge\Mailchimp\Transport\MandrillTransportFactory::class,
37+
'package' => 'symfony/mailchimp-mailer',
38+
],
3139
'postmark' => [
3240
'class' => Bridge\Postmark\Transport\PostmarkTransportFactory::class,
3341
'package' => 'symfony/postmark-mailer',
@@ -36,22 +44,14 @@ class UnsupportedSchemeException extends LogicException
3644
'class' => Bridge\Sendgrid\Transport\SendgridTransportFactory::class,
3745
'package' => 'symfony/sendgrid-mailer',
3846
],
39-
'ses' => [
40-
'class' => Bridge\Amazon\Transport\SesTransportFactory::class,
41-
'package' => 'symfony/amazon-mailer',
42-
],
43-
'mandrill' => [
44-
'class' => Bridge\Mailchimp\Transport\MandrillTransportFactory::class,
45-
'package' => 'symfony/mailchimp-mailer',
46-
],
47-
'mailjet' => [
48-
'class' => Bridge\Mailjet\Transport\MailjetTransportFactory::class,
49-
'package' => 'symfony/mailjet-mailer',
50-
],
5147
'sendinblue' => [
5248
'class' => Bridge\Sendinblue\Transport\SendinblueTransportFactory::class,
5349
'package' => 'symfony/sendinblue-mailer',
5450
],
51+
'ses' => [
52+
'class' => Bridge\Amazon\Transport\SesTransportFactory::class,
53+
'package' => 'symfony/amazon-mailer',
54+
],
5555
];
5656

5757
public function __construct(Dsn $dsn, string $name = null, array $supported = [])
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Tests\Exception;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bridge\PhpUnit\ClassExistsMock;
16+
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
17+
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
18+
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
19+
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
20+
use Symfony\Component\Mailer\Bridge\Mailjet\Transport\MailjetTransportFactory;
21+
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory;
22+
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory;
23+
use Symfony\Component\Mailer\Bridge\Sendinblue\Transport\SendinblueTransportFactory;
24+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
25+
use Symfony\Component\Mailer\Transport\Dsn;
26+
27+
/**
28+
* @runTestsInSeparateProcesses
29+
*/
30+
final class UnsupportedSchemeExceptionTest extends TestCase
31+
{
32+
public static function setUpBeforeClass(): void
33+
{
34+
ClassExistsMock::register(__CLASS__);
35+
ClassExistsMock::withMockedClasses([
36+
GmailTransportFactory::class => false,
37+
MailgunTransportFactory::class => false,
38+
MailjetTransportFactory::class => false,
39+
MandrillTransportFactory::class => false,
40+
PostmarkTransportFactory::class => false,
41+
SendgridTransportFactory::class => false,
42+
SendinblueTransportFactory::class => false,
43+
SesTransportFactory::class => false,
44+
]);
45+
}
46+
47+
/**
48+
* @dataProvider messageWhereSchemeIsPartOfSchemeToPackageMapProvider
49+
*/
50+
public function testMessageWhereSchemeIsPartOfSchemeToPackageMap(string $scheme, string $package)
51+
{
52+
$dsn = new Dsn($scheme, 'localhost');
53+
54+
$this->assertSame(
55+
sprintf('Unable to send emails via "%s" as the bridge is not installed; try running "composer require %s".', $scheme, $package),
56+
(new UnsupportedSchemeException($dsn))->getMessage()
57+
);
58+
}
59+
60+
public function messageWhereSchemeIsPartOfSchemeToPackageMapProvider(): \Generator
61+
{
62+
yield ['gmail', 'symfony/google-mailer'];
63+
yield ['mailgun', 'symfony/mailgun-mailer'];
64+
yield ['mailjet', 'symfony/mailjet-mailer'];
65+
yield ['mandrill', 'symfony/mailchimp-mailer'];
66+
yield ['postmark', 'symfony/postmark-mailer'];
67+
yield ['sendgrid', 'symfony/sendgrid-mailer'];
68+
yield ['sendinblue', 'symfony/sendinblue-mailer'];
69+
yield ['ses', 'symfony/amazon-mailer'];
70+
}
71+
72+
/**
73+
* @dataProvider messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider
74+
*/
75+
public function testMessageWhereSchemeIsNotPartOfSchemeToPackageMap(string $expected, Dsn $dsn, ?string $name, array $supported)
76+
{
77+
$this->assertSame(
78+
$expected,
79+
(new UnsupportedSchemeException($dsn, $name, $supported))->getMessage()
80+
);
81+
}
82+
83+
public function messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider(): \Generator
84+
{
85+
yield [
86+
'The "somethingElse" scheme is not supported.',
87+
new Dsn('somethingElse', 'localhost'),
88+
null,
89+
[],
90+
];
91+
92+
yield [
93+
'The "somethingElse" scheme is not supported.',
94+
new Dsn('somethingElse', 'localhost'),
95+
'foo',
96+
[],
97+
];
98+
99+
yield [
100+
'The "somethingElse" scheme is not supported; supported schemes for mailer "one" are: "one", "two".',
101+
new Dsn('somethingElse', 'localhost'),
102+
'one',
103+
['one', 'two'],
104+
];
105+
}
106+
}

composer.json

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,8 @@
2525
"symfony/service-contracts": "^1.1|^2"
2626
},
2727
"require-dev": {
28-
"symfony/amazon-mailer": "^4.4|^5.0",
29-
"symfony/google-mailer": "^4.4|^5.0",
3028
"symfony/http-client-contracts": "^1.1|^2",
31-
"symfony/mailjet-mailer": "^4.4|^5.0",
32-
"symfony/mailgun-mailer": "^4.4|^5.0",
33-
"symfony/mailchimp-mailer": "^4.4|^5.0",
34-
"symfony/messenger": "^4.4|^5.0",
35-
"symfony/postmark-mailer": "^4.4|^5.0",
36-
"symfony/sendgrid-mailer": "^4.4|^5.0"
29+
"symfony/messenger": "^4.4|^5.0"
3730
},
3831
"conflict": {
3932
"symfony/http-kernel": "<4.4"

0 commit comments

Comments
 (0)