TYPO3 API  SVNRelease
FormViewHelperTest.php
Go to the documentation of this file.
00001 <?php
00002 
00003 /*                                                                        *
00004  * This script belongs to the FLOW3 package "Fluid".                      *
00005  *                                                                        *
00006  * It is free software; you can redistribute it and/or modify it under    *
00007  * the terms of the GNU General Public License as published by the Free   *
00008  * Software Foundation, either version 3 of the License, or (at your      *
00009  * option) any later version.                                             *
00010  *                                                                        *
00011  * This script is distributed in the hope that it will be useful, but     *
00012  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-    *
00013  * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General      *
00014  * Public License for more details.                                       *
00015  *                                                                        *
00016  * You should have received a copy of the GNU General Public License      *
00017  * along with the script.                                                 *
00018  * If not, see http://www.gnu.org/licenses/gpl.html                       *
00019  *                                                                        *
00020  * The TYPO3 project - inspiring people to share!                         *
00021  *                                                                        */
00022 
00023 /**
00024  */
00025 
00026 require_once(dirname(__FILE__) . '/ViewHelperBaseTestcase.php');
00027 
00028 /**
00029  */
00030 class Tx_Fluid_Tests_Unit_ViewHelpers_FormViewHelperTest extends Tx_Fluid_ViewHelpers_ViewHelperBaseTestcase {
00031     /**
00032      * @test
00033      * @author Sebastian Kurfürst <sebastian@typo3.org>
00034      */
00035     public function renderAddsObjectToViewHelperVariableContainer() {
00036         $formObject = new stdClass();
00037 
00038         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormObjectNameToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectNameFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer'), array(), '', FALSE);
00039         $this->injectDependenciesIntoViewHelper($viewHelper);
00040 
00041         $viewHelper->setArguments(new Tx_Fluid_Core_ViewHelper_Arguments(array('object' => $formObject)));
00042         $this->viewHelperVariableContainer->expects($this->at(0))->method('add')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'formObject', $formObject);
00043         $this->viewHelperVariableContainer->expects($this->at(1))->method('add')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'additionalIdentityProperties', array());
00044         $this->viewHelperVariableContainer->expects($this->at(2))->method('remove')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'formObject');
00045         $this->viewHelperVariableContainer->expects($this->at(3))->method('remove')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'additionalIdentityProperties');
00046         $viewHelper->render();
00047     }
00048 
00049     /**
00050      * @test
00051      * @author Sebastian Kurfürst <sebastian@typo3.org>
00052      * @author Bastian Waidelich <bastian@typo3.org>
00053      */
00054     public function renderAddsObjectNameToTemplateVariableContainer() {
00055         $objectName = 'someObjectName';
00056 
00057         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormObjectToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer'), array(), '', FALSE);
00058         $this->injectDependenciesIntoViewHelper($viewHelper);
00059 
00060         $viewHelper->setArguments(new Tx_Fluid_Core_ViewHelper_Arguments(array('name' => $objectName)));
00061 
00062         $this->viewHelperVariableContainer->expects($this->once())->method('add')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'formObjectName', $objectName);
00063         $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'formObjectName');
00064         $viewHelper->render();
00065     }
00066 
00067     /**
00068      * @test
00069      * @author Bastian Waidelich <bastian@typo3.org>
00070      */
00071     public function formObjectNameArgumentOverrulesNameArgument() {
00072         $objectName = 'someObjectName';
00073 
00074         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormObjectToViewHelperVariableContainer', 'addFieldNamePrefixToViewHelperVariableContainer', 'removeFormObjectFromViewHelperVariableContainer', 'removeFieldNamePrefixFromViewHelperVariableContainer', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer'), array(), '', FALSE);
00075         $this->injectDependenciesIntoViewHelper($viewHelper);
00076 
00077         $viewHelper->setArguments(new Tx_Fluid_Core_ViewHelper_Arguments(array('name' => 'formName', 'objectName' => $objectName)));
00078 
00079         $this->viewHelperVariableContainer->expects($this->once())->method('add')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'formObjectName', $objectName);
00080         $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'formObjectName');
00081         $viewHelper->render();
00082     }
00083 
00084     /**
00085      * @test
00086      * @author Christopher Hlubek <hlubek@networkteam.com>
00087      */
00088     public function renderCallsRenderHiddenReferrerFields() {
00089         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderRequestHashField', 'renderHiddenReferrerFields'), array(), '', FALSE);
00090         $viewHelper->expects($this->once())->method('renderHiddenReferrerFields');
00091         $this->injectDependenciesIntoViewHelper($viewHelper);
00092 
00093         $viewHelper->render();
00094     }
00095 
00096     /**
00097      * @test
00098      * @author Sebastian Kurfürst <sebastian@typo3.org>
00099      * @author Bastian Waidelich <bastian@typo3.org>
00100      */
00101     public function renderCallsRenderHiddenIdentityField() {
00102         $object = new stdClass();
00103         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderRequestHashField', 'renderHiddenIdentityField', 'getFormObjectName'), array(), '', FALSE);
00104         $this->injectDependenciesIntoViewHelper($viewHelper);
00105         $viewHelper->setArguments(new Tx_Fluid_Core_ViewHelper_Arguments(array('object' => $object)));
00106         $viewHelper->expects($this->atLeastOnce())->method('getFormObjectName')->will($this->returnValue('MyName'));
00107         $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->with($object, 'MyName');
00108 
00109         $viewHelper->render();
00110     }
00111 
00112     /**
00113      * @test
00114      * @author Sebastian Kurfürst <sebastian@typo3.org>
00115      */
00116     public function renderCallsRenderAdditionalIdentityFields() {
00117         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderRequestHashField', 'renderAdditionalIdentityFields'), array(), '', FALSE);
00118         $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields');
00119         $this->injectDependenciesIntoViewHelper($viewHelper);
00120 
00121         $viewHelper->render();
00122     }
00123 
00124     /**
00125      * @test
00126      * @author Bastian Waidelich <bastian@typo3.org>
00127      */
00128     public function renderWrapsHiddenFieldsWithDivForXhtmlCompatibility() {
00129         $viewHelper = $this->getMock($this->buildAccessibleProxy('Tx_Fluid_ViewHelpers_FormViewHelper'), array('renderChildren', 'renderHiddenIdentityField', 'renderAdditionalIdentityFields', 'renderHiddenReferrerFields', 'renderRequestHashField'), array(), '', FALSE);
00130         $this->injectDependenciesIntoViewHelper($viewHelper);
00131         $viewHelper->expects($this->once())->method('renderHiddenIdentityField')->will($this->returnValue('hiddenIdentityField'));
00132         $viewHelper->expects($this->once())->method('renderAdditionalIdentityFields')->will($this->returnValue('additionalIdentityFields'));
00133         $viewHelper->expects($this->once())->method('renderHiddenReferrerFields')->will($this->returnValue('hiddenReferrerFields'));
00134         $viewHelper->expects($this->once())->method('renderRequestHashField')->will($this->returnValue('requestHashField'));
00135         $viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('formContent'));
00136 
00137         $expectedResult = chr(10) . '<div style="display: none">' . 'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFieldsrequestHashField' . chr(10) . '</div>' . chr(10) . 'formContent';
00138         $this->tagBuilder->expects($this->once())->method('setContent')->with($expectedResult);
00139 
00140         $viewHelper->render();
00141     }
00142 
00143 
00144     /**
00145      * @test
00146      * @author Sebastian Kurfürst <sebastian@typo3.org>
00147      */
00148     public function renderAdditionalIdentityFieldsFetchesTheFieldsFromViewHelperVariableContainerAndBuildsHiddenFieldsForThem() {
00149         $identityProperties = array(
00150             'object1[object2]' => '<input type="hidden" name="object1[object2][__identity]" value="42" />',
00151             'object1[object2][subobject]' => '<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />'
00152         );
00153         $this->viewHelperVariableContainer->expects($this->once())->method('exists')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'additionalIdentityProperties')->will($this->returnValue(TRUE));
00154         $this->viewHelperVariableContainer->expects($this->once())->method('get')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'additionalIdentityProperties')->will($this->returnValue($identityProperties));
00155         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren'), array(), '', FALSE);
00156         $this->injectDependenciesIntoViewHelper($viewHelper);
00157 
00158         $expected = chr(10) . '<input type="hidden" name="object1[object2][__identity]" value="42" />' . chr(10) .
00159             '<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />';
00160         $actual = $viewHelper->_call('renderAdditionalIdentityFields');
00161         $this->assertEquals($expected, $actual);
00162     }
00163 
00164     /**
00165      * @test
00166      * @author Christopher Hlubek <hlubek@networkteam.com>
00167      */
00168     public function renderHiddenReferrerFieldsAddCurrentControllerAndActionAsHiddenFields() {
00169         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('dummy'), array(), '', FALSE);
00170         $this->injectDependenciesIntoViewHelper($viewHelper);
00171 
00172         $this->request->expects($this->atLeastOnce())->method('getControllerExtensionName')->will($this->returnValue('extensionName'));
00173         $this->request->expects($this->never())->method('getControllerSubextensionName');
00174         $this->request->expects($this->atLeastOnce())->method('getControllerName')->will($this->returnValue('controllerName'));
00175         $this->request->expects($this->atLeastOnce())->method('getControllerActionName')->will($this->returnValue('controllerActionName'));
00176 
00177         $hiddenFields = $viewHelper->_call('renderHiddenReferrerFields');
00178         $expectedResult = chr(10) . '<input type="hidden" name="__referrer[extensionName]" value="extensionName" />' . chr(10) .
00179             '<input type="hidden" name="__referrer[controllerName]" value="controllerName" />' . chr(10) .
00180             '<input type="hidden" name="__referrer[actionName]" value="controllerActionName" />' . chr(10);
00181         $this->assertEquals($expectedResult, $hiddenFields);
00182     }
00183 
00184     /**
00185      * @test
00186      * @author Bastian Waidelich <bastian@typo3.org>
00187      */
00188     public function renderAddsSpecifiedPrefixToTemplateVariableContainer() {
00189         $prefix = 'somePrefix';
00190 
00191         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer'), array(), '', FALSE);
00192         $this->injectDependenciesIntoViewHelper($viewHelper);
00193 
00194         $viewHelper->setArguments(new Tx_Fluid_Core_ViewHelper_Arguments(array('fieldNamePrefix' => $prefix)));
00195 
00196         $this->viewHelperVariableContainer->expects($this->once())->method('add')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'fieldNamePrefix', $prefix);
00197         $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'fieldNamePrefix');
00198         $viewHelper->render();
00199     }
00200 
00201     /**
00202      * @test
00203      * @author Bastian Waidelich <bastian@typo3.org>
00204      */
00205     public function renderAddsDefaultFieldNamePrefixToTemplateVariableContainerIfNoPrefixIsSpecified() {
00206         $expectedPrefix = 'tx_someextension_someplugin';
00207 
00208         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('renderChildren', 'renderHiddenIdentityField', 'renderHiddenReferrerFields', 'renderRequestHashField', 'addFormFieldNamesToViewHelperVariableContainer', 'removeFormFieldNamesFromViewHelperVariableContainer'), array(), '', FALSE);
00209         $this->injectDependenciesIntoViewHelper($viewHelper);
00210 
00211         $viewHelper->setArguments(new Tx_Fluid_Core_ViewHelper_Arguments(array('extensionName' => 'SomeExtension', 'pluginName' => 'SomePlugin')));
00212 
00213         $this->viewHelperVariableContainer->expects($this->once())->method('add')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'fieldNamePrefix', $expectedPrefix);
00214         $this->viewHelperVariableContainer->expects($this->once())->method('remove')->with('Tx_Fluid_ViewHelpers_FormViewHelper', 'fieldNamePrefix');
00215         $viewHelper->render();
00216     }
00217 
00218     /**
00219      * Data Provider for postProcessUriArgumentsForRequestHashWorks
00220      */
00221     public function argumentsForPostProcessUriArgumentsForRequestHash() {
00222         return array(
00223             // simple values
00224             array(
00225                 array(
00226                     'bla' => 'X',
00227                     'blubb' => 'Y'
00228                 ),
00229                 array(
00230                     'bla',
00231                     'blubb'
00232                 )
00233             ),
00234             // Arrays
00235             array(
00236                 array(
00237                     'bla' => array(
00238                         'test1' => 'X',
00239                         'test2' => 'Y'
00240                     ),
00241                     'blubb' => 'Y'
00242                 ),
00243                 array(
00244                     'bla[test1]',
00245                     'bla[test2]',
00246                     'blubb'
00247                 )
00248             )
00249         );
00250     }
00251     /**
00252      * @test
00253      * @author Sebastian Kurfürst <sebastian@typo3.org>
00254      * @dataProvider argumentsForPostProcessUriArgumentsForRequestHash
00255      */
00256     public function postProcessUriArgumentsForRequestHashWorks($arguments, $expectedResults) {
00257         $viewHelper = $this->getAccessibleMock('Tx_Fluid_ViewHelpers_FormViewHelper', array('dummy'), array(), '', FALSE);
00258         $results = array();
00259         $viewHelper->_callRef('postProcessUriArgumentsForRequestHash', $arguments, $results);
00260         $this->assertEquals($expectedResults, $results);
00261     }
00262 }
00263 ?>