Skip to content

Commit 05125b9

Browse files
author
Rico Kritz
committed
added tests for sending message objects and ensure mailer and mime assertions can handle Message objects as well
1 parent 91442ce commit 05125b9

4 files changed

Lines changed: 61 additions & 0 deletions

File tree

config/routes.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,8 @@
8888
$routes->add('send_email', '/send-email')
8989
->controller(App\Controller\SendEmailController::class)
9090
->methods(['GET']);
91+
92+
$routes->add('send_message', '/send-message')
93+
->controller(App\Controller\SendMessageController::class)
94+
->methods(['GET']);
9195
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Controller;
6+
7+
use App\Entity\User;
8+
use App\Utils\Mailer;
9+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
10+
use Symfony\Component\HttpFoundation\Response;
11+
12+
final class SendMessageController extends AbstractController
13+
{
14+
public function __construct(
15+
private readonly Mailer $mailer,
16+
) {
17+
}
18+
19+
public function __invoke(): Response
20+
{
21+
$this->mailer->sendMessage((new User())->setEmail('jane_doe@example.com'));
22+
23+
return $this->json(['message' => 'Message sent successfully']);
24+
}
25+
}

src/Utils/Mailer.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
99
use Symfony\Component\Mailer\MailerInterface;
1010
use Symfony\Component\Mime\Address;
11+
use Symfony\Component\Mime\Header\Headers;
12+
use Symfony\Component\Mime\Message;
13+
use Symfony\Component\Mime\Part\TextPart;
1114

1215
final readonly class Mailer
1316
{
@@ -30,4 +33,19 @@ public function sendConfirmationEmail(User $user): TemplatedEmail
3033

3134
return $email;
3235
}
36+
37+
public function sendMessage(User $user): Message
38+
{
39+
$message = new Message(
40+
(new Headers())
41+
->addMailboxListHeader('From', [new Address('jeison_doe@gmail.com', 'No Reply')])
42+
->addMailboxListHeader('To', [new Address($user->getEmail())])
43+
->addTextHeader('Subject', 'Text message'),
44+
new TextPart('Message body content'),
45+
);
46+
47+
$this->mailer->send($message);
48+
49+
return $message;
50+
}
3351
}

tests/Functional/IssuesCest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use App\Entity\User;
88
use App\Tests\Support\FunctionalTester;
99
use Doctrine\DBAL\Connection;
10+
use Symfony\Component\Mime\Message;
1011

1112
final class IssuesCest
1213
{
@@ -53,4 +54,17 @@ public function runSymfonyConsoleCommandIgnoresSpecificOptions(FunctionalTester
5354
$numRecords = $I->grabNumRecords(User::class);
5455
$I->assertSame(1, $numRecords);
5556
}
57+
58+
/**
59+
* @see https://github.com/Codeception/module-symfony/pull/232
60+
*/
61+
public function ensureMessageObjectsCanBeFetched(FunctionalTester $I)
62+
{
63+
$I->amOnPage('/send-message');
64+
$I->seeEmailIsSent(1);
65+
$I->assertEmailAddressContains('To', 'jane_doe@example.com');
66+
$I->assertEmailHeaderSame('To', 'jane_doe@example.com');
67+
$I->assertEmailHeaderSame('Subject', 'Text message');
68+
$I->assertInstanceOf(Message::class, $I->grabLastSentEmail());
69+
}
5670
}

0 commit comments

Comments
 (0)