Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ca924a9

Browse filesBrowse files
Add FakeChat Logger transport
1 parent ff54513 commit ca924a9
Copy full SHA for ca924a9

File tree

9 files changed

+208
-13
lines changed
Filter options

9 files changed

+208
-13
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2497,7 +2497,8 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $
24972497

24982498
if (ContainerBuilder::willBeAvailable('symfony/fake-chat-notifier', FakeChatTransportFactory::class, ['symfony/framework-bundle', 'symfony/notifier', 'symfony/mailer'])) {
24992499
$container->getDefinition($classToServices[FakeChatTransportFactory::class])
2500-
->replaceArgument('$mailer', new Reference('mailer'));
2500+
->replaceArgument('$mailer', new Reference('mailer'))
2501+
->replaceArgument('$logger', new Reference('logger'));
25012502
}
25022503

25032504
if (ContainerBuilder::willBeAvailable('symfony/fake-sms-notifier', FakeSmsTransportFactory::class, ['symfony/framework-bundle', 'symfony/notifier', 'symfony/mailer'])) {

‎src/Symfony/Component/Notifier/Bridge/FakeChat/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Notifier/Bridge/FakeChat/CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
5.4
5+
---
6+
7+
* Add the ``FakeChatLoggerTransport``
8+
49
5.3
510
---
611

+67Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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\Notifier\Bridge\FakeChat;
13+
14+
use Psr\Log\LoggerInterface;
15+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
16+
use Symfony\Component\Notifier\Exception\UnsupportedMessageTypeException;
17+
use Symfony\Component\Notifier\Message\ChatMessage;
18+
use Symfony\Component\Notifier\Message\MessageInterface;
19+
use Symfony\Component\Notifier\Message\SentMessage;
20+
use Symfony\Component\Notifier\Transport\AbstractTransport;
21+
use Symfony\Contracts\HttpClient\HttpClientInterface;
22+
23+
/**
24+
* @author Antoine Makdessi <amakdessi@me.com>
25+
*/
26+
final class FakeChatLoggerTransport extends AbstractTransport
27+
{
28+
protected const HOST = 'default';
29+
30+
private $logger;
31+
32+
public function __construct(LoggerInterface $logger, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null)
33+
{
34+
$this->logger = $logger;
35+
36+
parent::__construct($client, $dispatcher);
37+
}
38+
39+
public function __toString(): string
40+
{
41+
return sprintf('fakechat+logger://%s', $this->getEndpoint());
42+
}
43+
44+
public function supports(MessageInterface $message): bool
45+
{
46+
return $message instanceof ChatMessage;
47+
}
48+
49+
/**
50+
* @param MessageInterface|ChatMessage $message
51+
*/
52+
protected function doSend(MessageInterface $message): SentMessage
53+
{
54+
if (!$this->supports($message)) {
55+
throw new UnsupportedMessageTypeException(__CLASS__, ChatMessage::class, $message);
56+
}
57+
58+
$subject = 'New Chat message without specified recipient!';
59+
if (null !== $message->getRecipientId()) {
60+
$subject = sprintf('New Chat message for recipient: %s', $message->getRecipientId());
61+
}
62+
63+
$this->logger->info(sprintf('%s: %s', $subject, $message->getSubject()));
64+
65+
return new SentMessage($message, (string) $this);
66+
}
67+
}

‎src/Symfony/Component/Notifier/Bridge/FakeChat/FakeChatTransportFactory.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Notifier/Bridge/FakeChat/FakeChatTransportFactory.php
+16-8Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Notifier\Bridge\FakeChat;
1313

14+
use Psr\Log\LoggerInterface;
1415
use Symfony\Component\Mailer\MailerInterface;
1516
use Symfony\Component\Notifier\Exception\UnsupportedSchemeException;
1617
use Symfony\Component\Notifier\Transport\AbstractTransportFactory;
@@ -19,16 +20,19 @@
1920

2021
/**
2122
* @author Oskar Stark <oskarstark@googlemail.com>
23+
* @author Antoine Makdessi <amakdessi@me.com>
2224
*/
2325
final class FakeChatTransportFactory extends AbstractTransportFactory
2426
{
2527
protected $mailer;
28+
protected $logger;
2629

27-
public function __construct(MailerInterface $mailer)
30+
public function __construct(MailerInterface $mailer, LoggerInterface $logger)
2831
{
2932
parent::__construct();
3033

3134
$this->mailer = $mailer;
35+
$this->logger = $logger;
3236
}
3337

3438
/**
@@ -38,19 +42,23 @@ public function create(Dsn $dsn): TransportInterface
3842
{
3943
$scheme = $dsn->getScheme();
4044

41-
if ('fakechat+email' !== $scheme) {
42-
throw new UnsupportedSchemeException($dsn, 'fakechat', $this->getSupportedSchemes());
45+
if ('fakechat+email' === $scheme) {
46+
$mailerTransport = $dsn->getHost();
47+
$to = $dsn->getRequiredOption('to');
48+
$from = $dsn->getRequiredOption('from');
49+
50+
return (new FakeChatEmailTransport($this->mailer, $to, $from))->setHost($mailerTransport);
4351
}
4452

45-
$mailerTransport = $dsn->getHost();
46-
$to = $dsn->getRequiredOption('to');
47-
$from = $dsn->getRequiredOption('from');
53+
if ('fakechat+logger' === $scheme) {
54+
return new FakeChatLoggerTransport($this->logger);
55+
}
4856

49-
return (new FakeChatEmailTransport($this->mailer, $to, $from))->setHost($mailerTransport);
57+
throw new UnsupportedSchemeException($dsn, 'fakechat', $this->getSupportedSchemes());
5058
}
5159

5260
protected function getSupportedSchemes(): array
5361
{
54-
return ['fakechat+email'];
62+
return ['fakechat+email', 'fakechat+logger'];
5563
}
5664
}

‎src/Symfony/Component/Notifier/Bridge/FakeChat/README.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Notifier/Bridge/FakeChat/README.md
+8-2Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
Fake Chat Notifier
22
==================
33

4-
Provides Fake Chat (as email during development) integration for Symfony Notifier.
4+
Provides Fake Chat (as email or log during development) integration for Symfony Notifier.
55

6-
#### DSN example
6+
#### DSN example for email
77

88
```
99
FAKE_CHAT_DSN=fakechat+email://default?to=TO&from=FROM
@@ -18,6 +18,12 @@ To use a custom mailer transport:
1818
FAKE_CHAT_DSN=fakechat+email://mailchimp?to=TO&from=FROM
1919
```
2020

21+
#### DSN example for logger
22+
23+
```
24+
FAKE_CHAT_DSN=fakechat+logger://default
25+
```
26+
2127
Resources
2228
---------
2329

+69Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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\Notifier\Bridge\FakeChat\Tests;
13+
14+
use Psr\Log\LoggerInterface;
15+
use Symfony\Component\Notifier\Bridge\FakeChat\FakeChatLoggerTransport;
16+
use Symfony\Component\Notifier\Message\ChatMessage;
17+
use Symfony\Component\Notifier\Message\MessageInterface;
18+
use Symfony\Component\Notifier\Message\SmsMessage;
19+
use Symfony\Component\Notifier\Test\TransportTestCase;
20+
use Symfony\Component\Notifier\Tests\Fixtures\TestOptions;
21+
use Symfony\Component\Notifier\Transport\TransportInterface;
22+
use Symfony\Contracts\HttpClient\HttpClientInterface;
23+
24+
final class FakeChatLoggerTransportTest extends TransportTestCase
25+
{
26+
public function createTransport(HttpClientInterface $client = null, LoggerInterface $logger = null): TransportInterface
27+
{
28+
return new FakeChatLoggerTransport($logger ?? $this->createMock(LoggerInterface::class), $client ?? $this->createMock(HttpClientInterface::class));
29+
}
30+
31+
public function toStringProvider(): iterable
32+
{
33+
yield ['fakechat+logger://default', $this->createTransport()];
34+
}
35+
36+
public function supportedMessagesProvider(): iterable
37+
{
38+
yield [new ChatMessage('Hello!')];
39+
}
40+
41+
public function unsupportedMessagesProvider(): iterable
42+
{
43+
yield [new SmsMessage('0611223344', 'Hello!')];
44+
yield [$this->createMock(MessageInterface::class)];
45+
}
46+
47+
public function testSendWithDefaultTransport()
48+
{
49+
$message1 = new ChatMessage($subject1 = 'Hello subject1!', new TestOptions(['recipient_id' => $recipient1 = 'Oskar']));
50+
$message2 = new ChatMessage($subject2 = 'Hello subject2!');
51+
52+
$logger = new TestLogger();
53+
54+
$transport = $this->createTransport(null, $logger);
55+
56+
$transport->send($message1);
57+
$transport->send($message2);
58+
59+
$logs = $logger->logs;
60+
$this->assertNotEmpty($logs);
61+
62+
$log1 = $logs[0];
63+
$this->assertSame(sprintf('New Chat message for recipient: %s: %s', $recipient1, $subject1), $log1['message']);
64+
$this->assertSame('info', $log1['level']);
65+
66+
$log2 = $logs[1];
67+
$this->assertSame(sprintf('New Chat message without specified recipient!: %s', $subject2), $log2['message']);
68+
}
69+
}

‎src/Symfony/Component/Notifier/Bridge/FakeChat/Tests/FakeChatTransportFactoryTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Notifier/Bridge/FakeChat/Tests/FakeChatTransportFactoryTest.php
+7-1Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Notifier\Bridge\FakeChat\Tests;
1313

14+
use Psr\Log\LoggerInterface;
1415
use Symfony\Component\Mailer\MailerInterface;
1516
use Symfony\Component\Notifier\Bridge\FakeChat\FakeChatTransportFactory;
1617
use Symfony\Component\Notifier\Test\TransportFactoryTestCase;
@@ -23,7 +24,7 @@ final class FakeChatTransportFactoryTest extends TransportFactoryTestCase
2324
*/
2425
public function createFactory(): TransportFactoryInterface
2526
{
26-
return new FakeChatTransportFactory($this->createMock(MailerInterface::class));
27+
return new FakeChatTransportFactory($this->createMock(MailerInterface::class), $this->createMock(LoggerInterface::class));
2728
}
2829

2930
public function createProvider(): iterable
@@ -37,6 +38,11 @@ public function createProvider(): iterable
3738
'fakechat+email://mailchimp?to=recipient@email.net&from=sender@email.net',
3839
'fakechat+email://mailchimp?to=recipient@email.net&from=sender@email.net',
3940
];
41+
42+
yield [
43+
'fakechat+logger://default',
44+
'fakechat+logger://default',
45+
];
4046
}
4147

