‪TYPO3CMS  ‪main
MailerTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\Test;
21 use Psr\EventDispatcher\EventDispatcherInterface;
22 use Symfony\Component\DependencyInjection\Container;
23 use Symfony\Component\Mailer\Envelope;
24 use Symfony\Component\Mailer\Transport\NullTransport;
25 use Symfony\Component\Mime\Address;
26 use Symfony\Component\Mime\RawMessage;
32 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
33 
34 final class ‪MailerTest extends FunctionalTestCase
35 {
36  #[Test]
37  public function ‪mailerEventsAreTriggered(): void
38  {
39  $afterMailerInitializedEvent = null;
40  $beforeMailerSentMessageEvent = null;
41  $afterMailerSentMessageEvent = null;
42 
44  $container = $this->get('service_container');
45  $container->set(
46  'after-mailer-initialized-listener',
47  static function (‪AfterMailerInitializationEvent $event) use (&$afterMailerInitializedEvent) {
48  $afterMailerInitializedEvent = $event;
49  }
50  );
51  $container->set(
52  'before-mailer-sent-message-listener',
53  static function (‪BeforeMailerSentMessageEvent $event) use (&$beforeMailerSentMessageEvent) {
54  $beforeMailerSentMessageEvent = $event;
55  }
56  );
57  $container->set(
58  'after-mailer-sent-message-listener',
59  static function (‪AfterMailerSentMessageEvent $event) use (&$afterMailerSentMessageEvent) {
60  $afterMailerSentMessageEvent = $event;
61  }
62  );
63 
64  $eventListener = $container->get(ListenerProvider::class);
65  $eventListener->addListener(AfterMailerInitializationEvent::class, 'after-mailer-initialized-listener');
66  $eventListener->addListener(BeforeMailerSentMessageEvent::class, 'before-mailer-sent-message-listener');
67  $eventListener->addListener(AfterMailerSentMessageEvent::class, 'after-mailer-sent-message-listener');
68 
69  $message = new RawMessage('some message');
70  $envelope = new Envelope(new Address('kasperYYYY@typo3.org'), [new Address('acme@example.com')]);
71  $mailer = (new ‪Mailer(new NullTransport(), $container->get(EventDispatcherInterface::class)));
72 
73  $mailer->send($message, $envelope);
74 
75  self::assertInstanceOf(AfterMailerInitializationEvent::class, $afterMailerInitializedEvent);
76  self::assertEquals($mailer, $afterMailerInitializedEvent->getMailer());
77 
78  self::assertInstanceOf(BeforeMailerSentMessageEvent::class, $beforeMailerSentMessageEvent);
79  self::assertEquals($message, $beforeMailerSentMessageEvent->getMessage());
80  self::assertEquals($envelope, $beforeMailerSentMessageEvent->getEnvelope());
81  self::assertEquals($mailer, $beforeMailerSentMessageEvent->getMailer());
82 
83  self::assertInstanceOf(AfterMailerSentMessageEvent::class, $afterMailerSentMessageEvent);
84  self::assertEquals($mailer, $afterMailerSentMessageEvent->getMailer());
85  }
86 }
‪TYPO3\CMS\Core\Mail\Event\AfterMailerInitializationEvent
Definition: AfterMailerInitializationEvent.php:27
‪TYPO3\CMS\Core\Mail\Event\AfterMailerSentMessageEvent
Definition: AfterMailerSentMessageEvent.php:31
‪TYPO3\CMS\Core\Tests\Functional\Mail
Definition: FluidEmailTest.php:18
‪TYPO3\CMS\Core\Mail\Mailer
Definition: Mailer.php:39
‪TYPO3\CMS\Core\Tests\Functional\Mail\MailerTest
Definition: MailerTest.php:35
‪TYPO3\CMS\Core\Mail\Event\BeforeMailerSentMessageEvent
Definition: BeforeMailerSentMessageEvent.php:32
‪TYPO3\CMS\Core\EventDispatcher\ListenerProvider
Definition: ListenerProvider.php:30
‪TYPO3\CMS\Core\Tests\Functional\Mail\MailerTest\mailerEventsAreTriggered
‪mailerEventsAreTriggered()
Definition: MailerTest.php:37