‪TYPO3CMS  ‪main
CheckboxViewHelperTest.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 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
29 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
30 use TYPO3Fluid\Fluid\View\TemplateView;
31 
32 final class ‪CheckboxViewHelperTest extends FunctionalTestCase
33 {
34  public static function ‪renderDataProvider(): array
35  {
36  return [
37  'renderCorrectlySetsTagNameAndDefaultAttributes' => [
38  '<f:form.checkbox name="foo" value="" />',
39  '<input type="hidden" name="foo" value="" /><input type="checkbox" name="foo" value="" />',
40  ],
41  'renderSetsCheckedAttributeIfSpecified' => [
42  '<f:form.checkbox name="foo" value="" checked="true" />',
43  '<input type="hidden" name="foo" value="" /><input type="checkbox" name="foo" value="" checked="checked" />',
44  ],
45  ];
46  }
47 
48  #[DataProvider('renderDataProvider')]
49  #[Test]
50  public function ‪render(string $template, string $expected): void
51  {
52  $context = $this->get(RenderingContextFactory::class)->create();
53  $context->getTemplatePaths()->setTemplateSource($template);
54  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
55  $context->setRequest(new ‪Request($serverRequest));
56  self::assertSame($expected, (new TemplateView($context))->‪render());
57  }
58 
59  #[Test]
61  {
62  $formObject = new \stdClass();
63  $formObject->someProperty = false;
64  $context = $this->get(RenderingContextFactory::class)->create();
65  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" checked="true" /></f:form>');
66  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
67  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
68  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
69  $context->setRequest(new ‪Request($serverRequest));
70  $view = new TemplateView($context);
71  $view->assign('formObject', $formObject);
72  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" checked="checked" />', $view->render());
73  }
74 
75  #[Test]
77  {
78  $formObject = new \stdClass();
79  $formObject->someProperty = true;
80  $context = $this->get(RenderingContextFactory::class)->create();
81  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" /></f:form>');
82  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
83  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
84  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
85  $context->setRequest(new ‪Request($serverRequest));
86  $view = new TemplateView($context);
87  $view->assign('formObject', $formObject);
88  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" checked="checked" />', $view->render());
89  }
90 
91  #[Test]
93  {
94  $formObject = new \stdClass();
95  $formObject->someProperty = [];
96  $context = $this->get(RenderingContextFactory::class)->create();
97  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" /></f:form>');
98  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
99  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
100  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
101  $context->setRequest(new ‪Request($serverRequest));
102  $view = new TemplateView($context);
103  $view->assign('formObject', $formObject);
104  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty][]" value="foo" />', $view->render());
105  }
106 
107  #[Test]
109  {
110  $formObject = new \stdClass();
111  $formObject->someProperty = ['foo'];
112  $context = $this->get(RenderingContextFactory::class)->create();
113  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" /></f:form>');
114  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
115  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
116  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
117  $context->setRequest(new ‪Request($serverRequest));
118  $view = new TemplateView($context);
119  $view->assign('formObject', $formObject);
120  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty][]" value="foo" checked="checked" />', $view->render());
121  }
122 
123  #[Test]
125  {
126  $formObject = new \ArrayObject(['someProperty' => true]);
127  $context = $this->get(RenderingContextFactory::class)->create();
128  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="bar" property="someProperty" /></f:form>');
129  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
130  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
131  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
132  $context->setRequest(new ‪Request($serverRequest));
133  $view = new TemplateView($context);
134  $view->assign('formObject', $formObject);
135  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="bar" checked="checked" />', $view->render());
136  }
137 
138  #[Test]
140  {
141  $formObject = new \stdClass();
142  $formObject->someProperty = 'bar';
143  $context = $this->get(RenderingContextFactory::class)->create();
144  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" /></f:form>');
145  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
146  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
147  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
148  $context->setRequest(new ‪Request($serverRequest));
149  $view = new TemplateView($context);
150  $view->assign('formObject', $formObject);
151  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" checked="checked" />', $view->render());
152  }
153 
154  #[Test]
156  {
157  $formObject = new \stdClass();
158  $formObject->someProperty = null;
159  $context = $this->get(RenderingContextFactory::class)->create();
160  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" /></f:form>');
161  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
162  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
163  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
164  $context->setRequest(new ‪Request($serverRequest));
165  $view = new TemplateView($context);
166  $view->assign('formObject', $formObject);
167  self::assertStringContainsString('<input type="hidden" name="myFieldPrefix[myObjectName][someProperty]" value="" /><input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" />', $view->render());
168  }
169 
170  #[Test]
171  public function ‪renderCallSetsErrorClassAttribute(): void
172  {
173  // Create an extbase request that contains mapping results of the form object property we're working with.
174  $mappingResult = new ‪Result();
175  $objectResult = $mappingResult->forProperty('myObjectName');
176  $propertyResult = $objectResult->forProperty('someProperty');
177  $propertyResult->addError(new ‪Error('invalidProperty', 2));
178  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
179  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
180  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
181  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
182  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
183  $extbaseRequest = new ‪Request($psr7Request);
184 
185  $formObject = new \stdClass();
186  $context = $this->get(RenderingContextFactory::class)->create();
187  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" errorClass="myError" /></f:form>');
188  $context->setRequest($extbaseRequest);
189  $view = new TemplateView($context);
190  $view->assign('formObject', $formObject);
191  // The point is that 'class="myError"' is added since the form had mapping errors for this property.
192  self::assertStringContainsString('<input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" class="myError" />', $view->render());
193  }
194 
195  #[Test]
197  {
198  // Create an extbase request that contains mapping results of the form object property we're working with.
199  $mappingResult = new ‪Result();
200  $objectResult = $mappingResult->forProperty('myObjectName');
201  $propertyResult = $objectResult->forProperty('someProperty');
202  $propertyResult->addError(new ‪Error('invalidProperty', 2));
203  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
204  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
205  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
206  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
207  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
208  $extbaseRequest = new ‪Request($psr7Request);
209 
210  $formObject = new \stdClass();
211  $context = $this->get(RenderingContextFactory::class)->create();
212  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" /></f:form>');
213  $context->setRequest($extbaseRequest);
214  $view = new TemplateView($context);
215  $view->assign('formObject', $formObject);
216  // The point is that 'class="myError"' is added since the form had mapping errors for this property.
217  self::assertStringContainsString('<input type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" class="f3-form-error" />', $view->render());
218  }
219 
220  #[Test]
222  {
223  // Create an extbase request that contains mapping results of the form object property we're working with.
224  $mappingResult = new ‪Result();
225  $objectResult = $mappingResult->forProperty('myObjectName');
226  $propertyResult = $objectResult->forProperty('someProperty');
227  $propertyResult->addError(new ‪Error('invalidProperty', 2));
228  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
229  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
230  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
231  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
232  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
233  $extbaseRequest = new ‪Request($psr7Request);
234 
235  $formObject = new \stdClass();
236  $context = $this->get(RenderingContextFactory::class)->create();
237  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.checkbox value="foo" property="someProperty" class="css_class" /></f:form>');
238  $context->setRequest($extbaseRequest);
239  $view = new TemplateView($context);
240  $view->assign('formObject', $formObject);
241  // The point is that 'class="myError"' is added since the form had mapping errors for this property.
242  self::assertStringContainsString('<input class="css_class f3-form-error" type="checkbox" name="myFieldPrefix[myObjectName][someProperty]" value="foo" />', $view->render());
243  }
244 }
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeArrayObject
‪renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeArrayObject()
Definition: CheckboxViewHelperTest.php:124
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeArray
‪renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeArray()
Definition: CheckboxViewHelperTest.php:108
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderSetsCheckedAttributeIfBoundPropertyIsNotNull
‪renderSetsCheckedAttributeIfBoundPropertyIsNotNull()
Definition: CheckboxViewHelperTest.php:139
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderCallSetsStandardErrorClassAttributeIfNonIsSpecified
‪renderCallSetsStandardErrorClassAttributeIfNonIsSpecified()
Definition: CheckboxViewHelperTest.php:196
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest
Definition: CheckboxViewHelperTest.php:33
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderDataProvider
‪static renderDataProvider()
Definition: CheckboxViewHelperTest.php:34
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderCallExtendsClassAttributeWithErrorClass
‪renderCallExtendsClassAttributeWithErrorClass()
Definition: CheckboxViewHelperTest.php:221
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeBoolean
‪renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeBoolean()
Definition: CheckboxViewHelperTest.php:76
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderIgnoresValueOfBoundPropertyIfCheckedIsSet
‪renderIgnoresValueOfBoundPropertyIfCheckedIsSet()
Definition: CheckboxViewHelperTest.php:60
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_BE
‪const REQUESTTYPE_BE
Definition: SystemEnvironmentBuilder.php:45
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderCallSetsErrorClassAttribute
‪renderCallSetsErrorClassAttribute()
Definition: CheckboxViewHelperTest.php:171
‪TYPO3\CMS\Extbase\Error\Result
Definition: Result.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form
Definition: ButtonViewHelperTest.php:18
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderAppendsSquareBracketsToNameAttributeIfBoundToAPropertyOfTypeArray
‪renderAppendsSquareBracketsToNameAttributeIfBoundToAPropertyOfTypeArray()
Definition: CheckboxViewHelperTest.php:92
‪TYPO3\CMS\Extbase\Error\Error
Definition: Error.php:25
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\render
‪render(string $template, string $expected)
Definition: CheckboxViewHelperTest.php:50
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory
Definition: RenderingContextFactory.php:51
‪TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters
Definition: ExtbaseRequestParameters.php:35
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:35
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\CheckboxViewHelperTest\renderDoesNotSetsCheckedAttributeIfBoundPropertyIsNull
‪renderDoesNotSetsCheckedAttributeIfBoundPropertyIsNull()
Definition: CheckboxViewHelperTest.php:155