4248
public function missingRequiredOptionProvider(): iterable
+28Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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\Notifier\Bridge\FakeChat\Tests;
13+
14+
use Psr\Log\AbstractLogger;
15+
16+
final class TestLogger extends AbstractLogger
17+
{
18+
public $logs = [];
19+
20+
public function log($level, $message, array $context = []): void
21+
{
22+
$this->logs[] = [
23+
'level' => $level,
24+
'message' => $message,
25+
'context' => $context,
26+
];
27+
}
28+
}

‎src/Symfony/Component/Notifier/Bridge/FakeChat/composer.json

Copy file name to clipboardExpand all lines: src/Symfony/Component/Notifier/Bridge/FakeChat/composer.json
+6-1Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "symfony/fake-chat-notifier",
33
"type": "symfony-bridge",
4-
"description": "Fake Chat (as email during development) Notifier Bridge.",
4+
"description": "Fake Chat (as email or log during development) Notifier Bridge.",
55
"keywords": ["chat", "development", "email", "notifier", "symfony"],
66
"homepage": "https://symfony.com",
77
"license": "MIT",
@@ -10,6 +10,11 @@
1010
"name": "Oskar Stark",
1111
"homepage": "https://github.com/OskarStark"
1212
},
13+
{
14+
"name": "Antoine Makdessi",
15+
"email": "amakdessi@me.com",
16+
"homepage": "http://antoine.makdessi.free.fr"
17+
},
1318
{
1419
"name": "Symfony Community",
1520
"homepage": "https://symfony.com/contributors"

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.