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