‪TYPO3CMS  ‪main
FluidEmailTest.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;
22 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
23 
24 final class ‪FluidEmailTest extends FunctionalTestCase
25 {
26  protected bool ‪$initializeDatabase = false;
27 
28  protected array ‪$testExtensionsToLoad = [
29  'typo3/sysext/core/Tests/Functional/Fixtures/Extensions/test_fluid_email',
30  ];
31 
32  #[Test]
34  {
35  $subject = new ‪FluidEmail();
36  $subject
38  ->setTemplate('Default')
39  ->from('benniYYYY@typo3.org')
40  ->assign('content', 'Plain content from Functional test')
41  ->to('some-recipient@example.com');
42  $result = $subject->getBody();
43  self::assertEquals('plain', $result->getMediaSubtype());
44  self::assertStringContainsString('Plain content from Functional test', $result->bodyToString());
45  self::assertEmpty($subject->getHtmlBody());
46  self::assertNotEmpty($subject->getTextBody());
47  }
48 
49  #[Test]
51  {
52  $subject = new ‪FluidEmail();
53  $subject
55  ->setTemplate('Default')
56  ->from('benniYYYY@typo3.org')
57  ->assign('content', 'HTML content <strong>from</strong> Functional test')
58  ->to('some-recipient@example.com');
59  $result = $subject->getBody();
60  self::assertEquals('html', $result->getMediaSubtype());
61  self::assertStringContainsString('&lt;strong&gt;from&lt;/strong&gt;', $result->bodyToString());
62  self::assertNotEmpty($subject->getHtmlBody());
63  self::assertEmpty($subject->getTextBody());
64  }
65 
66  #[Test]
68  {
69  $subject = new ‪FluidEmail();
70  $subject
72  ->setTemplate('Default')
73  ->from('benniYYYY@typo3.org')
74  ->assign('content', 'Plain content <strong>from</strong> Functional test')
75  ->to('some-recipient@example.com');
76  $result = $subject->getBody();
77  self::assertEquals('alternative', $result->getMediaSubtype());
78  self::assertStringContainsString('&lt;strong&gt;from&lt;/strong&gt;', $result->bodyToString());
79  self::assertNotEmpty($subject->getHtmlBody());
80  self::assertNotEmpty($subject->getTextBody());
81  }
82 
83  #[Test]
84  public function ‪settingNoFormatGeneratesTwoBodies(): void
85  {
86  $subject = new ‪FluidEmail();
87  $subject
88  ->setTemplate('Default')
89  ->from('benniYYYY@typo3.org')
90  ->assign('content', 'Plain content <strong>from</strong> Functional test')
91  ->to('some-recipient@example.com');
92  $result = $subject->getBody();
93  self::assertEquals('alternative', $result->getMediaSubtype());
94  self::assertStringContainsString('&lt;strong&gt;from&lt;/strong&gt;', $result->bodyToString());
95  self::assertNotEmpty($subject->getHtmlBody());
96  self::assertNotEmpty($subject->getTextBody());
97  }
98 
99  #[Test]
100  public function ‪forcingHtmlBodyGenerationWorks(): void
101  {
102  $subject = new ‪FluidEmail();
103  $subject
104  ->setTemplate('WithSubject')
106  ->from('benniYYYY@typo3.org')
107  ->assign('content', 'Plain content <strong>from</strong> Functional test')
108  ->to('some-recipient@example.com');
109 
110  // Generate html body with the force argument
111  $result = $subject->getHtmlBody(true);
112 
113  // Pre-check, result is not NULL
114  self::assertNotNull($result);
115 
116  // Assert text content was not created
117  self::assertNull($subject->getTextBody());
118 
119  // Check that subject section is evaluated
120  self::assertEquals('FluidEmail subject', $subject->getSubject());
121 
122  // Check content
123  self::assertStringContainsString('<!doctype html>', $result);
124  self::assertStringContainsString('&lt;strong&gt;from&lt;/strong&gt;', $result);
125  }
126 
127  #[Test]
128  public function ‪forcingTextBodyGenerationWorks(): void
129  {
130  $subject = new ‪FluidEmail();
131  $subject
132  ->setTemplate('WithSubject')
134  ->from('benniYYYY@typo3.org')
135  ->subject('Will be overridden in the template')
136  ->assign('content', 'Plain content from Functional test')
137  ->to('some-recipient@example.com');
138 
139  // Generate text body with the force argument
140  $result = $subject->getTextBody(true);
141 
142  // Pre-check, result is not NULL
143  self::assertNotNull($result);
144 
145  // Assert html content was not created
146  self::assertNull($subject->getHtmlBody());
147 
148  // Check that subject section is evaluated and overrides the previously defined
149  self::assertEquals('FluidEmail subject', $subject->getSubject());
150 
151  // Check content
152  self::assertStringNotContainsString('<!doctype html>', $result);
153  self::assertStringContainsString('Plain content from Functional test', $result);
154  }
155 
156  #[Test]
158  {
159  $subject = new ‪FluidEmail();
160  $subject
161  ->setTemplate('WithSubject')
163  ->from('benniYYYY@typo3.org')
164  ->assign('content', 'Plain content <strong>from</strong> Functional test')
165  ->to('some-recipient@example.com');
166 
167  // Generate html body with the force argument
168  $result = $subject->getHtmlBody(true);
169 
170  // Pre-check, result is not NULL
171  self::assertNotNull($result);
172 
173  // Assert text content was not created
174  self::assertNull($subject->getTextBody());
175 
176  // Check that subject section is evaluated
177  self::assertEquals('FluidEmail subject', $subject->getSubject());
178 
179  // assign new content
180  $subject->assign('content', 'Reassigned Plain content <strong>from</strong> Functional test');
181  $result2 = $subject->getHtmlBody();
182 
183  // Check content
184  self::assertStringContainsString('<!doctype html>', $result2);
185  self::assertStringContainsString('&lt;strong&gt;from&lt;/strong&gt;', $result2);
186  self::assertStringContainsString('Reassigned Plain content ', $result2);
187  }
188 
189  #[Test]
191  {
192  $subject = new ‪FluidEmail();
193  $subject
194  ->setTemplate('WithSubject')
196  ->from('benniYYYY@typo3.org')
197  ->assign('content', 'Plain content from Functional test')
198  ->to('some-recipient@example.com');
199 
200  // Generate text body with the force argument
201  $result = $subject->getTextBody(true);
202 
203  // Pre-check, result is not NULL
204  self::assertNotNull($result);
205 
206  // Assert html content was not created
207  self::assertNull($subject->getHtmlBody());
208 
209  // Check that subject section is evaluated
210  self::assertEquals('FluidEmail subject', $subject->getSubject());
211 
212  // assign new content
213  $subject->assign('content', 'Reassigned Plain content from Functional test');
214  $result2 = $subject->getTextBody();
215 
216  // Assert html content was not created
217  self::assertNull($subject->getHtmlBody());
218 
219  // Check content
220  self::assertStringNotContainsString('<!doctype html>', $result2);
221  self::assertStringContainsString('Reassigned Plain content ', $result2);
222  }
223 
224  #[Test]
226  {
227  $subject = new ‪FluidEmail();
228  $subject
229  ->setTemplate('WithSubject')
231  ->from('benniYYYY@typo3.org')
232  ->assign('content', 'Plain content <strong>from</strong> Functional test')
233  ->to('some-recipient@example.com');
234 
235  // Generate html body with the force argument
236  $result = $subject->getHtmlBody(true);
237 
238  // Pre-check, result is not NULL
239  self::assertNotNull($result);
240 
241  // Assert text content was not created
242  self::assertNull($subject->getTextBody());
243 
244  // Check that subject section is evaluated
245  self::assertEquals('FluidEmail subject', $subject->getSubject());
246 
247  // assign new content
248  $subject->assignMultiple(['content' => 'Reassigned Plain content <strong>from</strong> Functional test']);
249  $result2 = $subject->getHtmlBody();
250 
251  // Assert text content was not created
252  self::assertNull($subject->getTextBody());
253 
254  // Check content
255  self::assertStringContainsString('<!doctype html>', $result2);
256  self::assertStringContainsString('&lt;strong&gt;from&lt;/strong&gt;', $result2);
257  self::assertStringContainsString('Reassigned Plain content ', $result2);
258  }
259 
260  #[Test]
262  {
263  $subject = new ‪FluidEmail();
264  $subject
265  ->setTemplate('WithSubject')
267  ->from('benniYYYY@typo3.org')
268  ->assign('content', 'Plain content from Functional test')
269  ->to('some-recipient@example.com');
270 
271  // Generate html body with the force argument
272  $result = $subject->getTextBody(true);
273 
274  // Pre-check, result is not NULL
275  self::assertNotNull($result);
276 
277  // Assert text content was not created
278  self::assertNull($subject->getHtmlBody());
279 
280  // Check that subject section is evaluated
281  self::assertEquals('FluidEmail subject', $subject->getSubject());
282 
283  // assign new content
284  $subject->assignMultiple(['content' => 'Reassigned Plain content from Functional test']);
285  $result2 = $subject->getTextBody();
286 
287  // Check content
288  self::assertStringNotContainsString('<!doctype html>', $result2);
289  self::assertStringContainsString('Reassigned Plain content ', $result2);
290  }
291 
292  #[Test]
294  {
295  $subject = new class () extends ‪FluidEmail {
296  public int $countRenderContentCalled = 0;
297 
298  protected function renderContent(string $format): string
299  {
300  $this->countRenderContentCalled++;
301  return parent::renderContent($format);
302  }
303  };
304  $subject
305  ->setTemplate('WithSubject')
307  ->from('benniYYYY@typo3.org')
308  ->assign('content', 'Plain content from Functional test')
309  ->to('some-recipient@example.com');
310 
311  $subject->ensureValidity();
312  self::assertEquals(2, $subject->countRenderContentCalled);
313 
314  $subject->ensureValidity();
315  self::assertEquals(2, $subject->countRenderContentCalled);
316  }
317 
318  #[Test]
320  {
321  $subject = new class () extends ‪FluidEmail {
322  public int $countRenderContentCalled = 0;
323 
324  protected function renderContent(string $format): string
325  {
326  $this->countRenderContentCalled++;
327  return parent::renderContent($format);
328  }
329  };
330  $subject
331  ->setTemplate('WithSubject')
333  ->from('benniYYYY@typo3.org')
334  ->assign('content', 'Plain content from Functional test')
335  ->to('some-recipient@example.com');
336 
337  $subject->ensureValidity();
338  self::assertEquals(2, $subject->countRenderContentCalled);
339 
340  $subject->assign('content', 'Reassigned plain content from Functional test');
341 
342  $subject->ensureValidity();
343  $resultPlain = $subject->getTextBody();
344  $resultHtml = $subject->getHtmlBody();
345 
346  self::assertEquals(4, $subject->countRenderContentCalled);
347  self::assertNotNull($resultPlain);
348  self::assertNotNull($resultHtml);
349  self::assertStringContainsString('Reassigned plain content from Functional test', $resultPlain);
350  self::assertStringContainsString('<!doctype html>', $resultHtml);
351  self::assertStringContainsString('Reassigned plain content from Functional test', $resultHtml);
352  }
353 
354  #[Test]
356  {
357  $subject = new class () extends ‪FluidEmail {
358  public int $countRenderContentCalled = 0;
359 
360  protected function renderContent(string $format): string
361  {
362  $this->countRenderContentCalled++;
363  return parent::renderContent($format);
364  }
365  };
366  $subject
367  ->setTemplate('WithSubject')
369  ->from('benniYYYY@typo3.org')
370  ->assign('content', 'Plain content from Functional test')
371  ->to('some-recipient@example.com');
372 
373  $subject->ensureValidity();
374  self::assertEquals(2, $subject->countRenderContentCalled);
375 
376  $subject->assignMultiple(['content' => 'Reassigned plain content from Functional test']);
377 
378  $subject->ensureValidity();
379  $resultPlain = $subject->getTextBody();
380  $resultHtml = $subject->getHtmlBody();
381 
382  self::assertEquals(4, $subject->countRenderContentCalled);
383  self::assertNotNull($resultPlain);
384  self::assertNotNull($resultHtml);
385  self::assertStringContainsString('Reassigned plain content from Functional test', $resultPlain);
386  self::assertStringContainsString('<!doctype html>', $resultHtml);
387  self::assertStringContainsString('Reassigned plain content from Functional test', $resultHtml);
388  }
389 
390  #[Test]
392  {
393  $subject = new class () extends ‪FluidEmail {
394  public int $countRenderContentCalled = 0;
395 
396  protected function renderContent(string $format): string
397  {
398  $this->countRenderContentCalled++;
399  return parent::renderContent($format);
400  }
401  };
402  $subject
404  ->from('benniYYYY@typo3.org')
405  ->assign('content', 'Plain content from Functional test')
406  ->subject('Original subject')
407  ->to('some-recipient@example.com');
408 
409  $subject->ensureValidity();
410  self::assertEquals(2, $subject->countRenderContentCalled);
411 
412  $subject->subject('Overridden subject');
413 
414  $subject->ensureValidity();
415  $resultPlain = $subject->getTextBody();
416  $resultHtml = $subject->getHtmlBody();
417 
418  self::assertEquals(2, $subject->countRenderContentCalled);
419  self::assertNotNull($resultPlain);
420  self::assertNotNull($resultHtml);
421  self::assertEquals('Overridden subject', $subject->getSubject());
422  }
423 
424  #[Test]
426  {
427  $subject = new class () extends ‪FluidEmail {
428  public int $countRenderContentCalled = 0;
429 
430  protected function renderContent(string $format): string
431  {
432  $this->countRenderContentCalled++;
433  return parent::renderContent($format);
434  }
435  };
436  $subject
438  ->from('benniYYYY@typo3.org')
439  ->assign('content', 'Plain content from Functional test')
440  ->subject('Original subject')
441  ->to('some-recipient@example.com');
442 
443  $subject->ensureValidity();
444  self::assertEquals(2, $subject->countRenderContentCalled);
445  $text = $subject->getTextBody();
446  $html = $subject->getHtmlBody();
447  self::assertEquals(2, $subject->countRenderContentCalled);
448 
449  $subject->assign('content', 'Reassigned plain content from Functional test');
450  $subject->text($text);
451  $subject->html($html);
452 
453  $subject->ensureValidity();
454  $resultPlain = $subject->getTextBody();
455  $resultHtml = $subject->getHtmlBody();
456 
457  self::assertEquals(2, $subject->countRenderContentCalled);
458  self::assertNotNull($resultPlain);
459  self::assertNotNull($resultHtml);
460  self::assertEquals($text, $resultPlain);
461  self::assertStringContainsString('<!doctype html>', $resultHtml);
462  self::assertEquals($html, $resultHtml);
463  }
464 }
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\bodiesAreRecreatedOnMultipleEnsureValidityCallsWithAssignMultipleUsedInBetween
‪bodiesAreRecreatedOnMultipleEnsureValidityCallsWithAssignMultipleUsedInBetween()
Definition: FluidEmailTest.php:355
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\viewAssignMultiValuesResetsGeneratedHtmlBody
‪viewAssignMultiValuesResetsGeneratedHtmlBody()
Definition: FluidEmailTest.php:225
‪TYPO3\CMS\Core\Mail\FluidEmail\FORMAT_BOTH
‪const FORMAT_BOTH
Definition: FluidEmail.php:38
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\bodiesAreNotRecreatedOnMultipleEnsureValidityCalls
‪bodiesAreNotRecreatedOnMultipleEnsureValidityCalls()
Definition: FluidEmailTest.php:293
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\$testExtensionsToLoad
‪array $testExtensionsToLoad
Definition: FluidEmailTest.php:28
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\settingFormatWithHtmlOnlyGeneratesHtmlEmail
‪settingFormatWithHtmlOnlyGeneratesHtmlEmail()
Definition: FluidEmailTest.php:50
‪TYPO3\CMS\Core\Mail\FluidEmail\FORMAT_HTML
‪const FORMAT_HTML
Definition: FluidEmail.php:36
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\$initializeDatabase
‪bool $initializeDatabase
Definition: FluidEmailTest.php:26
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\forcingHtmlBodyGenerationWorks
‪forcingHtmlBodyGenerationWorks()
Definition: FluidEmailTest.php:100
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\settingNoFormatGeneratesTwoBodies
‪settingNoFormatGeneratesTwoBodies()
Definition: FluidEmailTest.php:84
‪TYPO3\CMS\Core\Tests\Functional\Mail
Definition: FluidEmailTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest
Definition: FluidEmailTest.php:25
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\settingFormatWithTextAndHtmlGeneratesTwoBodies
‪settingFormatWithTextAndHtmlGeneratesTwoBodies()
Definition: FluidEmailTest.php:67
‪TYPO3\CMS\Core\Mail\FluidEmail
Definition: FluidEmail.php:35
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\viewAssignValuesResetsGeneratedHtmlBody
‪viewAssignValuesResetsGeneratedHtmlBody()
Definition: FluidEmailTest.php:157
‪TYPO3\CMS\Core\Mail\FluidEmail\FORMAT_PLAIN
‪const FORMAT_PLAIN
Definition: FluidEmail.php:37
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\viewAssignMultiValuesResetsGeneratedTextBody
‪viewAssignMultiValuesResetsGeneratedTextBody()
Definition: FluidEmailTest.php:261
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\bodiesAreNotRecreatedOnMultipleEnsureValidityCallsWithSetSubjectInBetween
‪bodiesAreNotRecreatedOnMultipleEnsureValidityCallsWithSetSubjectInBetween()
Definition: FluidEmailTest.php:391
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\forcingTextBodyGenerationWorks
‪forcingTextBodyGenerationWorks()
Definition: FluidEmailTest.php:128
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\bodiesAreNotRecreatedOnMultipleEnsureValidityCallsWithAssignedValuesButManualSetTextAndHtml
‪bodiesAreNotRecreatedOnMultipleEnsureValidityCallsWithAssignedValuesButManualSetTextAndHtml()
Definition: FluidEmailTest.php:425
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\bodiesAreRecreatedOnMultipleEnsureValidityCallsWithAssignUsedInBetween
‪bodiesAreRecreatedOnMultipleEnsureValidityCallsWithAssignUsedInBetween()
Definition: FluidEmailTest.php:319
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\viewAssignValuesResetsGeneratedTextBody
‪viewAssignValuesResetsGeneratedTextBody()
Definition: FluidEmailTest.php:190
‪TYPO3\CMS\Core\Tests\Functional\Mail\FluidEmailTest\settingFormatWithTextOnlyGeneratesTextEmail
‪settingFormatWithTextOnlyGeneratesTextEmail()
Definition: FluidEmailTest.php:33