Skip to content

Navigation Menu

Sign in
Appearance settings

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 cca2045

Browse filesBrowse files
Add FakeChat Logger transport
1 parent 5d92b21 commit cca2045
Copy full SHA for cca2045

File tree

9 files changed

+200
-7
lines changed
Filter options

9 files changed

+200
-7
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
@@ -2489,7 +2489,8 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $
24892489

24902490
if (ContainerBuilder::willBeAvailable('symfony/fake-chat-notifier', FakeChatTransportFactory::class, ['symfony/framework-bundle', 'symfony/notifier', 'symfony/mailer'])) {
24912491
$container->getDefinition($classToServices[FakeChatTransportFactory::class])
2492-
->replaceArgument('$mailer', new Reference('mailer'));
2492+
->replaceArgument('$mailer', new Reference('mailer'))
2493+
->replaceArgument('$logger', new Reference('logger'));
24932494
}
24942495

24952496
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
+10-2Lines changed: 10 additions & 2 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
/**
@@ -49,10 +53,14 @@ public function create(Dsn $dsn): TransportInterface
4953

5054
return (new FakeChatEmailTransport($this->mailer, $to, $from))->setHost($mailerTransport);
5155
}
56+
57+
if ('fakechat+logger' === $scheme) {
58+
return new FakeChatLoggerTransport($this->logger);
59+
}
5260
}
5361

5462
protected function getSupportedSchemes(): array
5563
{
56-
return ['fakechat+email'];
64+
return ['fakechat+email', 'fakechat+logger'];
5765
}
5866
}

‎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

+71Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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' => $recipient = '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+
$logMessage = $logs[0]['message'];
63+
$this->assertSame(sprintf('New Chat message for recipient: %s: %s', $recipient, $subject1), $logMessage);
64+
65+
$logLevel = $logs[0]['level'];
66+
$this->assertSame('info', $logLevel);
67+
68+
$logMessage = $logs[1]['message'];
69+
$this->assertSame(sprintf('New Chat message without specified recipient!: %s', $subject2), $logMessage);
70+
}
71+
}

‎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
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
class TestLogger extends AbstractLogger
17+
{
18+
public $logs = [];
19+
20+
public function log($level, $message, array $context = []): void
21+
{
22+
$this->logs[] = $message;
23+
}
24+
}

‎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.