‪TYPO3CMS  ‪main
FormFrontendControllerTest.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;
21 use Psr\EventDispatcher\EventDispatcherInterface;
33 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
34 
35 final class ‪FormFrontendControllerTest extends UnitTestCase
36 {
37  public function ‪setUp(): void
38  {
39  parent::setUp();
40  $cacheManager = new ‪CacheManager();
41  $cacheManager->registerCache(new ‪NullFrontend('runtime'));
42  GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManager);
43  }
44 
45  public function ‪tearDown(): void
46  {
47  GeneralUtility::purgeInstances();
48  parent::tearDown();
49  }
50 
51  #[Test]
53  {
54  $mockController = $this->getAccessibleMock(FormFrontendController::class, null, [], '', false);
55 
56  $configurationServiceMock = $this->createMock(ConfigurationService::class);
57  GeneralUtility::setSingletonInstance(ConfigurationService::class, $configurationServiceMock);
58 
59  $sheetIdentifier = md5(
60  implode('', [
61  '1:/foo',
62  'standard',
63  'ext-form-identifier',
64  'EmailToReceiver',
65  ])
66  );
67 
68  $flexFormTools = new ‪FlexFormTools(new ‪MockEventDispatcher());
69  $request = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
70  $request = (new ‪Request($request));
71  $contentObject = new ‪ContentObjectRenderer();
72  $request = $request->withAttribute('currentContentObject', $contentObject);
73  $contentObject->setRequest($request);
74  $mockController->_set('request', $request);
75  $contentObject->data = [
76  'pi_flexform' => $flexFormTools->flexArray2Xml([
77  'data' => [
78  $sheetIdentifier => [
79  'lDEF' => [
80  'settings.finishers.EmailToReceiver.subject' => [
81  'vDEF' => 'Message Subject overridden',
82  ],
83  'settings.finishers.EmailToReceiver.recipients' => [
84  'el' => [
85  'abc' => [
86  '_arrayContainer' => [
87  'el' => [
88  'email' => [
89  'vDEF' => 'your.company@example.com overridden',
90  ],
91  'name' => [
92  'vDEF' => '',
93  ],
94  ],
95  ],
96  ],
97  ],
98  ],
99  'settings.finishers.EmailToReceiver.format' => [
100  'vDEF' => 'html overridden',
101  ],
102  ],
103  ],
104  ],
105  ]),
106  ];
107 
108  $configurationServiceMock->method('getPrototypeConfiguration')->with(self::anything())->willReturn([
109  'finishersDefinition' => [
110  'EmailToReceiver' => [
111  'FormEngine' => [
112  'elements' => [
113  'subject' => [],
114  'recipients' => [],
115  'format' => [],
116  ],
117  ],
118  ],
119  ],
120  ]);
121 
122  $mockController->_set('settings', [
123  'overrideFinishers' => 0,
124  'finishers' => [
125  'EmailToReceiver' => [
126  'subject' => 'Message Subject overridden',
127  'recipients' => [
128  'your.company@example.com overridden' => '',
129  ],
130  'format' => 'html overridden',
131  ],
132  ],
133  ]);
134 
135  $input = [
136  'identifier' => 'ext-form-identifier',
137  'persistenceIdentifier' => '1:/foo',
138  'prototypeName' => 'standard',
139  'finishers' => [
140  0 => [
141  'identifier' => 'EmailToReceiver',
142  'options' => [
143  'subject' => 'Message Subject',
144  'recipients' => [
145  'your.company@example.com' => '',
146  ],
147  'format' => 'html',
148  ],
149  ],
150  ],
151  ];
152 
153  $expected = [
154  'identifier' => 'ext-form-identifier',
155  'persistenceIdentifier' => '1:/foo',
156  'prototypeName' => 'standard',
157  'finishers' => [
158  0 => [
159  'identifier' => 'EmailToReceiver',
160  'options' => [
161  'subject' => 'Message Subject',
162  'recipients' => [
163  'your.company@example.com' => '',
164  ],
165  'format' => 'html',
166  ],
167  ],
168  ],
169  ];
170 
171  $eventDispatcher = new ‪MockEventDispatcher();
172  GeneralUtility::addInstance(EventDispatcherInterface::class, $eventDispatcher);
173  GeneralUtility::addInstance(FlexFormTools::class, new ‪FlexFormTools($eventDispatcher));
174 
175  self::assertSame($expected, $mockController->_call('overrideByFlexFormSettings', $input));
176  }
177 
178  #[Test]
180  {
181  $mockController = $this->getAccessibleMock(FormFrontendController::class, null, [], '', false);
182 
183  $configurationServiceMock = $this->createMock(ConfigurationService::class);
184  GeneralUtility::setSingletonInstance(ConfigurationService::class, $configurationServiceMock);
185 
186  $sheetIdentifier = md5(
187  implode('', [
188  '1:/foo',
189  'standard',
190  'ext-form-identifier',
191  'EmailToReceiver',
192  ])
193  );
194 
195  $flexFormTools = new ‪FlexFormTools(new ‪MockEventDispatcher());
196  $request = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
197  $request = (new ‪Request($request));
198  $contentObject = new ‪ContentObjectRenderer();
199  $request = $request->withAttribute('currentContentObject', $contentObject);
200  $contentObject->setRequest($request);
201  $mockController->_set('request', $request);
202  $contentObject->data = [
203  'pi_flexform' => $flexFormTools->flexArray2Xml([
204  'data' => [
205  $sheetIdentifier => [
206  'lDEF' => [
207  'settings.finishers.EmailToReceiver.subject' => [
208  'vDEF' => 'Message Subject overridden',
209  ],
210  'settings.finishers.EmailToReceiver.recipients' => [
211  'el' => [
212  'abc' => [
213  '_arrayContainer' => [
214  'el' => [
215  'email' => [
216  'vDEF' => 'your.company@example.com overridden',
217  ],
218  'name' => [
219  'vDEF' => '',
220  ],
221  ],
222  ],
223  ],
224  ],
225  ],
226  'settings.finishers.EmailToReceiver.format' => [
227  'vDEF' => 'html overridden',
228  ],
229  ],
230  ],
231  ],
232  ]),
233  ];
234 
235  $configurationServiceMock->method('getPrototypeConfiguration')->with(self::anything())->willReturn([
236  'finishersDefinition' => [
237  'EmailToReceiver' => [
238  'FormEngine' => [
239  'elements' => [
240  'subject' => [
241  'config' => [
242  'type' => 'input',
243  ],
244  ],
245  'recipients' => [
246  'type' => 'array',
247  'section' => true,
248  'sectionItemKey' => 'email',
249  'sectionItemValue' => 'name',
250  ],
251  'format' => [
252  'config' => [
253  'type' => 'input',
254  ],
255  ],
256  ],
257  ],
258  ],
259  ],
260  ]);
261 
262  $mockController->_set('settings', [
263  'overrideFinishers' => 1,
264  'finishers' => [
265  'EmailToReceiver' => [
266  'subject' => 'Message Subject overridden',
267  'recipients' => [
268  'abcxyz' => [
269  'email' => 'your.company@example.com overridden',
270  'name' => '',
271  ],
272  ],
273  'format' => 'html overridden',
274  ],
275  ],
276  ]);
277 
278  $input = [
279  'persistenceIdentifier' => '1:/foo',
280  'identifier' => 'ext-form-identifier',
281  'prototypeName' => 'standard',
282  'finishers' => [
283  0 => [
284  'identifier' => 'EmailToReceiver',
285  'options' => [
286  'subject' => 'Message Subject',
287  'recipients' => [
288  'your.company@example.com' => '',
289  ],
290  'format' => 'html',
291  ],
292  ],
293  ],
294  ];
295 
296  $expected = [
297  'persistenceIdentifier' => '1:/foo',
298  'identifier' => 'ext-form-identifier',
299  'prototypeName' => 'standard',
300  'finishers' => [
301  0 => [
302  'identifier' => 'EmailToReceiver',
303  'options' => [
304  'subject' => 'Message Subject overridden',
305  'recipients' => [
306  'your.company@example.com overridden' => '',
307  ],
308  'format' => 'html overridden',
309  'translation' => [
310  'propertiesExcludedFromTranslation' => [
311  'subject',
312  'recipients',
313  'format',
314  ],
315  ],
316  ],
317  ],
318  ],
319  ];
320 
321  $eventDispatcher = new ‪MockEventDispatcher();
322  GeneralUtility::addInstance(EventDispatcherInterface::class, $eventDispatcher);
323  GeneralUtility::addInstance(FlexFormTools::class, new ‪FlexFormTools($eventDispatcher));
324 
325  self::assertSame($expected, $mockController->_call('overrideByFlexFormSettings', $input));
326  }
327 
328  #[Test]
330  {
331  $mockController = $this->getAccessibleMock(FormFrontendController::class, null, [], '', false);
332 
333  $configurationServiceMock = $this->createMock(ConfigurationService::class);
334  GeneralUtility::setSingletonInstance(ConfigurationService::class, $configurationServiceMock);
335 
336  $sheetIdentifier = md5(
337  implode('', [
338  '1:/foo',
339  'standard',
340  'ext-form-identifier',
341  'EmailToReceiver',
342  ])
343  );
344 
345  $eventDispatcher = new ‪MockEventDispatcher();
346  GeneralUtility::addInstance(EventDispatcherInterface::class, $eventDispatcher);
347  GeneralUtility::addInstance(FlexFormTools::class, new ‪FlexFormTools($eventDispatcher));
348 
349  $flexFormTools = new ‪FlexFormTools(new ‪MockEventDispatcher());
350  $request = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
351  $request = (new ‪Request($request));
352  $contentObject = new ‪ContentObjectRenderer();
353  $request = $request->withAttribute('currentContentObject', $contentObject);
354  $contentObject->setRequest($request);
355  $mockController->_set('request', $request);
356  $contentObject->data = [
357  'pi_flexform' => $flexFormTools->flexArray2Xml([
358  'data' => [
359  $sheetIdentifier => [
360  'lDEF' => [
361  'settings.finishers.EmailToReceiver.subject' => [
362  'vDEF' => 'Message Subject overridden',
363  ],
364  'settings.finishers.EmailToReceiver.recipients' => [
365  'el' => [
366  'abc' => [
367  '_arrayContainer' => [
368  'el' => [
369  'email' => [
370  'vDEF' => 'your.company@example.com overridden',
371  ],
372  'name' => [
373  'vDEF' => '',
374  ],
375  ],
376  ],
377  ],
378  ],
379  ],
380  'settings.finishers.EmailToReceiver.format' => [
381  'vDEF' => 'html overridden',
382  ],
383  ],
384  ],
385  ],
386  ]),
387  ];
388 
389  $configurationServiceMock->method('getPrototypeConfiguration')->with(self::anything())->willReturn([
390  'finishersDefinition' => [
391  'EmailToReceiver' => [
392  'FormEngine' => [
393  'elements' => [
394  'subject' => [
395  'config' => [
396  'type' => 'input',
397  ],
398  ],
399  'recipients' => [
400  'type' => 'array',
401  'section' => true,
402  'sectionItemKey' => 'email',
403  'sectionItemValue' => 'name',
404  ],
405  ],
406  ],
407  ],
408  ],
409  ]);
410 
411  $mockController->_set('settings', [
412  'overrideFinishers' => 1,
413  'finishers' => [
414  'EmailToReceiver' => [
415  'subject' => 'Message Subject overridden',
416  'recipients' => [
417  'abcxyz' => [
418  'email' => 'your.company@example.com overridden',
419  'name' => '',
420  ],
421  ],
422  'format' => 'html overridden',
423  ],
424  ],
425  ]);
426 
427  $input = [
428  'persistenceIdentifier' => '1:/foo',
429  'identifier' => 'ext-form-identifier',
430  'prototypeName' => 'standard',
431  'finishers' => [
432  0 => [
433  'identifier' => 'EmailToReceiver',
434  'options' => [
435  'subject' => 'Message Subject',
436  'recipients' => [
437  'your.company@example.com' => '',
438  ],
439  'format' => 'html',
440  ],
441  ],
442  ],
443  ];
444 
445  $expected = [
446  'persistenceIdentifier' => '1:/foo',
447  'identifier' => 'ext-form-identifier',
448  'prototypeName' => 'standard',
449  'finishers' => [
450  0 => [
451  'identifier' => 'EmailToReceiver',
452  'options' => [
453  'subject' => 'Message Subject overridden',
454  'recipients' => [
455  'your.company@example.com overridden' => '',
456  ],
457  'format' => 'html',
458  'translation' => [
459  'propertiesExcludedFromTranslation' => [
460  'subject',
461  'recipients',
462  ],
463  ],
464  ],
465  ],
466  ],
467  ];
468 
469  self::assertSame($expected, $mockController->_call('overrideByFlexFormSettings', $input));
470  }
471 }
‪TYPO3\CMS\Form\Tests\Unit\Controller\FormFrontendControllerTest\setUp
‪setUp()
Definition: FormFrontendControllerTest.php:37
‪TYPO3\CMS\Form\Tests\Unit\Controller\FormFrontendControllerTest\overrideByFlexFormSettingsReturnsNotOverriddenConfigurationKeyIfFlexformOverridesAreNotRepresentedInFormEngineConfiguration
‪overrideByFlexFormSettingsReturnsNotOverriddenConfigurationKeyIfFlexformOverridesAreNotRepresentedInFormEngineConfiguration()
Definition: FormFrontendControllerTest.php:329
‪TYPO3\CMS\Core\Cache\Frontend\NullFrontend
Definition: NullFrontend.php:30
‪TYPO3\CMS\Form\Controller\FormFrontendController
Definition: FormFrontendController.php:41
‪TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools
Definition: FlexFormTools.php:40
‪TYPO3\CMS\Form\Tests\Unit\Controller\FormFrontendControllerTest\tearDown
‪tearDown()
Definition: FormFrontendControllerTest.php:45
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Form\Tests\Unit\Controller\FormFrontendControllerTest\overrideByFlexFormSettingsReturnsOverriddenConfigurationIfFlexformOverridesEnabled
‪overrideByFlexFormSettingsReturnsOverriddenConfigurationIfFlexformOverridesEnabled()
Definition: FormFrontendControllerTest.php:179
‪TYPO3\CMS\Form\Tests\Unit\Controller
Definition: FormEditorControllerTest.php:18
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService
Definition: ConfigurationService.php:50
‪TYPO3\CMS\Core\Tests\Unit\Fixtures\EventDispatcher\MockEventDispatcher
Definition: MockEventDispatcher.php:30
‪TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
Definition: ContentObjectRenderer.php:102
‪TYPO3\CMS\Form\Tests\Unit\Controller\FormFrontendControllerTest\overrideByFlexFormSettingsReturnsNoOverriddenConfigurationIfFlexformOverridesDisabled
‪overrideByFlexFormSettingsReturnsNoOverriddenConfigurationIfFlexformOverridesDisabled()
Definition: FormFrontendControllerTest.php:52
‪TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters
Definition: ExtbaseRequestParameters.php:35
‪TYPO3\CMS\Form\Tests\Unit\Controller\FormFrontendControllerTest
Definition: FormFrontendControllerTest.php:36
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:35