Add tests for UnsupportedSchemeException
This commit is contained in:
parent
18997ab8d0
commit
48553dac5d
@ -28,6 +28,14 @@ class UnsupportedSchemeException extends LogicException
|
|||||||
'class' => Bridge\Mailgun\Transport\MailgunTransportFactory::class,
|
'class' => Bridge\Mailgun\Transport\MailgunTransportFactory::class,
|
||||||
'package' => 'symfony/mailgun-mailer',
|
'package' => 'symfony/mailgun-mailer',
|
||||||
],
|
],
|
||||||
|
'mailjet' => [
|
||||||
|
'class' => Bridge\Mailjet\Transport\MailjetTransportFactory::class,
|
||||||
|
'package' => 'symfony/mailjet-mailer',
|
||||||
|
],
|
||||||
|
'mandrill' => [
|
||||||
|
'class' => Bridge\Mailchimp\Transport\MandrillTransportFactory::class,
|
||||||
|
'package' => 'symfony/mailchimp-mailer',
|
||||||
|
],
|
||||||
'postmark' => [
|
'postmark' => [
|
||||||
'class' => Bridge\Postmark\Transport\PostmarkTransportFactory::class,
|
'class' => Bridge\Postmark\Transport\PostmarkTransportFactory::class,
|
||||||
'package' => 'symfony/postmark-mailer',
|
'package' => 'symfony/postmark-mailer',
|
||||||
@ -36,22 +44,14 @@ class UnsupportedSchemeException extends LogicException
|
|||||||
'class' => Bridge\Sendgrid\Transport\SendgridTransportFactory::class,
|
'class' => Bridge\Sendgrid\Transport\SendgridTransportFactory::class,
|
||||||
'package' => 'symfony/sendgrid-mailer',
|
'package' => 'symfony/sendgrid-mailer',
|
||||||
],
|
],
|
||||||
'ses' => [
|
|
||||||
'class' => Bridge\Amazon\Transport\SesTransportFactory::class,
|
|
||||||
'package' => 'symfony/amazon-mailer',
|
|
||||||
],
|
|
||||||
'mandrill' => [
|
|
||||||
'class' => Bridge\Mailchimp\Transport\MandrillTransportFactory::class,
|
|
||||||
'package' => 'symfony/mailchimp-mailer',
|
|
||||||
],
|
|
||||||
'mailjet' => [
|
|
||||||
'class' => Bridge\Mailjet\Transport\MailjetTransportFactory::class,
|
|
||||||
'package' => 'symfony/mailjet-mailer',
|
|
||||||
],
|
|
||||||
'sendinblue' => [
|
'sendinblue' => [
|
||||||
'class' => Bridge\Sendinblue\Transport\SendinblueTransportFactory::class,
|
'class' => Bridge\Sendinblue\Transport\SendinblueTransportFactory::class,
|
||||||
'package' => 'symfony/sendinblue-mailer',
|
'package' => 'symfony/sendinblue-mailer',
|
||||||
],
|
],
|
||||||
|
'ses' => [
|
||||||
|
'class' => Bridge\Amazon\Transport\SesTransportFactory::class,
|
||||||
|
'package' => 'symfony/amazon-mailer',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct(Dsn $dsn, string $name = null, array $supported = [])
|
public function __construct(Dsn $dsn, string $name = null, array $supported = [])
|
||||||
|
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Mailer\Tests\Exception;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Bridge\PhpUnit\ClassExistsMock;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Mailjet\Transport\MailjetTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Bridge\Sendinblue\Transport\SendinblueTransportFactory;
|
||||||
|
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
|
||||||
|
use Symfony\Component\Mailer\Transport\Dsn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @runTestsInSeparateProcesses
|
||||||
|
*/
|
||||||
|
final class UnsupportedSchemeExceptionTest extends TestCase
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass(): void
|
||||||
|
{
|
||||||
|
ClassExistsMock::register(__CLASS__);
|
||||||
|
ClassExistsMock::withMockedClasses([
|
||||||
|
GmailTransportFactory::class => false,
|
||||||
|
MailgunTransportFactory::class => false,
|
||||||
|
MailjetTransportFactory::class => false,
|
||||||
|
MandrillTransportFactory::class => false,
|
||||||
|
PostmarkTransportFactory::class => false,
|
||||||
|
SendgridTransportFactory::class => false,
|
||||||
|
SendinblueTransportFactory::class => false,
|
||||||
|
SesTransportFactory::class => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider messageWhereSchemeIsPartOfSchemeToPackageMapProvider
|
||||||
|
*/
|
||||||
|
public function testMessageWhereSchemeIsPartOfSchemeToPackageMap(string $scheme, string $package)
|
||||||
|
{
|
||||||
|
$dsn = new Dsn($scheme, 'localhost');
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
sprintf('Unable to send emails via "%s" as the bridge is not installed; try running "composer require %s".', $scheme, $package),
|
||||||
|
(new UnsupportedSchemeException($dsn))->getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messageWhereSchemeIsPartOfSchemeToPackageMapProvider(): \Generator
|
||||||
|
{
|
||||||
|
yield ['gmail', 'symfony/google-mailer'];
|
||||||
|
yield ['mailgun', 'symfony/mailgun-mailer'];
|
||||||
|
yield ['mailjet', 'symfony/mailjet-mailer'];
|
||||||
|
yield ['mandrill', 'symfony/mailchimp-mailer'];
|
||||||
|
yield ['postmark', 'symfony/postmark-mailer'];
|
||||||
|
yield ['sendgrid', 'symfony/sendgrid-mailer'];
|
||||||
|
yield ['sendinblue', 'symfony/sendinblue-mailer'];
|
||||||
|
yield ['ses', 'symfony/amazon-mailer'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider
|
||||||
|
*/
|
||||||
|
public function testMessageWhereSchemeIsNotPartOfSchemeToPackageMap(string $expected, Dsn $dsn, ?string $name, array $supported)
|
||||||
|
{
|
||||||
|
$this->assertSame(
|
||||||
|
$expected,
|
||||||
|
(new UnsupportedSchemeException($dsn, $name, $supported))->getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider(): \Generator
|
||||||
|
{
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported.',
|
||||||
|
new Dsn('somethingElse', 'localhost'),
|
||||||
|
null,
|
||||||
|
[],
|
||||||
|
];
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported.',
|
||||||
|
new Dsn('somethingElse', 'localhost'),
|
||||||
|
'foo',
|
||||||
|
[],
|
||||||
|
];
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported; supported schemes for mailer "one" are: "one", "two".',
|
||||||
|
new Dsn('somethingElse', 'localhost'),
|
||||||
|
'one',
|
||||||
|
['one', 'two'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -25,15 +25,8 @@
|
|||||||
"symfony/service-contracts": "^1.1|^2"
|
"symfony/service-contracts": "^1.1|^2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/amazon-mailer": "^4.4|^5.0",
|
|
||||||
"symfony/google-mailer": "^4.4|^5.0",
|
|
||||||
"symfony/http-client-contracts": "^1.1|^2",
|
"symfony/http-client-contracts": "^1.1|^2",
|
||||||
"symfony/mailjet-mailer": "^4.4|^5.0",
|
"symfony/messenger": "^4.4|^5.0"
|
||||||
"symfony/mailgun-mailer": "^4.4|^5.0",
|
|
||||||
"symfony/mailchimp-mailer": "^4.4|^5.0",
|
|
||||||
"symfony/messenger": "^4.4|^5.0",
|
|
||||||
"symfony/postmark-mailer": "^4.4|^5.0",
|
|
||||||
"symfony/sendgrid-mailer": "^4.4|^5.0"
|
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"symfony/http-kernel": "<4.4"
|
"symfony/http-kernel": "<4.4"
|
||||||
|
@ -20,57 +20,21 @@ use Symfony\Component\Notifier\Transport\Dsn;
|
|||||||
class UnsupportedSchemeException extends LogicException
|
class UnsupportedSchemeException extends LogicException
|
||||||
{
|
{
|
||||||
private const SCHEME_TO_PACKAGE_MAP = [
|
private const SCHEME_TO_PACKAGE_MAP = [
|
||||||
'slack' => [
|
|
||||||
'class' => Bridge\Slack\SlackTransportFactory::class,
|
|
||||||
'package' => 'symfony/slack-notifier',
|
|
||||||
],
|
|
||||||
'telegram' => [
|
|
||||||
'class' => Bridge\Telegram\TelegramTransportFactory::class,
|
|
||||||
'package' => 'symfony/telegram-notifier',
|
|
||||||
],
|
|
||||||
'mattermost' => [
|
|
||||||
'class' => Bridge\Mattermost\MattermostTransportFactory::class,
|
|
||||||
'package' => 'symfony/mattermost-notifier',
|
|
||||||
],
|
|
||||||
'googlechat' => [
|
|
||||||
'class' => Bridge\GoogleChat\GoogleChatTransportFactory::class,
|
|
||||||
'package' => 'symfony/google-chat-notifier',
|
|
||||||
],
|
|
||||||
'nexmo' => [
|
|
||||||
'class' => Bridge\Nexmo\NexmoTransportFactory::class,
|
|
||||||
'package' => 'symfony/nexmo-notifier',
|
|
||||||
],
|
|
||||||
'iqsms' => [
|
|
||||||
'class' => Bridge\Iqsms\IqsmsTransportFactory::class,
|
|
||||||
'package' => 'symfony/iqsms-notifier',
|
|
||||||
],
|
|
||||||
'rocketchat' => [
|
|
||||||
'class' => Bridge\RocketChat\RocketChatTransportFactory::class,
|
|
||||||
'package' => 'symfony/rocket-chat-notifier',
|
|
||||||
],
|
|
||||||
'twilio' => [
|
|
||||||
'class' => Bridge\Twilio\TwilioTransportFactory::class,
|
|
||||||
'package' => 'symfony/twilio-notifier',
|
|
||||||
],
|
|
||||||
'allmysms' => [
|
'allmysms' => [
|
||||||
'class' => Bridge\AllMySms\AllMySmsTransportFactory::class,
|
'class' => Bridge\AllMySms\AllMySmsTransportFactory::class,
|
||||||
'package' => 'symfony/allmysms-notifier',
|
'package' => 'symfony/allmysms-notifier',
|
||||||
],
|
],
|
||||||
'infobip' => [
|
'clickatell' => [
|
||||||
'class' => Bridge\Infobip\InfobipTransportFactory::class,
|
'class' => Bridge\Clickatell\ClickatellTransportFactory::class,
|
||||||
'package' => 'symfony/infobip-notifier',
|
'package' => 'symfony/clickatell-notifier',
|
||||||
],
|
],
|
||||||
'firebase' => [
|
'discord' => [
|
||||||
'class' => Bridge\Firebase\FirebaseTransportFactory::class,
|
'class' => Bridge\Discord\DiscordTransportFactory::class,
|
||||||
'package' => 'symfony/firebase-notifier',
|
'package' => 'symfony/discord-notifier',
|
||||||
],
|
],
|
||||||
'freemobile' => [
|
'esendex' => [
|
||||||
'class' => Bridge\FreeMobile\FreeMobileTransportFactory::class,
|
'class' => Bridge\Esendex\EsendexTransportFactory::class,
|
||||||
'package' => 'symfony/free-mobile-notifier',
|
'package' => 'symfony/esendex-notifier',
|
||||||
],
|
|
||||||
'spothit' => [
|
|
||||||
'class' => Bridge\SpotHit\SpotHitTransportFactory::class,
|
|
||||||
'package' => 'symfony/spot-hit-notifier',
|
|
||||||
],
|
],
|
||||||
'fakechat' => [
|
'fakechat' => [
|
||||||
'class' => Bridge\FakeChat\FakeChatTransportFactory::class,
|
'class' => Bridge\FakeChat\FakeChatTransportFactory::class,
|
||||||
@ -80,78 +44,114 @@ class UnsupportedSchemeException extends LogicException
|
|||||||
'class' => Bridge\FakeSms\FakeSmsTransportFactory::class,
|
'class' => Bridge\FakeSms\FakeSmsTransportFactory::class,
|
||||||
'package' => 'symfony/fake-sms-notifier',
|
'package' => 'symfony/fake-sms-notifier',
|
||||||
],
|
],
|
||||||
'ovhcloud' => [
|
'firebase' => [
|
||||||
'class' => Bridge\OvhCloud\OvhCloudTransportFactory::class,
|
'class' => Bridge\Firebase\FirebaseTransportFactory::class,
|
||||||
'package' => 'symfony/ovh-cloud-notifier',
|
'package' => 'symfony/firebase-notifier',
|
||||||
],
|
],
|
||||||
'sinch' => [
|
'freemobile' => [
|
||||||
'class' => Bridge\Sinch\SinchTransportFactory::class,
|
'class' => Bridge\FreeMobile\FreeMobileTransportFactory::class,
|
||||||
'package' => 'symfony/sinch-notifier',
|
'package' => 'symfony/free-mobile-notifier',
|
||||||
],
|
|
||||||
'zulip' => [
|
|
||||||
'class' => Bridge\Zulip\ZulipTransportFactory::class,
|
|
||||||
'package' => 'symfony/zulip-notifier',
|
|
||||||
],
|
|
||||||
'smsapi' => [
|
|
||||||
'class' => Bridge\Smsapi\SmsapiTransportFactory::class,
|
|
||||||
'package' => 'symfony/smsapi-notifier',
|
|
||||||
],
|
|
||||||
'esendex' => [
|
|
||||||
'class' => Bridge\Esendex\EsendexTransportFactory::class,
|
|
||||||
'package' => 'symfony/esendex-notifier',
|
|
||||||
],
|
|
||||||
'discord' => [
|
|
||||||
'class' => Bridge\Discord\DiscordTransportFactory::class,
|
|
||||||
'package' => 'symfony/discord-notifier',
|
|
||||||
],
|
],
|
||||||
'gatewayapi' => [
|
'gatewayapi' => [
|
||||||
'class' => Bridge\GatewayApi\GatewayApiTransportFactory::class,
|
'class' => Bridge\GatewayApi\GatewayApiTransportFactory::class,
|
||||||
'package' => 'symfony/gatewayapi-notifier',
|
'package' => 'symfony/gatewayapi-notifier',
|
||||||
],
|
],
|
||||||
'octopush' => [
|
|
||||||
'class' => Bridge\Octopush\OctopushTransportFactory::class,
|
|
||||||
'package' => 'symfony/octopush-notifier',
|
|
||||||
],
|
|
||||||
'mercure' => [
|
|
||||||
'class' => Bridge\Mercure\MercureTransportFactory::class,
|
|
||||||
'package' => 'symfony/mercure-notifier',
|
|
||||||
],
|
|
||||||
'gitter' => [
|
'gitter' => [
|
||||||
'class' => Bridge\Gitter\GitterTransportFactory::class,
|
'class' => Bridge\Gitter\GitterTransportFactory::class,
|
||||||
'package' => 'symfony/gitter-notifier',
|
'package' => 'symfony/gitter-notifier',
|
||||||
],
|
],
|
||||||
'clickatell' => [
|
'googlechat' => [
|
||||||
'class' => Bridge\Clickatell\ClickatellTransportFactory::class,
|
'class' => Bridge\GoogleChat\GoogleChatTransportFactory::class,
|
||||||
'package' => 'symfony/clickatell-notifier',
|
'package' => 'symfony/google-chat-notifier',
|
||||||
|
],
|
||||||
|
'infobip' => [
|
||||||
|
'class' => Bridge\Infobip\InfobipTransportFactory::class,
|
||||||
|
'package' => 'symfony/infobip-notifier',
|
||||||
|
],
|
||||||
|
'iqsms' => [
|
||||||
|
'class' => Bridge\Iqsms\IqsmsTransportFactory::class,
|
||||||
|
'package' => 'symfony/iqsms-notifier',
|
||||||
],
|
],
|
||||||
'lightsms' => [
|
'lightsms' => [
|
||||||
'class' => Bridge\LightSms\LightSmsTransportFactory::class,
|
'class' => Bridge\LightSms\LightSmsTransportFactory::class,
|
||||||
'package' => 'symfony/light-sms-notifier',
|
'package' => 'symfony/light-sms-notifier',
|
||||||
],
|
],
|
||||||
'microsoftteams' => [
|
'linkedin' => [
|
||||||
'class' => Bridge\MicrosoftTeams\MicrosoftTeamsTransportFactory::class,
|
'class' => Bridge\LinkedIn\LinkedInTransportFactory::class,
|
||||||
'package' => 'symfony/microsoft-teams-notifier',
|
'package' => 'symfony/linked-in-notifier',
|
||||||
],
|
],
|
||||||
'smsbiuras' => [
|
'mattermost' => [
|
||||||
'class' => Bridge\SmsBiuras\SmsBiurasTransportFactory::class,
|
'class' => Bridge\Mattermost\MattermostTransportFactory::class,
|
||||||
'package' => 'symfony/sms-biuras-notifier',
|
'package' => 'symfony/mattermost-notifier',
|
||||||
|
],
|
||||||
|
'mercure' => [
|
||||||
|
'class' => Bridge\Mercure\MercureTransportFactory::class,
|
||||||
|
'package' => 'symfony/mercure-notifier',
|
||||||
],
|
],
|
||||||
'messagebird' => [
|
'messagebird' => [
|
||||||
'class' => Bridge\MessageBird\MessageBirdTransportFactory::class,
|
'class' => Bridge\MessageBird\MessageBirdTransportFactory::class,
|
||||||
'package' => 'symfony/message-bird-notifier',
|
'package' => 'symfony/message-bird-notifier',
|
||||||
],
|
],
|
||||||
|
'microsoftteams' => [
|
||||||
|
'class' => Bridge\MicrosoftTeams\MicrosoftTeamsTransportFactory::class,
|
||||||
|
'package' => 'symfony/microsoft-teams-notifier',
|
||||||
|
],
|
||||||
'mobyt' => [
|
'mobyt' => [
|
||||||
'class' => Bridge\Mobyt\MobytTransportFactory::class,
|
'class' => Bridge\Mobyt\MobytTransportFactory::class,
|
||||||
'package' => 'symfony/mobyt-notifier',
|
'package' => 'symfony/mobyt-notifier',
|
||||||
],
|
],
|
||||||
'linkedin' => [
|
'nexmo' => [
|
||||||
'class' => Bridge\LinkedIn\LinkedInTransportFactory::class,
|
'class' => Bridge\Nexmo\NexmoTransportFactory::class,
|
||||||
'package' => 'symfony/linked-in-notifier',
|
'package' => 'symfony/nexmo-notifier',
|
||||||
|
],
|
||||||
|
'octopush' => [
|
||||||
|
'class' => Bridge\Octopush\OctopushTransportFactory::class,
|
||||||
|
'package' => 'symfony/octopush-notifier',
|
||||||
|
],
|
||||||
|
'ovhcloud' => [
|
||||||
|
'class' => Bridge\OvhCloud\OvhCloudTransportFactory::class,
|
||||||
|
'package' => 'symfony/ovh-cloud-notifier',
|
||||||
|
],
|
||||||
|
'rocketchat' => [
|
||||||
|
'class' => Bridge\RocketChat\RocketChatTransportFactory::class,
|
||||||
|
'package' => 'symfony/rocket-chat-notifier',
|
||||||
],
|
],
|
||||||
'sendinblue' => [
|
'sendinblue' => [
|
||||||
'class' => Bridge\Sendinblue\SendinblueTransportFactory::class,
|
'class' => Bridge\Sendinblue\SendinblueTransportFactory::class,
|
||||||
'package' => 'symfony/sendinblue-notifier',
|
'package' => 'symfony/sendinblue-notifier',
|
||||||
],
|
],
|
||||||
|
'sinch' => [
|
||||||
|
'class' => Bridge\Sinch\SinchTransportFactory::class,
|
||||||
|
'package' => 'symfony/sinch-notifier',
|
||||||
|
],
|
||||||
|
'slack' => [
|
||||||
|
'class' => Bridge\Slack\SlackTransportFactory::class,
|
||||||
|
'package' => 'symfony/slack-notifier',
|
||||||
|
],
|
||||||
|
'smsapi' => [
|
||||||
|
'class' => Bridge\Smsapi\SmsapiTransportFactory::class,
|
||||||
|
'package' => 'symfony/smsapi-notifier',
|
||||||
|
],
|
||||||
|
'smsbiuras' => [
|
||||||
|
'class' => Bridge\SmsBiuras\SmsBiurasTransportFactory::class,
|
||||||
|
'package' => 'symfony/sms-biuras-notifier',
|
||||||
|
],
|
||||||
|
'spothit' => [
|
||||||
|
'class' => Bridge\SpotHit\SpotHitTransportFactory::class,
|
||||||
|
'package' => 'symfony/spot-hit-notifier',
|
||||||
|
],
|
||||||
|
'telegram' => [
|
||||||
|
'class' => Bridge\Telegram\TelegramTransportFactory::class,
|
||||||
|
'package' => 'symfony/telegram-notifier',
|
||||||
|
],
|
||||||
|
'twilio' => [
|
||||||
|
'class' => Bridge\Twilio\TwilioTransportFactory::class,
|
||||||
|
'package' => 'symfony/twilio-notifier',
|
||||||
|
],
|
||||||
|
'zulip' => [
|
||||||
|
'class' => Bridge\Zulip\ZulipTransportFactory::class,
|
||||||
|
'package' => 'symfony/zulip-notifier',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,181 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Notifier\Tests\Exception;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Bridge\PhpUnit\ClassExistsMock;
|
||||||
|
use Symfony\Component\Notifier\Bridge\AllMySms\AllMySmsTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Clickatell\ClickatellTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Discord\DiscordTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\FakeChat\FakeChatTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\FakeSms\FakeSmsTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Gitter\GitterTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Iqsms\IqsmsTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\LightSms\LightSmsTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Mercure\MercureTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\MessageBird\MessageBirdTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\MicrosoftTeamsTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Mobyt\MobytTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Nexmo\NexmoTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Octopush\OctopushTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\OvhCloud\OvhCloudTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\RocketChat\RocketChatTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Sendinblue\SendinblueTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Sinch\SinchTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Slack\SlackTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Smsapi\SmsapiTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\SmsBiuras\SmsBiurasTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\SpotHit\SpotHitTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Telegram\TelegramTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Twilio\TwilioTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Bridge\Zulip\ZulipTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Exception\UnsupportedSchemeException;
|
||||||
|
use Symfony\Component\Notifier\Transport\Dsn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @runTestsInSeparateProcesses
|
||||||
|
*/
|
||||||
|
final class UnsupportedSchemeExceptionTest extends TestCase
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass(): void
|
||||||
|
{
|
||||||
|
ClassExistsMock::register(__CLASS__);
|
||||||
|
ClassExistsMock::withMockedClasses([
|
||||||
|
AllMySmsTransportFactory::class => false,
|
||||||
|
ClickatellTransportFactory::class => false,
|
||||||
|
DiscordTransportFactory::class => false,
|
||||||
|
EsendexTransportFactory::class => false,
|
||||||
|
FakeChatTransportFactory::class => false,
|
||||||
|
FakeSmsTransportFactory::class => false,
|
||||||
|
FirebaseTransportFactory::class => false,
|
||||||
|
FreeMobileTransportFactory::class => false,
|
||||||
|
GatewayApiTransportFactory::class => false,
|
||||||
|
GitterTransportFactory::class => false,
|
||||||
|
GoogleChatTransportFactory::class => false,
|
||||||
|
InfobipTransportFactory::class => false,
|
||||||
|
IqsmsTransportFactory::class => false,
|
||||||
|
LightSmsTransportFactory::class => false,
|
||||||
|
LinkedInTransportFactory::class => false,
|
||||||
|
MattermostTransportFactory::class => false,
|
||||||
|
MercureTransportFactory::class => false,
|
||||||
|
MessageBirdTransportFactory::class => false,
|
||||||
|
MicrosoftTeamsTransportFactory::class => false,
|
||||||
|
MobytTransportFactory::class => false,
|
||||||
|
NexmoTransportFactory::class => false,
|
||||||
|
OctopushTransportFactory::class => false,
|
||||||
|
OvhCloudTransportFactory::class => false,
|
||||||
|
RocketChatTransportFactory::class => false,
|
||||||
|
SendinblueTransportFactory::class => false,
|
||||||
|
SinchTransportFactory::class => false,
|
||||||
|
SlackTransportFactory::class => false,
|
||||||
|
SmsapiTransportFactory::class => false,
|
||||||
|
SmsBiurasTransportFactory::class => false,
|
||||||
|
SpotHitTransportFactory::class => false,
|
||||||
|
TelegramTransportFactory::class => false,
|
||||||
|
TwilioTransportFactory::class => false,
|
||||||
|
ZulipTransportFactory::class => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider messageWhereSchemeIsPartOfSchemeToPackageMapProvider
|
||||||
|
*/
|
||||||
|
public function testMessageWhereSchemeIsPartOfSchemeToPackageMap(string $scheme, string $package)
|
||||||
|
{
|
||||||
|
$dsn = new Dsn(sprintf('%s://localhost', $scheme));
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
sprintf('Unable to send notification via "%s" as the bridge is not installed; try running "composer require %s".', $scheme, $package),
|
||||||
|
(new UnsupportedSchemeException($dsn))->getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messageWhereSchemeIsPartOfSchemeToPackageMapProvider(): \Generator
|
||||||
|
{
|
||||||
|
yield ['allmysms', 'symfony/allmysms-notifier'];
|
||||||
|
yield ['clickatell', 'symfony/clickatell-notifier'];
|
||||||
|
yield ['discord', 'symfony/discord-notifier'];
|
||||||
|
yield ['esendex', 'symfony/esendex-notifier'];
|
||||||
|
yield ['fakechat', 'symfony/fake-chat-notifier'];
|
||||||
|
yield ['fakesms', 'symfony/fake-sms-notifier'];
|
||||||
|
yield ['firebase', 'symfony/firebase-notifier'];
|
||||||
|
yield ['freemobile', 'symfony/free-mobile-notifier'];
|
||||||
|
yield ['gatewayapi', 'symfony/gatewayapi-notifier'];
|
||||||
|
yield ['gitter', 'symfony/gitter-notifier'];
|
||||||
|
yield ['googlechat', 'symfony/google-chat-notifier'];
|
||||||
|
yield ['infobip', 'symfony/infobip-notifier'];
|
||||||
|
yield ['iqsms', 'symfony/iqsms-notifier'];
|
||||||
|
yield ['lightsms', 'symfony/light-sms-notifier'];
|
||||||
|
yield ['linkedin', 'symfony/linked-in-notifier'];
|
||||||
|
yield ['mattermost', 'symfony/mattermost-notifier'];
|
||||||
|
yield ['mercure', 'symfony/mercure-notifier'];
|
||||||
|
yield ['messagebird', 'symfony/message-bird-notifier'];
|
||||||
|
yield ['microsoftteams', 'symfony/microsoft-teams-notifier'];
|
||||||
|
yield ['mobyt', 'symfony/mobyt-notifier'];
|
||||||
|
yield ['nexmo', 'symfony/nexmo-notifier'];
|
||||||
|
yield ['octopush', 'symfony/octopush-notifier'];
|
||||||
|
yield ['ovhcloud', 'symfony/ovh-cloud-notifier'];
|
||||||
|
yield ['rocketchat', 'symfony/rocket-chat-notifier'];
|
||||||
|
yield ['sendinblue', 'symfony/sendinblue-notifier'];
|
||||||
|
yield ['sinch', 'symfony/sinch-notifier'];
|
||||||
|
yield ['slack', 'symfony/slack-notifier'];
|
||||||
|
yield ['smsapi', 'symfony/smsapi-notifier'];
|
||||||
|
yield ['smsbiuras', 'symfony/sms-biuras-notifier'];
|
||||||
|
yield ['spothit', 'symfony/spot-hit-notifier'];
|
||||||
|
yield ['telegram', 'symfony/telegram-notifier'];
|
||||||
|
yield ['twilio', 'symfony/twilio-notifier'];
|
||||||
|
yield ['zulip', 'symfony/zulip-notifier'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider
|
||||||
|
*/
|
||||||
|
public function testMessageWhereSchemeIsNotPartOfSchemeToPackageMap(string $expected, Dsn $dsn, ?string $name, array $supported)
|
||||||
|
{
|
||||||
|
$this->assertSame(
|
||||||
|
$expected,
|
||||||
|
(new UnsupportedSchemeException($dsn, $name, $supported))->getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider(): \Generator
|
||||||
|
{
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported.',
|
||||||
|
new Dsn('somethingElse://localhost'),
|
||||||
|
null,
|
||||||
|
[],
|
||||||
|
];
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported.',
|
||||||
|
new Dsn('somethingElse://localhost'),
|
||||||
|
'foo',
|
||||||
|
[],
|
||||||
|
];
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported; supported schemes for notifier "one" are: "one", "two".',
|
||||||
|
new Dsn('somethingElse://localhost'),
|
||||||
|
'one',
|
||||||
|
['one', 'two'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Translation\Tests\Exception;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Bridge\PhpUnit\ClassExistsMock;
|
||||||
|
use Symfony\Component\Translation\Bridge\Crowdin\CrowdinProviderFactory;
|
||||||
|
use Symfony\Component\Translation\Bridge\Loco\LocoProviderFactory;
|
||||||
|
use Symfony\Component\Translation\Bridge\Lokalise\LokaliseProviderFactory;
|
||||||
|
use Symfony\Component\Translation\Bridge\PoEditor\PoEditorProviderFactory;
|
||||||
|
use Symfony\Component\Translation\Exception\UnsupportedSchemeException;
|
||||||
|
use Symfony\Component\Translation\Provider\Dsn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @runTestsInSeparateProcesses
|
||||||
|
*/
|
||||||
|
final class UnsupportedSchemeExceptionTest extends TestCase
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass(): void
|
||||||
|
{
|
||||||
|
ClassExistsMock::register(__CLASS__);
|
||||||
|
ClassExistsMock::withMockedClasses([
|
||||||
|
CrowdinProviderFactory::class => false,
|
||||||
|
LocoProviderFactory::class => false,
|
||||||
|
LokaliseProviderFactory::class => false,
|
||||||
|
PoEditorProviderFactory::class => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider messageWhereSchemeIsPartOfSchemeToPackageMapProvider
|
||||||
|
*/
|
||||||
|
public function testMessageWhereSchemeIsPartOfSchemeToPackageMap(string $scheme, string $package)
|
||||||
|
{
|
||||||
|
$dsn = new Dsn(sprintf('%s://localhost', $scheme));
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
sprintf('Unable to synchronize translations via "%s" as the provider is not installed; try running "composer require %s".', $scheme, $package),
|
||||||
|
(new UnsupportedSchemeException($dsn))->getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messageWhereSchemeIsPartOfSchemeToPackageMapProvider(): \Generator
|
||||||
|
{
|
||||||
|
yield ['crowdin', 'symfony/crowdin-translation-provider'];
|
||||||
|
yield ['loco', 'symfony/loco-translation-provider'];
|
||||||
|
yield ['lokalise', 'symfony/lokalise-translation-provider'];
|
||||||
|
yield ['poeditor', 'symfony/po-editor-translation-provider'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider
|
||||||
|
*/
|
||||||
|
public function testMessageWhereSchemeIsNotPartOfSchemeToPackageMap(string $expected, Dsn $dsn, ?string $name, array $supported)
|
||||||
|
{
|
||||||
|
$this->assertSame(
|
||||||
|
$expected,
|
||||||
|
(new UnsupportedSchemeException($dsn, $name, $supported))->getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function messageWhereSchemeIsNotPartOfSchemeToPackageMapProvider(): \Generator
|
||||||
|
{
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported.',
|
||||||
|
new Dsn('somethingElse://localhost'),
|
||||||
|
null,
|
||||||
|
[],
|
||||||
|
];
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported.',
|
||||||
|
new Dsn('somethingElse://localhost'),
|
||||||
|
'foo',
|
||||||
|
[],
|
||||||
|
];
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'The "somethingElse" scheme is not supported; supported schemes for translation provider "one" are: "one", "two".',
|
||||||
|
new Dsn('somethingElse://localhost'),
|
||||||
|
'one',
|
||||||
|
['one', 'two'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user