FestinHegre/vendor/symfony/notifier/Test/TransportTestCase.php
2024-09-26 17:26:04 +02:00

118 lines
3.6 KiB
PHP

<?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\Test;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Notifier\Exception\UnsupportedMessageTypeException;
use Symfony\Component\Notifier\Message\MessageInterface;
use Symfony\Component\Notifier\Transport\TransportInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
/**
* A test case to ease testing a Notifier transport.
*
* @author Oskar Stark <oskarstark@googlemail.com>
*/
abstract class TransportTestCase extends TestCase
{
protected const CUSTOM_HOST = 'host.test';
protected const CUSTOM_PORT = 42;
abstract public static function createTransport(?HttpClientInterface $client = null): TransportInterface;
/**
* @return iterable<array{0: string, 1: TransportInterface}>
*/
abstract public static function toStringProvider(): iterable;
/**
* @return iterable<array{0: MessageInterface, 1: TransportInterface}>
*/
abstract public static function supportedMessagesProvider(): iterable;
/**
* @return iterable<array{0: MessageInterface, 1: TransportInterface}>
*/
abstract public static function unsupportedMessagesProvider(): iterable;
/**
* @dataProvider toStringProvider
*/
public function testToString(string $expected, TransportInterface $transport)
{
$this->assertSame($expected, (string) $transport);
}
/**
* @dataProvider supportedMessagesProvider
*/
public function testSupportedMessages(MessageInterface $message, ?TransportInterface $transport = null)
{
$transport ??= $this->createTransport();
$this->assertTrue($transport->supports($message));
}
/**
* @dataProvider unsupportedMessagesProvider
*/
public function testUnsupportedMessages(MessageInterface $message, ?TransportInterface $transport = null)
{
$transport ??= $this->createTransport();
$this->assertFalse($transport->supports($message));
}
/**
* @dataProvider unsupportedMessagesProvider
*/
public function testUnsupportedMessagesTrowUnsupportedMessageTypeExceptionWhenSend(MessageInterface $message, ?TransportInterface $transport = null)
{
$transport ??= $this->createTransport();
$this->expectException(UnsupportedMessageTypeException::class);
$transport->send($message);
}
public function testCanSetCustomHost()
{
$transport = $this->createTransport();
$transport->setHost($customHost = self::CUSTOM_HOST);
$this->assertMatchesRegularExpression(sprintf('/^.*\:\/\/(%s|.*\@%s)/', $customHost, $customHost), (string) $transport);
}
public function testCanSetCustomPort()
{
$transport = $this->createTransport();
$transport->setPort($customPort = self::CUSTOM_PORT);
/*
* @see https://regex101.com/r/shT9O2/1
*/
$this->assertMatchesRegularExpression(sprintf('/^.*\:\/\/.*(\@.*)?\:%s((\?.*|\/.*))?$/', $customPort), (string) $transport);
}
public function testCanSetCustomHostAndPort()
{
$transport = $this->createTransport();
$transport->setHost($customHost = self::CUSTOM_HOST);
$transport->setPort($customPort = self::CUSTOM_PORT);
$this->assertMatchesRegularExpression(sprintf('/^.*\:\/\/(%s|.*\@%s)\:%s/', $customHost, $customHost, $customPort), (string) $transport);
}
}