Skip to content

Commit 3e43a76

Browse files
authored
Added assertions for Symfony Mime component (Codeception#139)
1 parent cfb8c6c commit 3e43a76

File tree

2 files changed

+179
-0
lines changed

2 files changed

+179
-0
lines changed

src/Codeception/Module/Symfony.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Codeception\Module\Symfony\EventsAssertionsTrait;
1717
use Codeception\Module\Symfony\FormAssertionsTrait;
1818
use Codeception\Module\Symfony\MailerAssertionsTrait;
19+
use Codeception\Module\Symfony\MimeAssertionsTrait;
1920
use Codeception\Module\Symfony\ParameterAssertionsTrait;
2021
use Codeception\Module\Symfony\RouterAssertionsTrait;
2122
use Codeception\Module\Symfony\SecurityAssertionsTrait;
@@ -134,6 +135,7 @@ class Symfony extends Framework implements DoctrineProvider, PartedModule
134135
use EventsAssertionsTrait;
135136
use FormAssertionsTrait;
136137
use MailerAssertionsTrait;
138+
use MimeAssertionsTrait;
137139
use ParameterAssertionsTrait;
138140
use RouterAssertionsTrait;
139141
use SecurityAssertionsTrait;
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Codeception\Module\Symfony;
6+
7+
use PHPUnit\Framework\Constraint\LogicalNot;
8+
use Symfony\Component\Mime\Email;
9+
use Symfony\Component\Mime\Test\Constraint as MimeConstraint;
10+
11+
trait MimeAssertionsTrait
12+
{
13+
/**
14+
* Verify that an email contains addresses with a [header](https://datatracker.ietf.org/doc/html/rfc4021)
15+
* `$headerName` and its expected value `$expectedValue`.
16+
* If the Email object is not specified, the last email sent is used instead.
17+
*
18+
* ```php
19+
* <?php
20+
* $I->assertEmailAddressContains('To', 'jane_doe@example.com');
21+
* ```
22+
*/
23+
public function assertEmailAddressContains(string $headerName, string $expectedValue, Email $email = null): void
24+
{
25+
$email = $this->verifyEmailObject($email, __FUNCTION__);
26+
$this->assertThat($email, new MimeConstraint\EmailAddressContains($headerName, $expectedValue));
27+
}
28+
29+
/**
30+
* Verify that an email has sent the specified number `$count` of attachments.
31+
* If the Email object is not specified, the last email sent is used instead.
32+
*
33+
* ```php
34+
* <?php
35+
* $I->assertEmailAttachmentCount(1);
36+
* ```
37+
*/
38+
public function assertEmailAttachmentCount(int $count, Email $email = null): void
39+
{
40+
$email = $this->verifyEmailObject($email, __FUNCTION__);
41+
$this->assertThat($email, new MimeConstraint\EmailAttachmentCount($count));
42+
}
43+
44+
/**
45+
* Verify that an email has a [header](https://datatracker.ietf.org/doc/html/rfc4021) `$headerName`.
46+
* If the Email object is not specified, the last email sent is used instead.
47+
*
48+
* ```php
49+
* <?php
50+
* $I->assertEmailHasHeader('Bcc');
51+
* ```
52+
*/
53+
public function assertEmailHasHeader(string $headerName, Email $email = null): void
54+
{
55+
$email = $this->verifyEmailObject($email, __FUNCTION__);
56+
$this->assertThat($email, new MimeConstraint\EmailHasHeader($headerName));
57+
}
58+
59+
/**
60+
* Verify that the [header](https://datatracker.ietf.org/doc/html/rfc4021)
61+
* `$headerName` of an email is not the expected one `$expectedValue`.
62+
* If the Email object is not specified, the last email sent is used instead.
63+
*
64+
* ```php
65+
* <?php
66+
* $I->assertEmailHeaderNotSame('To', 'john_doe@gmail.com');
67+
* ```
68+
*/
69+
public function assertEmailHeaderNotSame(string $headerName, string $expectedValue, Email $email = null): void
70+
{
71+
$email = $this->verifyEmailObject($email, __FUNCTION__);
72+
$this->assertThat($email, new LogicalNot(new MimeConstraint\EmailHeaderSame($headerName, $expectedValue)));
73+
}
74+
75+
/**
76+
* Verify that the [header](https://datatracker.ietf.org/doc/html/rfc4021)
77+
* `$headerName` of an email is the same as expected `$expectedValue`.
78+
* If the Email object is not specified, the last email sent is used instead.
79+
*
80+
* ```php
81+
* <?php
82+
* $I->assertEmailHeaderSame('To', 'jane_doe@gmail.com');
83+
* ```
84+
*/
85+
public function assertEmailHeaderSame(string $headerName, string $expectedValue, Email $email = null): void
86+
{
87+
$email = $this->verifyEmailObject($email, __FUNCTION__);
88+
$this->assertThat($email, new MimeConstraint\EmailHeaderSame($headerName, $expectedValue));
89+
}
90+
91+
/**
92+
* Verify that the HTML body of an email contains `$text`.
93+
* If the Email object is not specified, the last email sent is used instead.
94+
*
95+
* ```php
96+
* <?php
97+
* $I->assertEmailHtmlBodyContains('Successful registration');
98+
* ```
99+
*/
100+
public function assertEmailHtmlBodyContains(string $text, Email $email = null): void
101+
{
102+
$email = $this->verifyEmailObject($email, __FUNCTION__);
103+
$this->assertThat($email, new MimeConstraint\EmailHtmlBodyContains($text));
104+
}
105+
106+
/**
107+
* Verify that the HTML body of an email does not contain a text `$text`.
108+
* If the Email object is not specified, the last email sent is used instead.
109+
*
110+
* ```php
111+
* <?php
112+
* $I->assertEmailHtmlBodyNotContains('userpassword');
113+
* ```
114+
*/
115+
public function assertEmailHtmlBodyNotContains(string $text, Email $email = null): void
116+
{
117+
$email = $this->verifyEmailObject($email, __FUNCTION__);
118+
$this->assertThat($email, new LogicalNot(new MimeConstraint\EmailHtmlBodyContains($text)));
119+
}
120+
121+
/**
122+
* Verify that an email does not have a [header](https://datatracker.ietf.org/doc/html/rfc4021) `$headerName`.
123+
* If the Email object is not specified, the last email sent is used instead.
124+
*
125+
* ```php
126+
* <?php
127+
* $I->assertEmailNotHasHeader('Bcc');
128+
* ```
129+
*/
130+
public function assertEmailNotHasHeader(string $headerName, Email $email = null): void
131+
{
132+
$email = $this->verifyEmailObject($email, __FUNCTION__);
133+
$this->assertThat($email, new LogicalNot(new MimeConstraint\EmailHasHeader($headerName)));
134+
}
135+
136+
/**
137+
* Verify the text body of an email contains a `$text`.
138+
* If the Email object is not specified, the last email sent is used instead.
139+
*
140+
* ```php
141+
* <?php
142+
* $I->assertEmailTextBodyContains('Example text body');
143+
* ```
144+
*/
145+
public function assertEmailTextBodyContains(string $text, Email $email = null): void
146+
{
147+
$email = $this->verifyEmailObject($email, __FUNCTION__);
148+
$this->assertThat($email, new MimeConstraint\EmailTextBodyContains($text));
149+
}
150+
151+
/**
152+
* Verify that the text body of an email does not contain a `$text`.
153+
* If the Email object is not specified, the last email sent is used instead.
154+
*
155+
* ```php
156+
* <?php
157+
* $I->assertEmailTextBodyNotContains('My secret text body');
158+
* ```
159+
*/
160+
public function assertEmailTextBodyNotContains(string $text, Email $email = null): void
161+
{
162+
$email = $this->verifyEmailObject($email, __FUNCTION__);
163+
$this->assertThat($email, new LogicalNot(new MimeConstraint\EmailTextBodyContains($text)));
164+
}
165+
166+
/**
167+
* Returns the last email sent if $email is null. If no email has been sent it fails.
168+
*/
169+
private function verifyEmailObject(?Email $email, string $function): Email
170+
{
171+
$email = $email ?: $this->grabLastSentEmail();
172+
$errorMsgFormat = "There is no email to verify. An Email object was not specified when invoking '%s' and the application has not sent one.";
173+
return $email ?: $this->fail(
174+
sprintf($errorMsgFormat, $function)
175+
);
176+
}
177+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy