2 declare(strict_types = 1);
22 use TYPO3\TestingFramework\Fluid\Unit\ViewHelpers\ViewHelperBaseTestcase;
23 use TYPO3Fluid\Fluid\Core\ViewHelper\TagBuilder;
24 use TYPO3Fluid\Fluid\Core\ViewHelper\ViewHelperInterface;
41 protected function setUp()
44 $this->mockExtensionService = $this->createMock(ExtensionService::class);
45 $this->mockConfigurationManager = $this->createMock(ConfigurationManagerInterface::class);
46 $this->tagBuilder = $this->createMock(TagBuilder::class);
54 $viewHelper = $this->getMockBuilder(FormViewHelper::class)
55 ->setMethods([
'registerTagAttribute',
'registerUniversalTagAttributes'])
57 $viewHelper->expects($this->at(0))->method(
'registerTagAttribute')->with(
'enctype',
'string', $this->anything());
58 $viewHelper->expects($this->at(1))->method(
'registerTagAttribute')->with(
'method',
'string', $this->anything());
59 $viewHelper->expects($this->at(2))->method(
'registerTagAttribute')->with(
'name',
'string', $this->anything());
60 $viewHelper->expects($this->at(3))->method(
'registerTagAttribute')->with(
'onreset',
'string', $this->anything());
61 $viewHelper->expects($this->at(4))->method(
'registerTagAttribute')->with(
'onsubmit',
'string', $this->anything());
62 $viewHelper->expects($this->at(6))->method(
'registerTagAttribute')->with(
'novalidate',
'bool', $this->anything());
63 $viewHelper->expects($this->once())->method(
'registerUniversalTagAttributes');
64 $viewHelper->initializeArguments();
72 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'hasArgument']);
73 $viewHelper->expects($this->once())->method(
'hasArgument')->with(
'actionUri')->willReturn(
true);
74 $tagBuilder = $this->getMockBuilder(TagBuilder::class)
75 ->setMethods([
'addAttribute'])
77 $tagBuilder->expects($this->once())->method(
'addAttribute')->with(
'action',
'foobar');
78 $viewHelper->_set(
'tag', $tagBuilder);
79 $viewHelper->setArguments([
'actionUri' =>
'foobar']);
80 $this->callInaccessibleMethod($viewHelper,
'setFormActionUri');
88 $viewHelper->_set(
'configurationManager', $this->mockConfigurationManager);
89 parent::injectDependenciesIntoViewHelper($viewHelper);
90 $hashService = $this->getMockBuilder(HashService::class)
91 ->setMethods([
'appendHmac'])
93 $hashService->expects($this->any())->method(
'appendHmac')->will($this->returnValue(
''));
94 $this->mvcPropertyMapperConfigurationService->_set(
'hashService', $hashService);
95 $viewHelper->_set(
'mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
96 $viewHelper->_set(
'hashService', $hashService);
104 $formObject = new \stdClass();
105 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderHiddenIdentityField',
'renderAdditionalIdentityFields',
'renderHiddenReferrerFields',
'renderHiddenSecuredReferrerField',
'renderRequestHashField',
'addFormObjectNameToViewHelperVariableContainer',
'addFieldNamePrefixToViewHelperVariableContainer',
'removeFormObjectNameFromViewHelperVariableContainer',
'removeFieldNamePrefixFromViewHelperVariableContainer',
'addFormFieldNamesToViewHelperVariableContainer',
'removeFormFieldNamesFromViewHelperVariableContainer',
'renderTrustedPropertiesField'], [],
'',
false);
107 $viewHelper->setArguments([
'object' => $formObject]);
108 $this->viewHelperVariableContainer->add(FormViewHelper::class,
'formObject', $formObject);
109 $this->viewHelperVariableContainer->add(FormViewHelper::class,
'additionalIdentityProperties', []);
110 $this->viewHelperVariableContainer->remove(FormViewHelper::class,
'formObject');
111 $this->viewHelperVariableContainer->remove(FormViewHelper::class,
'additionalIdentityProperties');
112 $viewHelper->_set(
'tag', $this->tagBuilder);
113 $viewHelper->render();
121 $objectName =
'someObjectName';
122 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderHiddenIdentityField',
'renderHiddenReferrerFields',
'renderHiddenSecuredReferrerField',
'renderRequestHashField',
'addFormObjectToViewHelperVariableContainer',
'addFieldNamePrefixToViewHelperVariableContainer',
'removeFormObjectFromViewHelperVariableContainer',
'removeFieldNamePrefixFromViewHelperVariableContainer',
'addFormFieldNamesToViewHelperVariableContainer',
'removeFormFieldNamesFromViewHelperVariableContainer',
'renderTrustedPropertiesField'], [],
'',
false);
124 $viewHelper->setArguments([
'name' => $objectName]);
125 $this->viewHelperVariableContainer->add(FormViewHelper::class,
'formObjectName', $objectName);
126 $this->viewHelperVariableContainer->remove(FormViewHelper::class,
'formObjectName');
127 $viewHelper->_set(
'tag', $this->tagBuilder);
128 $viewHelper->render();
136 $objectName =
'someObjectName';
137 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderHiddenIdentityField',
'renderHiddenReferrerFields',
'renderRequestHashField',
'addFormObjectToViewHelperVariableContainer',
'addFieldNamePrefixToViewHelperVariableContainer',
'removeFormObjectFromViewHelperVariableContainer',
'removeFieldNamePrefixFromViewHelperVariableContainer',
'addFormFieldNamesToViewHelperVariableContainer',
'removeFormFieldNamesFromViewHelperVariableContainer',
'renderTrustedPropertiesField'], [],
'',
false);
139 $viewHelper->setArguments([
'name' =>
'formName',
'objectName' => $objectName]);
140 $this->viewHelperVariableContainer->add(FormViewHelper::class,
'formObjectName', $objectName);
141 $this->viewHelperVariableContainer->remove(FormViewHelper::class,
'formObjectName');
142 $viewHelper->_set(
'tag', $this->tagBuilder);
143 $viewHelper->render();
151 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderRequestHashField',
'renderHiddenReferrerFields',
'renderTrustedPropertiesField'], [],
'',
false);
152 $viewHelper->expects($this->once())->method(
'renderHiddenReferrerFields');
154 $viewHelper->_set(
'tag', $this->tagBuilder);
155 $viewHelper->render();
163 $object = new \stdClass();
164 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderRequestHashField',
'renderHiddenReferrerFields',
'renderHiddenIdentityField',
'getFormObjectName',
'renderTrustedPropertiesField'], [],
'',
false);
166 $viewHelper->setArguments([
'object' => $object]);
167 $viewHelper->expects($this->atLeastOnce())->method(
'getFormObjectName')->will($this->returnValue(
'MyName'));
168 $viewHelper->expects($this->once())->method(
'renderHiddenIdentityField')->with($object,
'MyName');
169 $viewHelper->_set(
'tag', $this->tagBuilder);
170 $viewHelper->render();
178 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderRequestHashField',
'renderHiddenReferrerFields',
'renderAdditionalIdentityFields',
'renderTrustedPropertiesField'], [],
'',
false);
179 $viewHelper->expects($this->once())->method(
'renderAdditionalIdentityFields');
181 $viewHelper->_set(
'tag', $this->tagBuilder);
182 $viewHelper->render();
190 $viewHelper = $this->getAccessibleMock($this->buildAccessibleProxy(FormViewHelper::class), [
'renderChildren',
'renderHiddenIdentityField',
'renderAdditionalIdentityFields',
'renderHiddenReferrerFields',
'renderHiddenSecuredReferrerField',
'renderTrustedPropertiesField'], [],
'',
false);
191 $this->mvcPropertyMapperConfigurationService->_set(
'hashService',
new HashService());
192 $viewHelper->_set(
'mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
193 parent::injectDependenciesIntoViewHelper($viewHelper);
194 $viewHelper->expects($this->once())->method(
'renderHiddenIdentityField')->will($this->returnValue(
'hiddenIdentityField'));
195 $viewHelper->expects($this->once())->method(
'renderAdditionalIdentityFields')->will($this->returnValue(
'additionalIdentityFields'));
196 $viewHelper->expects($this->once())->method(
'renderHiddenReferrerFields')->will($this->returnValue(
'hiddenReferrerFields'));
197 $viewHelper->expects($this->once())->method(
'renderChildren')->will($this->returnValue(
'formContent'));
198 $expectedResult = \chr(10) .
'<div>' .
'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFields' . \chr(10) .
'</div>' . \chr(10) .
'formContent';
199 $this->tagBuilder->expects($this->once())->method(
'setContent')->with($expectedResult);
200 $viewHelper->_set(
'tag', $this->tagBuilder);
201 $viewHelper->render();
209 $viewHelper = $this->getMockBuilder($this->buildAccessibleProxy(FormViewHelper::class))
210 ->setMethods([
'renderChildren',
'renderHiddenIdentityField',
'renderAdditionalIdentityFields',
'renderHiddenReferrerFields',
'renderHiddenSecuredReferrerField',
'renderTrustedPropertiesField'])
211 ->disableOriginalConstructor()
213 $this->mvcPropertyMapperConfigurationService->_set(
'hashService',
new HashService());
214 $viewHelper->_set(
'mvcPropertyMapperConfigurationService', $this->mvcPropertyMapperConfigurationService);
215 parent::injectDependenciesIntoViewHelper($viewHelper);
216 $viewHelper->expects($this->once())->method(
'renderHiddenIdentityField')->will($this->returnValue(
'hiddenIdentityField'));
217 $viewHelper->expects($this->once())->method(
'renderAdditionalIdentityFields')->will($this->returnValue(
'additionalIdentityFields'));
218 $viewHelper->expects($this->once())->method(
'renderHiddenReferrerFields')->will($this->returnValue(
'hiddenReferrerFields'));
219 $viewHelper->expects($this->once())->method(
'renderChildren')->will($this->returnValue(
'formContent'));
220 $expectedResult = \chr(10) .
'<div class="hidden">' .
'hiddenIdentityFieldadditionalIdentityFieldshiddenReferrerFields' . \chr(10) .
'</div>' . \chr(10) .
'formContent';
221 $this->tagBuilder->expects($this->once())->method(
'setContent')->with($expectedResult);
222 $viewHelper->setArguments([
'hiddenFieldClassName' =>
'hidden']);
223 $viewHelper->_set(
'tag', $this->tagBuilder);
224 $viewHelper->render();
232 $identityProperties = [
233 'object1[object2]' =>
'<input type="hidden" name="object1[object2][__identity]" value="42" />',
234 'object1[object2][subobject]' =>
'<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />'
236 $this->viewHelperVariableContainer->exists(FormViewHelper::class,
'additionalIdentityProperties')->willReturn(
true);
237 $this->viewHelperVariableContainer->get(FormViewHelper::class,
'additionalIdentityProperties')->willReturn($identityProperties);
238 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren'], [],
'',
false);
240 $expected = \chr(10) .
'<input type="hidden" name="object1[object2][__identity]" value="42" />' . \chr(10) .
'<input type="hidden" name="object1[object2][subobject][__identity]" value="21" />';
241 $actual = $viewHelper->_call(
'renderAdditionalIdentityFields');
242 $viewHelper->_set(
'tag', $this->tagBuilder);
243 $this->assertEquals($expected, $actual);
251 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'dummy'], [],
'',
false);
253 $this->request->getControllerExtensionName()->willReturn(
'extensionName');
254 $this->request->getControllerName()->willReturn(
'controllerName');
255 $this->request->getControllerActionName()->willReturn(
'controllerActionName');
256 $this->request->getControllerVendorName()->willReturn(
'controllerVendorName');
257 $this->request->getArguments()->willReturn([]);
258 $hiddenFields = $viewHelper->_call(
'renderHiddenReferrerFields');
259 $expectedResult = \chr(10) .
'<input type="hidden" name="__referrer[@extension]" value="extensionName" />'
260 . \chr(10) .
'<input type="hidden" name="__referrer[@vendor]" value="controllerVendorName" />'
261 . \chr(10) .
'<input type="hidden" name="__referrer[@controller]" value="controllerName" />'
262 . \chr(10) .
'<input type="hidden" name="__referrer[@action]" value="controllerActionName" />'
263 . \chr(10) .
'<input type="hidden" name="__referrer[arguments]" value="" />'
264 . \chr(10) .
'<input type="hidden" name="__referrer[@request]" value="" />' . \chr(10);
265 $viewHelper->_set(
'tag', $this->tagBuilder);
266 $this->assertEquals($expectedResult, $hiddenFields);
274 $prefix =
'somePrefix';
275 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderHiddenIdentityField',
'renderHiddenReferrerFields',
'renderRequestHashField',
'addFormFieldNamesToViewHelperVariableContainer',
'removeFormFieldNamesFromViewHelperVariableContainer',
'renderTrustedPropertiesField'], [],
'',
false);
277 $viewHelper->setArguments([
'fieldNamePrefix' => $prefix]);
278 $this->viewHelperVariableContainer->add(FormViewHelper::class,
'fieldNamePrefix', $prefix);
279 $this->viewHelperVariableContainer->remove(FormViewHelper::class,
'fieldNamePrefix');
280 $viewHelper->_set(
'tag', $this->tagBuilder);
281 $viewHelper->render();
289 $expectedPrefix =
'tx_someextension_someplugin';
290 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'renderChildren',
'renderHiddenIdentityField',
'renderHiddenReferrerFields',
'renderRequestHashField',
'addFormFieldNamesToViewHelperVariableContainer',
'removeFormFieldNamesFromViewHelperVariableContainer',
'renderTrustedPropertiesField'], [],
'',
false);
291 $this->mockExtensionService->expects($this->once())->method(
'getPluginNamespace')->with(
'SomeExtension',
'SomePlugin')->will($this->returnValue(
'tx_someextension_someplugin'));
292 $viewHelper->_set(
'extensionService', $this->mockExtensionService);
294 $viewHelper->setArguments([
'extensionName' =>
'SomeExtension',
'pluginName' =>
'SomePlugin']);
295 $this->viewHelperVariableContainer->add(FormViewHelper::class,
'fieldNamePrefix', $expectedPrefix);
296 $this->viewHelperVariableContainer->remove(FormViewHelper::class,
'fieldNamePrefix');
297 $viewHelper->_set(
'tag', $this->tagBuilder);
298 $viewHelper->render();
344 $viewHelper = $this->getAccessibleMock(FormViewHelper::class, [
'dummy'], [],
'',
false);
346 $viewHelper->_callRef(
'postProcessUriArgumentsForRequestHash', $arguments, $results);
347 $this->assertEquals($expectedResults, $results);