diff --git a/src/Codeception/Module/Symfony/MailerAssertionsTrait.php b/src/Codeception/Module/Symfony/MailerAssertionsTrait.php index 0c50cff1..57f0e562 100644 --- a/src/Codeception/Module/Symfony/MailerAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/MailerAssertionsTrait.php @@ -7,6 +7,7 @@ use Symfony\Component\Mailer\Event\MessageEvents; use Symfony\Component\Mailer\EventListener\MessageLoggerListener; use Symfony\Component\Mailer\Test\Constraint as MailerConstraint; +use Symfony\Component\Mime\Email; trait MailerAssertionsTrait { @@ -36,6 +37,45 @@ public function seeEmailIsSent(int $expectedCount = 1): void $this->assertThat($this->getMessageMailerEvents(), new MailerConstraint\EmailCount($expectedCount)); } + /** + * Returns the last sent email. + * + * ```php + * grabLastSentEmail(); + * $address = $email->getTo()[0]; + * $I->assertSame('john_doe@user.com', $address->getAddress()); + * ``` + * + * @return \Symfony\Component\Mime\Email|null + */ + public function grabLastSentEmail(): ?Email + { + $emails = $this->getMessageMailerEvents()->getMessages(); + /** @var Email|false $lastEmail */ + if ($lastEmail = end($emails)) { + return $lastEmail; + } + return null; + } + + /** + * Returns an array of all sent emails. + * + * ```php + * grabSentEmails(); + * $address = $emails[0]->getTo()[0]; + * $I->assertSame('john_doe@user.com', $address->getAddress()); + * ``` + * + * @return \Symfony\Component\Mime\Email[] + */ + public function grabSentEmails(): array + { + return $this->getMessageMailerEvents()->getMessages(); + } + protected function getMessageMailerEvents(): MessageEvents { if ($messageLogger = $this->getService('mailer.message_logger_listener')) {