/
FakeChatTransportFactoryTest.php
122 lines (105 loc) · 4.25 KB
/
FakeChatTransportFactoryTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?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\Bridge\FakeChat\Tests;
use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Notifier\Bridge\FakeChat\FakeChatTransportFactory;
use Symfony\Component\Notifier\Exception\LogicException;
use Symfony\Component\Notifier\Test\TransportFactoryTestCase;
use Symfony\Component\Notifier\Transport\Dsn;
final class FakeChatTransportFactoryTest extends TransportFactoryTestCase
{
/**
* @dataProvider missingRequiredDependencyProvider
*/
public function testMissingRequiredDependency(?MailerInterface $mailer, ?LoggerInterface $logger, string $dsn, string $message)
{
$this->expectException(LogicException::class);
$this->expectExceptionMessage($message);
$factory = new FakeChatTransportFactory($mailer, $logger);
$factory->create(new Dsn($dsn));
}
/**
* @dataProvider missingOptionalDependencyProvider
*/
public function testMissingOptionalDependency(?MailerInterface $mailer, ?LoggerInterface $logger, string $dsn)
{
$factory = new FakeChatTransportFactory($mailer, $logger);
$transport = $factory->create(new Dsn($dsn));
$this->assertSame($dsn, (string) $transport);
}
public function createFactory(): FakeChatTransportFactory
{
return new FakeChatTransportFactory($this->createMock(MailerInterface::class), $this->createMock(LoggerInterface::class));
}
public function createProvider(): iterable
{
yield [
'fakechat+email://default?to=recipient@email.net&from=sender@email.net',
'fakechat+email://default?to=recipient@email.net&from=sender@email.net',
];
yield [
'fakechat+email://mailchimp?to=recipient@email.net&from=sender@email.net',
'fakechat+email://mailchimp?to=recipient@email.net&from=sender@email.net',
];
yield [
'fakechat+logger://default',
'fakechat+logger://default',
];
}
public function missingRequiredOptionProvider(): iterable
{
yield 'missing option: from' => ['fakechat+email://default?to=recipient@email.net'];
yield 'missing option: to' => ['fakechat+email://default?from=sender@email.net'];
}
public function supportsProvider(): iterable
{
yield [true, 'fakechat+email://default?to=recipient@email.net&from=sender@email.net'];
yield [false, 'somethingElse://default?to=recipient@email.net&from=sender@email.net'];
}
public function incompleteDsnProvider(): iterable
{
yield 'missing from' => ['fakechat+email://default?to=recipient@email.net'];
yield 'missing to' => ['fakechat+email://default?from=recipient@email.net'];
}
public function unsupportedSchemeProvider(): iterable
{
yield ['somethingElse://default?to=recipient@email.net&from=sender@email.net'];
}
public function missingRequiredDependencyProvider(): iterable
{
$exceptionMessage = 'Cannot create a transport for scheme "%s" without providing an implementation of "%s".';
yield 'missing mailer' => [
null,
$this->createMock(LoggerInterface::class),
'fakechat+email://default?to=recipient@email.net&from=sender@email.net',
sprintf($exceptionMessage, 'fakechat+email', MailerInterface::class),
];
yield 'missing logger' => [
$this->createMock(MailerInterface::class),
null,
'fakechat+logger://default',
sprintf($exceptionMessage, 'fakechat+logger', LoggerInterface::class),
];
}
public function missingOptionalDependencyProvider(): iterable
{
yield 'missing logger' => [
$this->createMock(MailerInterface::class),
null,
'fakechat+email://default?to=recipient@email.net&from=sender@email.net',
];
yield 'missing mailer' => [
null,
$this->createMock(LoggerInterface::class),
'fakechat+logger://default',
];
}
}