Skip to content

Commit fe2f17b

Browse files
committed
Add email event listener for tests to check context
1 parent a6fe268 commit fe2f17b

File tree

3 files changed

+75
-3
lines changed

3 files changed

+75
-3
lines changed

features/bootstrap/ProfilerContext.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
use Silverback\ApiComponentsBundle\Factory\User\Mailer\VerifyEmailFactory;
2727
use Silverback\ApiComponentsBundle\Factory\User\Mailer\WelcomeEmailFactory;
2828
use Silverback\ApiComponentsBundle\Tests\Functional\TestBundle\Entity\User;
29+
use Silverback\ApiComponentsBundle\Tests\Functional\TestBundle\EventSubscriber\TemplatedEmailMessageEventSubscriber;
2930
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
3031
use Symfony\Bundle\MercureBundle\DataCollector\MercureDataCollector;
3132
use Symfony\Component\BrowserKit\AbstractBrowser;
33+
use Symfony\Component\DependencyInjection\ContainerInterface;
3234
use Symfony\Component\HttpClient\DataCollector\HttpClientDataCollector;
3335
use Symfony\Component\HttpKernel\Profiler\Profile as HttpProfile;
3436
use Symfony\Component\Mailer\DataCollector\MessageDataCollector;
@@ -46,6 +48,10 @@ class ProfilerContext implements Context
4648
private ?MinkContext $minkContext;
4749
private ?JsonContext $jsonContext;
4850

51+
public function __construct(private readonly ContainerInterface $driverContainer)
52+
{
53+
}
54+
4955
/**
5056
* @BeforeScenario
5157
*/
@@ -199,11 +205,11 @@ public function iShouldNotReceiveAnyEmails()
199205
*/
200206
public function iShouldGetAnEmail(string $emailType, string $emailAddress = '[email protected]')
201207
{
202-
/** @var MessageDataCollector $collector */
203-
$collector = $this->getProfile()->getCollector('mailer');
208+
/** @var TemplatedEmailMessageEventSubscriber $templatedEmailMessageEventSubscriber */
209+
$templatedEmailMessageEventSubscriber = $this->driverContainer->get(TemplatedEmailMessageEventSubscriber::class);
204210

205211
/** @var TemplatedEmail[] $messages */
206-
$messages = $collector->getEvents()->getMessages();
212+
$messages = iterator_to_array($templatedEmailMessageEventSubscriber->getMessages());
207213

208214
// $events = $collector->getEvents()->getEvents();
209215
// /** @var TemplatedEmail[] $messages */
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Silverback API Components Bundle Project
5+
*
6+
* (c) Daniel West <[email protected]>
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+
declare(strict_types=1);
13+
14+
namespace Silverback\ApiComponentsBundle\Tests\Functional\TestBundle\EventSubscriber;
15+
16+
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
17+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
18+
use Symfony\Component\Mailer\Event\MessageEvent;
19+
20+
class TemplatedEmailMessageEventSubscriber implements EventSubscriberInterface
21+
{
22+
private array $messageEvents = [];
23+
24+
public static function getSubscribedEvents(): array
25+
{
26+
return [
27+
MessageEvent::class => [
28+
'addMessageEvent', 10,
29+
],
30+
];
31+
}
32+
33+
public function addMessageEvent(MessageEvent $messageEvent): void
34+
{
35+
$message = $messageEvent->getMessage();
36+
if (!$message instanceof TemplatedEmail) {
37+
return;
38+
}
39+
$this->messageEvents[] = [$messageEvent, $message->getContext()];
40+
}
41+
42+
/**
43+
* @return MessageEvent[]
44+
*/
45+
public function getMessageEvents(): array
46+
{
47+
return array_map(static function (array $eventAndContext) {
48+
$event = $eventAndContext[0];
49+
$clonedMessage = clone $event->getMessage();
50+
$clonedMessage->context($eventAndContext[1]);
51+
$event->setMessage($clonedMessage);
52+
53+
return $event;
54+
}, $this->messageEvents);
55+
}
56+
57+
public function getMessages(): iterable
58+
{
59+
foreach ($this->getMessageEvents() as $messageEvent) {
60+
yield $messageEvent->getMessage();
61+
}
62+
}
63+
}

tests/Functional/app/config/services_test.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,6 @@ services:
3535

3636
# Test service to provide responses to the mock http client
3737
Silverback\ApiComponentsBundle\Tests\Functional\MockClientCallback: ~
38+
Silverback\ApiComponentsBundle\Tests\Functional\TestBundle\EventSubscriber\TemplatedEmailMessageEventSubscriber:
39+
tags:
40+
- { name: kernel.event_subscriber }

0 commit comments

Comments
 (0)