‪TYPO3CMS  11.5
FormViewHelperTest.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 
26 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
27 
28 class ‪FormViewHelperTest extends FunctionalTestCase
29 {
30  public function ‪isRenderedDataProvider(): array
31  {
32  return [
33  '#1' => [
34  '<f:form action="{action}" method="{method}" fieldNamePrefix="{fieldNamePrefix}" />',
35  [
36  'action' => 'fieldNamePrefix<>&"\'',
37  'method' => 'fieldNamePrefix<>&"\'',
38  'fieldNamePrefix' => 'fieldNamePrefix<>&"\'',
39  ],
40  // first element having "@extension" in name attribute
41  // check against correct value regarding php 8.1 change of default argument values of flags for ex. htmlspecialchars()
42  // @todo remove conditional values when php 8.1 is min requirement
43  (PHP_VERSION_ID < 80100
44  // before php 8.1 - remove this for >php8.1 only
45  ? '<input type="hidden" name="fieldNamePrefix&lt;&gt;&amp;&quot;\'[__referrer][@extension]" value="" />'
46  // for php 8.1
47  : '<input type="hidden" name="fieldNamePrefix&lt;&gt;&amp;&quot;&#039;[__referrer][@extension]" value="" />'),
48  ],
49  '#2' => [
50  '{f:form(action:action, method:method, fieldNamePrefix:fieldNamePrefix)}',
51  [
52  'action' => 'fieldNamePrefix<>&"\'',
53  'method' => 'fieldNamePrefix<>&"\'',
54  'fieldNamePrefix' => 'fieldNamePrefix<>&"\'',
55  ],
56  // first element having "@extension" in name attribute
57  // check against correct value regarding php 8.1 change of default argument values of flags for ex. htmlspecialchars()
58  // @todo remove conditional values when php 8.1 is min requirement
59  (PHP_VERSION_ID < 80100
60  // before php 8.1 - remove this for >php8.1 only
61  ? '<input type="hidden" name="fieldNamePrefix&lt;&gt;&amp;&quot;\'[__referrer][@extension]" value="" />'
62  // for php 8.1
63  : '<input type="hidden" name="fieldNamePrefix&lt;&gt;&amp;&quot;&#039;[__referrer][@extension]" value="" />'),
64  ],
65  ];
66  }
67 
72  public function ‪isRendered(string $source, array $variables, string $expectation): void
73  {
74  $view = new ‪StandaloneView();
75  $view->setTemplateSource($source);
76  $view->assignMultiple($variables);
77  $body = $view->render();
78  $actual = null;
79  if (preg_match('#<input[^>]+name=".+\[@extension\]"[^>]+>#m', $body, $matches)) {
80  $actual = $matches[0];
81  }
82  self::assertSame($expectation, $actual);
83  }
84 
89  {
90  $extendsAbstractEntity = new ‪ExtendsAbstractEntity();
91  $extendsAbstractEntity->_setProperty('uid', 123);
92  $view = new ‪StandaloneView();
93  $view->assign('object', $extendsAbstractEntity);
94  $view->setTemplateSource('<f:form fieldNamePrefix="prefix" objectName="myObjectName" object="{object}" />');
95  $expected = '<input type="hidden" name="prefix[myObjectName][__identity]" value="123" />';
96  self::assertStringContainsString($expected, $view->render());
97  }
98 
103  {
104  $view = new ‪StandaloneView();
105  $view->setTemplateSource('<f:form actionUri="foobar" />');
106  $expected = '<form action="foobar" method="post">';
107  self::assertStringContainsString($expected, $view->render());
108  }
109 
114  {
115  $extendsAbstractEntity = new ‪ExtendsAbstractEntity();
116  $extendsAbstractEntity->_setProperty('uid', 123);
117  $view = new ‪StandaloneView();
118  $view->assign('object', $extendsAbstractEntity);
119  $view->setTemplateSource('<f:form name="formName" fieldNamePrefix="prefix" object="{object}" />');
120  $expected = '<input type="hidden" name="prefix[formName][__identity]" value="123" />';
121  self::assertStringContainsString($expected, $view->render());
122  }
123 
128  {
129  $extendsAbstractEntity = new ‪ExtendsAbstractEntity();
130  $extendsAbstractEntity->_setProperty('uid', 123);
131  $view = new ‪StandaloneView();
132  $view->assign('object', $extendsAbstractEntity);
133  $view->setTemplateSource('<f:form name="formName" fieldNamePrefix="prefix" objectName="myObjectName" object="{object}" />');
134  $expected = '<input type="hidden" name="prefix[myObjectName][__identity]" value="123" />';
135  self::assertStringContainsString($expected, $view->render());
136  }
137 
142  {
143  $extendsAbstractEntity = new ‪ExtendsAbstractEntity();
144  $extendsAbstractEntity->_setProperty('uid', 123);
145  $view = new ‪StandaloneView();
146  $view->assign('object', $extendsAbstractEntity);
147  $view->setTemplateSource('<f:form fieldNamePrefix="prefix" objectName="myObjectName" object="{object}" />');
148  $expected = '<form action="" method="post">' . chr(10) . '<div>';
149  self::assertStringContainsString($expected, $view->render());
150  }
151 
156  {
157  $extendsAbstractEntity = new ‪ExtendsAbstractEntity();
158  $extendsAbstractEntity->_setProperty('uid', 123);
159  $view = new ‪StandaloneView();
160  $view->assign('object', $extendsAbstractEntity);
161  $view->setTemplateSource('<f:form hiddenFieldClassName="hidden" fieldNamePrefix="prefix" objectName="myObjectName" object="{object}" />');
162  $expected = '<form action="" method="post">' . chr(10) . '<div class="hidden">';
163  self::assertStringContainsString($expected, $view->render());
164  }
165 
170  {
171  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
172  $extbaseRequestParameters->setControllerActionName('controllerActionName');
173  $extbaseRequestParameters->setControllerName('controllerName');
174  $extbaseRequestParameters->setControllerExtensionName('extensionName');
175  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters);
176  $extbaseRequest = new ‪Request($psr7Request);
177  GeneralUtility::addInstance(Request::class, $extbaseRequest);
178 
179  $extendsAbstractEntity = new ‪ExtendsAbstractEntity();
180  $extendsAbstractEntity->_setProperty('uid', 123);
181  $view = new ‪StandaloneView();
182  $view->assign('object', $extendsAbstractEntity);
183  $view->setTemplateSource('<f:form fieldNamePrefix="prefix" objectName="myObjectName" object="{object}" />');
184  $expected = '<form action="" method="post">
185 <div>
186 <input type="hidden" name="prefix[myObjectName][__identity]" value="123" />
187 
188 <input type="hidden" name="prefix[__referrer][@extension]" value="extensionName" />
189 <input type="hidden" name="prefix[__referrer][@controller]" value="controllerName" />
190 <input type="hidden" name="prefix[__referrer][@action]" value="controllerActionName" />
191 <input type="hidden" name="prefix[__referrer][arguments]" value="YTowOnt97e22094095b617b0604f3fe5b48446b0dfa46c8c" />
192 <input type="hidden" name="prefix[__referrer][@request]" value="{&quot;@extension&quot;:&quot;extensionName&quot;,&quot;@controller&quot;:&quot;controllerName&quot;,&quot;@action&quot;:&quot;controllerActionName&quot;}a85f8e01ed64daa6bd0910d3c3fafe3519eed791" />
193 <input type="hidden" name="prefix[__trustedProperties]" value="{&quot;myObjectName&quot;:{&quot;__identity&quot;:1}}c5603abb8f2ebaef799efd6ba9f46ea7edc650ea" />
194 </div>
195 </form>';
196  self::assertSame($expected, $view->render());
197  }
198 }
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\renderWrapsHiddenFieldsWithDivForXhtmlCompatibilityWithRewrittenPropertyMapper
‪renderWrapsHiddenFieldsWithDivForXhtmlCompatibilityWithRewrittenPropertyMapper()
Definition: FormViewHelperTest.php:141
‪TYPO3\CMS\Fluid\Tests\Functional\Fixtures\ViewHelpers\ExtendsAbstractEntity
Definition: ExtendsAbstractEntity.php:22
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\renderHiddenIdentityFieldReturnsAHiddenInputFieldContainingTheObjectsUID
‪renderHiddenIdentityFieldReturnsAHiddenInputFieldContainingTheObjectsUID()
Definition: FormViewHelperTest.php:88
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\isRenderedDataProvider
‪isRenderedDataProvider()
Definition: FormViewHelperTest.php:30
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\renderWrapsHiddenFieldsWithDivAndAnAdditionalClassForXhtmlCompatibilityWithRewrittenPropertyMapper
‪renderWrapsHiddenFieldsWithDivAndAnAdditionalClassForXhtmlCompatibilityWithRewrittenPropertyMapper()
Definition: FormViewHelperTest.php:155
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\nameArgumentIsUsedFormHiddenIdentityName
‪nameArgumentIsUsedFormHiddenIdentityName()
Definition: FormViewHelperTest.php:113
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\objectNameArgumentOverrulesNameArgument
‪objectNameArgumentOverrulesNameArgument()
Definition: FormViewHelperTest.php:127
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:37
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\setFormActionUriRespectsOverriddenArgument
‪setFormActionUriRespectsOverriddenArgument()
Definition: FormViewHelperTest.php:102
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest
Definition: FormViewHelperTest.php:29
‪TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters
Definition: ExtbaseRequestParameters.php:33
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\isRendered
‪isRendered(string $source, array $variables, string $expectation)
Definition: FormViewHelperTest.php:72
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:39
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\FormViewHelperTest\renderHiddenReferrerFieldsAddCurrentControllerAndActionAsHiddenFields
‪renderHiddenReferrerFieldsAddCurrentControllerAndActionAsHiddenFields()
Definition: FormViewHelperTest.php:169