TYPO3  7.6
FormViewHelperTest.php
Go to the documentation of this file.
1 <?php
2 
3 namespace TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers;
4 
5 /* *
6  * This script is backported from the FLOW3 package "TYPO3.Fluid". *
7  * *
8  * It is free software; you can redistribute it and/or modify it under *
9  * the terms of the GNU General Public License as published by the Free *
10  * Software Foundation, either version 3 of the License, or (at your *
11  * *
12  * *
13  * This script is distributed in the hope that it will be useful, but *
14  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- *
15  * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
16  * Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with the script. *
20  * If not, see http://www.gnu.org/licenses/gpl.html *
21  * *
22  * The TYPO3 project - inspiring people to share! *
23  * */
24 
25 
30 {
35 
40 
41  protected function setUp()
42  {
43  parent::setUp();
44  $this->mockExtensionService = $this->getMock(\TYPO3\CMS\Extbase\Service\ExtensionService::class);
45  $this->mockConfigurationManager = $this->getMock(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::class);
46  }
47 
52  protected function injectDependenciesIntoViewHelper(\TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper $viewHelper)
53  {
54  $viewHelper->_set('configurationManager', $this->mockConfigurationManager);
55  parent::injectDependenciesIntoViewHelper($viewHelper);
56  $hashService = $this->getMock(\TYPO3\CMS\Extbase\Security\Cryptography\HashService::class, array('appendHmac'));
57  $hashService->expects($this->any())->method('appendHmac')->will($this->returnValue(''));
58  $this->mvcPropertyMapperConfigurationService->_set('hashService', $hashService);
59  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
60  $viewHelper->_set('hashService', $hashService);
61  }
62 
67  {
68  $formObject = new \stdClass();
69  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormObjectNameToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectNameFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', false);
70  $this->injectDependenciesIntoViewHelper($viewHelper);
71  $viewHelper->setArguments(array('object' => $formObject));
72  $this->viewHelperVariableContainer->expects($this->at(0))->method('add')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObject', $formObject);
73  $this->viewHelperVariableContainer->expects($this->at(1))->method('add')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'additionalIdentityProperties', array());
74  $this->viewHelperVariableContainer->expects($this->at(2))->method('remove')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObject');
75  $this->viewHelperVariableContainer->expects($this->at(3))->method('remove')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'additionalIdentityProperties');
76  $viewHelper->render();
77  }
78 
83  {
84  $objectName = 'someObjectName';
85  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormObjectToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', false);
86  $this->injectDependenciesIntoViewHelper($viewHelper);
87  $viewHelper->setArguments(array('name' => $objectName));
88  $this->viewHelperVariableContainer->expects($this->once())->method('add')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObjectName', $objectName);
89  $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObjectName');
90  $viewHelper->render();
91  }
92 
97  {
98  $objectName = 'someObjectName';
99  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormObjectToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', false);
100  $this->injectDependenciesIntoViewHelper($viewHelper);
101  $viewHelper->setArguments(array('name' => 'formName', 'objectName' => $objectName));
102  $this->viewHelperVariableContainer->expects($this->once())->method('add')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObjectName', $objectName);
103  $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObjectName');
104  $viewHelper->render();
105  }
106 
111  {
112  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderRequestHashField', 'renderHiddenReferrerFields', 'renderTrustedPropertiesField'), array(), '', false);
113  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields');
114  $this->injectDependenciesIntoViewHelper($viewHelper);
115  $viewHelper->render();
116  }
117 
122  {
123  $object = new \stdClass();
124  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderRequestHashField', 'renderHiddenReferrerFields', 'renderHiddenIdentityField', 'getFormObjectName', 'renderTrustedPropertiesField'), array(), '', false);
125  $this->injectDependenciesIntoViewHelper($viewHelper);
126  $viewHelper->setArguments(array('object' => $object));
127  $viewHelper->expects($this->atLeastOnce())->method('getFormObjectName')->will($this->returnValue('MyName'));
128  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->with($object, 'MyName');
129  $viewHelper->render();
130  }
131 
136  {
137  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderRequestHashField', 'renderHiddenReferrerFields', 'renderAdditionalIdentityFields', 'renderTrustedPropertiesField'), array(), '', false);
138  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields');
139  $this->injectDependenciesIntoViewHelper($viewHelper);
140  $viewHelper->render();
141  }
142 
147  {
148  $viewHelper = $this->getAccessibleMock($this->buildAccessibleProxy(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class), array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderTrustedPropertiesField'), array(), '', false);
149  $this->mvcPropertyMapperConfigurationService->_set('hashService', new \TYPO3\CMS\Extbase\Security\Cryptography\HashService());
150  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
151  parent::injectDependenciesIntoViewHelper($viewHelper);
152  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->will($this->returnValue('hiddenIdentityField'));
153  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields')->will($this->returnValue('additionalIdentityFields'));
154  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields')->will($this->returnValue('hiddenReferrerFields'));
155  $viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('formContent'));
156  $expectedResult = chr(10) . '<div>' . 'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFields' . chr(10) . '</div>' . chr(10) . 'formContent';
157  $this->tagBuilder->expects($this->once())->method('setContent')->with($expectedResult);
158  $viewHelper->render();
159  }
160 
165  {
166  $viewHelper = $this->getMock($this->buildAccessibleProxy(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class), array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderTrustedPropertiesField'), array(), '', false);
167  $this->mvcPropertyMapperConfigurationService->_set('hashService', new \TYPO3\CMS\Extbase\Security\Cryptography\HashService());
168  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
169  parent::injectDependenciesIntoViewHelper($viewHelper);
170  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->will($this->returnValue('hiddenIdentityField'));
171  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields')->will($this->returnValue('additionalIdentityFields'));
172  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields')->will($this->returnValue('hiddenReferrerFields'));
173  $viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('formContent'));
174  $expectedResult = chr(10) . '<div class="hidden">' . 'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFields' . chr(10) . '</div>' . chr(10) . 'formContent';
175  $this->tagBuilder->expects($this->once())->method('setContent')->with($expectedResult);
176  $viewHelper->setArguments(array('hiddenFieldClassName' => 'hidden'));
177  $viewHelper->render();
178  }
179 
184  {
185  $identityProperties = array(
186  'object1[object2]' => '<input type="hidden" name="object1[object2][__identity]" value="42" />',
187  'object1[object2][subobject]' => '<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />'
188  );
189  $this->viewHelperVariableContainer->expects($this->once())->method('exists')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'additionalIdentityProperties')->will($this->returnValue(true));
190  $this->viewHelperVariableContainer->expects($this->once())->method('get')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'additionalIdentityProperties')->will($this->returnValue($identityProperties));
191  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren'), array(), '', false);
192  $this->injectDependenciesIntoViewHelper($viewHelper);
193  $expected = chr(10) . '<input type="hidden" name="object1[object2][__identity]" value="42" />' . chr(10) . '<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />';
194  $actual = $viewHelper->_call('renderAdditionalIdentityFields');
195  $this->assertEquals($expected, $actual);
196  }
197 
202  {
203  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('dummy'), array(), '', false);
204  $this->injectDependenciesIntoViewHelper($viewHelper);
205  $this->request->expects($this->atLeastOnce())->method('getControllerExtensionName')->will($this->returnValue('extensionName'));
206  $this->request->expects($this->never())->method('getControllerSubextensionName');
207  $this->request->expects($this->atLeastOnce())->method('getControllerName')->will($this->returnValue('controllerName'));
208  $this->request->expects($this->atLeastOnce())->method('getControllerActionName')->will($this->returnValue('controllerActionName'));
209  $hiddenFields = $viewHelper->_call('renderHiddenReferrerFields');
210  $expectedResult = chr(10) . '<input type="hidden" name="__referrer[@extension]" value="extensionName" />' . chr(10) . '<input type="hidden" name="__referrer[@controller]" value="controllerName" />' . chr(10) . '<input type="hidden" name="__referrer[@action]" value="controllerActionName" />' . chr(10) . '<input type="hidden" name="__referrer[arguments]" value="" />' . chr(10);
211  $this->assertEquals($expectedResult, $hiddenFields);
212  }
213 
218  {
219  $prefix = 'somePrefix';
220  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', false);
221  $this->injectDependenciesIntoViewHelper($viewHelper);
222  $viewHelper->setArguments(array('fieldNamePrefix' => $prefix));
223  $this->viewHelperVariableContainer->expects($this->once())->method('add')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'fieldNamePrefix', $prefix);
224  $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'fieldNamePrefix');
225  $viewHelper->render();
226  }
227 
232  {
233  $expectedPrefix = 'tx_someextension_someplugin';
234  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', false);
235  $this->mockExtensionService->expects($this->once())->method('getPluginNamespace')->with('SomeExtension', 'SomePlugin')->will($this->returnValue('tx_someextension_someplugin'));
236  $viewHelper->_set('extensionService', $this->mockExtensionService);
237  $this->injectDependenciesIntoViewHelper($viewHelper);
238  $viewHelper->setArguments(array('extensionName' => 'SomeExtension', 'pluginName' => 'SomePlugin'));
239  $this->viewHelperVariableContainer->expects($this->once())->method('add')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'fieldNamePrefix', $expectedPrefix);
240  $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'fieldNamePrefix');
241  $viewHelper->render();
242  }
243 
248  {
249  return array(
250  // simple values
251  array(
252  array(
253  'bla' => 'X',
254  'blubb' => 'Y'
255  ),
256  array(
257  'bla',
258  'blubb'
259  )
260  ),
261  // Arrays
262  array(
263  array(
264  'bla' => array(
265  'test1' => 'X',
266  'test2' => 'Y'
267  ),
268  'blubb' => 'Y'
269  ),
270  array(
271  'bla[test1]',
272  'bla[test2]',
273  'blubb'
274  )
275  )
276  );
277  }
278 
283  public function postProcessUriArgumentsForRequestHashWorks($arguments, $expectedResults)
284  {
285  $viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, array('dummy'), array(), '', false);
286  $results = array();
287  $viewHelper->_callRef('postProcessUriArgumentsForRequestHash', $arguments, $results);
288  $this->assertEquals($expectedResults, $results);
289  }
290 }