Automatically execute body renderer when posting an email in Chill

+ adaptation of services which already uses body renderer
This commit is contained in:
Julien Fastré 2024-10-10 14:06:00 +02:00
parent 3d53e7da65
commit 1313b6f138
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
3 changed files with 15 additions and 6 deletions

View File

@ -12,9 +12,11 @@ declare(strict_types=1);
namespace Chill\MainBundle\Service\Mailer;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\Envelope;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\BodyRendererInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\RawMessage;
@ -22,7 +24,7 @@ class ChillMailer implements MailerInterface
{
private string $prefix = '[Chill] ';
public function __construct(private readonly MailerInterface $initial, private readonly LoggerInterface $chillLogger) {}
public function __construct(private readonly MailerInterface $initial, private readonly LoggerInterface $chillLogger, private readonly BodyRendererInterface $bodyRenderer) {}
public function send(RawMessage $message, ?Envelope $envelope = null): void
{
@ -30,6 +32,10 @@ class ChillMailer implements MailerInterface
$message->subject($this->prefix.$message->getSubject());
}
if ($message instanceof TemplatedEmail) {
$this->bodyRenderer->render($message);
}
$this->chillLogger->info('chill email sent', [
'to' => array_map(static fn (Address $address) => $address->getAddress(), $message->getTo()),
'subject' => $message->getSubject(),

View File

@ -14,6 +14,8 @@ namespace Chill\MainBundle\Tests\Workflow\Messenger;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository;
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
use Chill\MainBundle\Workflow\EntityWorkflowManager;
use Chill\MainBundle\Workflow\Messenger\PostSendExternalMessage;
use Chill\MainBundle\Workflow\Messenger\PostSendExternalMessageHandler;
use Chill\MainBundle\Workflow\WorkflowTransitionContextDTO;
@ -25,6 +27,7 @@ use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\BodyRendererInterface;
use Symfony\Component\Workflow\Registry;
/**
* @internal
@ -50,10 +53,12 @@ class PostSendExternalMessageHandlerTest extends TestCase
$mailer->send(Argument::that($this->buildCheckAddressCallback('3party@example.com')))->shouldBeCalledOnce();
$mailer->send(Argument::that($this->buildCheckAddressCallback('external@example.com')))->shouldBeCalledOnce();
$bodyRenderer = $this->prophesize(BodyRendererInterface::class);
$bodyRenderer->render(Argument::type(TemplatedEmail::class))->shouldBeCalledTimes(2);
$workflowHandler = $this->prophesize(EntityWorkflowHandlerInterface::class);
$workflowHandler->getEntityTitle($entityWorkflow, Argument::any())->willReturn('title');
$workflowManager = $this->prophesize(EntityWorkflowManager::class);
$workflowManager->getHandler($entityWorkflow)->willReturn($workflowHandler->reveal());
$handler = new PostSendExternalMessageHandler($repository->reveal(), $mailer->reveal(), $bodyRenderer->reveal());
$handler = new PostSendExternalMessageHandler($repository->reveal(), $mailer->reveal(), $workflowManager->reveal());
$handler(new PostSendExternalMessage(1, 'fr'));

View File

@ -25,7 +25,6 @@ final readonly class PostSendExternalMessageHandler implements MessageHandlerInt
public function __construct(
private EntityWorkflowRepository $entityWorkflowRepository,
private MailerInterface $mailer,
private BodyRendererInterface $bodyRenderer,
private EntityWorkflowManager $workflowManager,
) {}
@ -56,7 +55,6 @@ final readonly class PostSendExternalMessageHandler implements MessageHandlerInt
'lang' => $message->lang,
]);
$this->bodyRenderer->render($email);
$this->mailer->send($email);
}
}