Skip to content

Commit d2fb520

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

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

features/bootstrap/ProfilerContext.php

Lines changed: 10 additions & 1 deletion
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
*/
@@ -202,8 +208,11 @@ public function iShouldGetAnEmail(string $emailType, string $emailAddress = 'use
202208
/** @var MessageDataCollector $collector */
203209
$collector = $this->getProfile()->getCollector('mailer');
204210

211+
/** @var TemplatedEmailMessageEventSubscriber $templatedEmailMessageEventSubscriber */
212+
$templatedEmailMessageEventSubscriber = $this->driverContainer->get(TemplatedEmailMessageEventSubscriber::class);
213+
205214
/** @var TemplatedEmail[] $messages */
206-
$messages = $collector->getEvents()->getMessages();
215+
$messages = iterator_to_array($templatedEmailMessageEventSubscriber->getMessages());
207216

208217
// $events = $collector->getEvents()->getEvents();
209218
// /** @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)