TYPO3 CMS  TYPO3_6-2
All Classes Namespaces Files Functions Variables Pages
FormViewHelperTest.php
Go to the documentation of this file.
1 <?php
3 
4 /* *
5  * This script is backported from the FLOW3 package "TYPO3.Fluid". *
6  * *
7  * It is free software; you can redistribute it and/or modify it under *
8  * the terms of the GNU General Public License as published by the Free *
9  * Software Foundation, either version 3 of the License, or (at your *
10  * *
11  * *
12  * This script is distributed in the hope that it will be useful, but *
13  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- *
14  * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
15  * Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with the script. *
19  * If not, see http://www.gnu.org/licenses/gpl.html *
20  * *
21  * The TYPO3 project - inspiring people to share! *
22  * */
23 
28 
33 
38 
39  public function setUp() {
40  parent::setUp();
41  $this->mockExtensionService = $this->getMock('TYPO3\\CMS\\Extbase\\Service\\ExtensionService');
42  $this->mockConfigurationManager = $this->getMock('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManagerInterface');
43  }
44 
49  protected function injectDependenciesIntoViewHelper(\TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper $viewHelper) {
50  $viewHelper->_set('configurationManager', $this->mockConfigurationManager);
51  parent::injectDependenciesIntoViewHelper($viewHelper);
52  $this->mvcPropertyMapperConfigurationService->_set('hashService', new \TYPO3\CMS\Extbase\Security\Cryptography\HashService());
53  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
54  }
55 
60  $formObject = new \stdClass();
61  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderRequestHashField', 'addFormObjectNameToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectNameFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', FALSE);
62  $this->injectDependenciesIntoViewHelper($viewHelper);
63  $viewHelper->setArguments(array('object' => $formObject));
64  $this->viewHelperVariableContainer->expects($this->at(0))->method('add')->with('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'formObject', $formObject);
65  $this->viewHelperVariableContainer->expects($this->at(1))->method('add')->with('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'additionalIdentityProperties', array());
66  $this->viewHelperVariableContainer->expects($this->at(2))->method('remove')->with('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'formObject');
67  $this->viewHelperVariableContainer->expects($this->at(3))->method('remove')->with('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'additionalIdentityProperties');
68  $viewHelper->render();
69  }
70 
75  $objectName = 'someObjectName';
76  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderRequestHashField', 'addFormObjectToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', FALSE);
77  $this->injectDependenciesIntoViewHelper($viewHelper);
78  $viewHelper->setArguments(array('name' => $objectName));
79  $this->viewHelperVariableContainer->add('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
80  'formObjectName', $objectName);
81  $this->viewHelperVariableContainer->remove('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'formObjectName');
82  $viewHelper->_set('tag', $this->tagBuilder);
83  $viewHelper->render();
84  }
85 
90  $objectName = 'someObjectName';
91  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderRequestHashField', 'addFormObjectToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', FALSE);
92  $this->injectDependenciesIntoViewHelper($viewHelper);
93  $viewHelper->setArguments(array('name' => 'formName', 'objectName' => $objectName));
94  $this->viewHelperVariableContainer->add('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
95  'formObjectName', $objectName);
96  $this->viewHelperVariableContainer->remove('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'formObjectName');
97  $viewHelper->_set('tag', $this->tagBuilder);
98  $viewHelper->render();
99  }
100 
105  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderRequestHashField', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderTrustedPropertiesField'), array(), '', FALSE);
106  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields');
107  $this->injectDependenciesIntoViewHelper($viewHelper);
108  $viewHelper->render();
109  }
110 
115  $object = new \stdClass();
116  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderRequestHashField', 'renderHiddenIdentityField', 'getFormObjectName', 'renderTrustedPropertiesField'), array(), '', FALSE);
117  $this->injectDependenciesIntoViewHelper($viewHelper);
118  $hashService = $this->getMock('TYPO3\\CMS\\Extbase\\Security\\Cryptography\\HashService', array('generateHmac'));
119  $hashService->expects($this->any())->method('generateHmac')->willReturn('');
120  $viewHelper->_set('hashService', $hashService);
121  $viewHelper->setArguments(array('object' => $object));
122  $viewHelper->expects($this->atLeastOnce())->method('getFormObjectName')->will($this->returnValue('MyName'));
123  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->with($object, 'MyName');
124  $viewHelper->render();
125  }
126 
131  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderRequestHashField', 'renderAdditionalIdentityFields', 'renderTrustedPropertiesField'), array(), '', FALSE);
132  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields');
133  $this->injectDependenciesIntoViewHelper($viewHelper);
134  $hashService = $this->getMock('TYPO3\\CMS\\Extbase\\Security\\Cryptography\\HashService', array('generateHmac'));
135  $hashService->expects($this->any())->method('generateHmac')->willReturn('');
136  $viewHelper->_set('hashService', $hashService);
137  $viewHelper->render();
138  }
139 
144  $viewHelper = $this->getAccessibleMock($this->buildAccessibleProxy('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper'), array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderRequestHashField'), array(), '', FALSE);
145  $configurationManager = $this->getMock('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager', array('isFeatureEnabled'));
146  $configurationManager->expects($this->once())->method('isFeatureEnabled')->with('rewrittenPropertyMapper')->will($this->returnValue(FALSE));
147  $viewHelper->_set('configurationManager', $configurationManager);
148  $this->mvcPropertyMapperConfigurationService->_set('hashService', new \TYPO3\CMS\Extbase\Security\Cryptography\HashService());
149  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
150  parent::injectDependenciesIntoViewHelper($viewHelper);
151  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->will($this->returnValue('hiddenIdentityField'));
152  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields')->will($this->returnValue('additionalIdentityFields'));
153  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields')->will($this->returnValue('hiddenReferrerFields'));
154  $viewHelper->expects($this->once())->method('renderRequestHashField')->will($this->returnValue('requestHashField'));
155  $viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('formContent'));
156  $expectedResult = chr(10) . '<div>' . 'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFieldsrequestHashField' . chr(10) . '</div>' . chr(10) . 'formContent';
157  $this->tagBuilder->expects($this->once())->method('setContent')->with($expectedResult);
158  $viewHelper->render();
159  }
160 
165  $viewHelper = $this->getAccessibleMock($this->buildAccessibleProxy('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper'), array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderTrustedPropertiesField'), array(), '', FALSE);
166  $configurationManager = $this->getMock('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager', array('isFeatureEnabled'));
167  $configurationManager->expects($this->once())->method('isFeatureEnabled')->with('rewrittenPropertyMapper')->will($this->returnValue(TRUE));
168  $viewHelper->_set('configurationManager', $configurationManager);
169  $this->mvcPropertyMapperConfigurationService->_set('hashService', new \TYPO3\CMS\Extbase\Security\Cryptography\HashService());
170  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
171  parent::injectDependenciesIntoViewHelper($viewHelper);
172  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->will($this->returnValue('hiddenIdentityField'));
173  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields')->will($this->returnValue('additionalIdentityFields'));
174  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields')->will($this->returnValue('hiddenReferrerFields'));
175  $viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('formContent'));
176  $expectedResult = chr(10) . '<div>' . 'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFields' . chr(10) . '</div>' . chr(10) . 'formContent';
177  $this->tagBuilder->expects($this->once())->method('setContent')->with($expectedResult);
178  $viewHelper->render();
179  }
180 
185  $viewHelper = $this->getMock($this->buildAccessibleProxy('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper'), array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderTrustedPropertiesField'), array(), '', FALSE);
186  $configurationManager = $this->getMock('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager', array('isFeatureEnabled'));
187  $configurationManager->expects($this->once())->method('isFeatureEnabled')->with('rewrittenPropertyMapper')->will($this->returnValue(TRUE));
188  $viewHelper->_set('configurationManager', $configurationManager);
189  $this->mvcPropertyMapperConfigurationService->_set('hashService', new \TYPO3\CMS\Extbase\Security\Cryptography\HashService());
190  $viewHelper->_set('mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
191  parent::injectDependenciesIntoViewHelper($viewHelper);
192  $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->will($this->returnValue('hiddenIdentityField'));
193  $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields')->will($this->returnValue('additionalIdentityFields'));
194  $viewHelper->expects($this->once())->method('renderHiddenReferrerFields')->will($this->returnValue('hiddenReferrerFields'));
195  $viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('formContent'));
196  $expectedResult = chr(10) . '<div class="hidden">' . 'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFields' . chr(10) . '</div>' . chr(10) . 'formContent';
197  $this->tagBuilder->expects($this->once())->method('setContent')->with($expectedResult);
198  $viewHelper->setArguments(array('hiddenFieldClassName' => 'hidden'));
199  $viewHelper->render();
200  }
201 
206  $identityProperties = array(
207  'object1[object2]' => '<input type="hidden" name="object1[object2][__identity]" value="42" />',
208  'object1[object2][subobject]' => '<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />'
209  );
210  $this->viewHelperVariableContainer->expects($this->once())->method('exists')->with('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'additionalIdentityProperties')->will($this->returnValue(TRUE));
211  $this->viewHelperVariableContainer->expects($this->once())->method('get')->with('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'additionalIdentityProperties')->will($this->returnValue($identityProperties));
212  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren'), array(), '', FALSE);
213  $this->injectDependenciesIntoViewHelper($viewHelper);
214  $expected = chr(10) . '<input type="hidden" name="object1[object2][__identity]" value="42" />' . chr(10) . '<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />';
215  $actual = $viewHelper->_call('renderAdditionalIdentityFields');
216  $this->assertEquals($expected, $actual);
217  }
218 
223  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('dummy'), array(), '', FALSE);
224  $this->injectDependenciesIntoViewHelper($viewHelper);
225  $hashService = $this->getMock('TYPO3\\CMS\\Extbase\\Security\\Cryptography\\HashService', array('appendHmac'));
226  $hashService->expects($this->any())->method('appendHmac')->willReturn('');
227  $viewHelper->_set('hashService', $hashService);
228  $this->request->expects($this->atLeastOnce())->method('getControllerExtensionName')->will($this->returnValue('extensionName'));
229  $this->request->expects($this->never())->method('getControllerSubextensionName');
230  $this->request->expects($this->atLeastOnce())->method('getControllerName')->will($this->returnValue('controllerName'));
231  $this->request->expects($this->atLeastOnce())->method('getControllerActionName')->will($this->returnValue('controllerActionName'));
232  $hiddenFields = $viewHelper->_call('renderHiddenReferrerFields');
233  $expectedResult = chr(10) . '<input type="hidden" name="__referrer[extensionName]" value="extensionName" />'
234  . chr(10) . '<input type="hidden" name="__referrer[controllerName]" value="controllerName" />'
235  . chr(10) . '<input type="hidden" name="__referrer[actionName]" value="controllerActionName" />'
236  . chr(10) . '<input type="hidden" name="__referrer[@request]" value="" />' . chr(10);
237  $this->assertEquals($expectedResult, $hiddenFields);
238  }
239 
244  $prefix = 'somePrefix';
245  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderRequestHashField', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', FALSE);
246  $this->injectDependenciesIntoViewHelper($viewHelper);
247  $viewHelper->setArguments(array('fieldNamePrefix' => $prefix));
248  $this->viewHelperVariableContainer->add('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
249  'fieldNamePrefix', $prefix);
250  $this->viewHelperVariableContainer->remove('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'fieldNamePrefix');
251  $viewHelper->_set('tag', $this->tagBuilder);
252  $viewHelper->render();
253  }
254 
259  $expectedPrefix = 'tx_someextension_someplugin';
260  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderHiddenSecuredReferrerField', 'renderRequestHashField', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer', 'renderTrustedPropertiesField'), array(), '', FALSE);
261  $this->mockExtensionService->expects($this->once())->method('getPluginNamespace')->with('SomeExtension', 'SomePlugin')->will($this->returnValue('tx_someextension_someplugin'));
262  $viewHelper->_set('extensionService', $this->mockExtensionService);
263  $this->injectDependenciesIntoViewHelper($viewHelper);
264  $viewHelper->setArguments(array('extensionName' => 'SomeExtension', 'pluginName' => 'SomePlugin'));
265  $this->viewHelperVariableContainer->add('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper',
266  'fieldNamePrefix', $expectedPrefix);
267  $this->viewHelperVariableContainer->remove('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', 'fieldNamePrefix');
268  $viewHelper->_set('tag', $this->tagBuilder);
269  $viewHelper->render();
270  }
271 
276  return array(
277  // simple values
278  array(
279  array(
280  'bla' => 'X',
281  'blubb' => 'Y'
282  ),
283  array(
284  'bla',
285  'blubb'
286  )
287  ),
288  // Arrays
289  array(
290  array(
291  'bla' => array(
292  'test1' => 'X',
293  'test2' => 'Y'
294  ),
295  'blubb' => 'Y'
296  ),
297  array(
298  'bla[test1]',
299  'bla[test2]',
300  'blubb'
301  )
302  )
303  );
304  }
305 
310  public function postProcessUriArgumentsForRequestHashWorks($arguments, $expectedResults) {
311  $viewHelper = $this->getAccessibleMock('TYPO3\\CMS\\Fluid\\ViewHelpers\\FormViewHelper', array('dummy'), array(), '', FALSE);
312  $results = array();
313  $viewHelper->_callRef('postProcessUriArgumentsForRequestHash', $arguments, $results);
314  $this->assertEquals($expectedResults, $results);
315  }
316 }
injectDependenciesIntoViewHelper(\TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper $viewHelper)
getAccessibleMock( $originalClassName, array $methods=array(), array $arguments=array(), $mockClassName='', $callOriginalConstructor=TRUE, $callOriginalClone=TRUE, $callAutoload=TRUE)
postProcessUriArgumentsForRequestHashWorks($arguments, $expectedResults)