‪TYPO3CMS  ‪main
RadioViewHelperTest.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 ‪RadioViewHelperTest extends FunctionalTestCase
33 {
34  public static function ‪renderDataProvider(): array
35  {
36  return [
37  'renderSetsTagNameAndDefaultAttributes' => [
38  '<f:form.radio name="foo" value="" />',
39  '<input type="radio" name="foo" value="" />',
40  ],
41  'renderSetsCheckedAttributeIfSpecified' => [
42  '<f:form.radio name="foo" value="" checked="true" />',
43  '<input type="radio" 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.radio 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="radio" 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.radio 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="radio" 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.radio 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="radio" name="myFieldPrefix[myObjectName][someProperty]" value="foo" />', $view->render());
105  }
106 
107  #[Test]
109  {
110  $formObject = new \stdClass();
111  $formObject->someProperty = '';
112  $context = $this->get(RenderingContextFactory::class)->create();
113  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.radio 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="radio" name="myFieldPrefix[myObjectName][someProperty]" value="foo" />', $view->render());
121  }
122 
123  #[Test]
125  {
126  $formObject = new \stdClass();
127  $formObject->someProperty = null;
128  $context = $this->get(RenderingContextFactory::class)->create();
129  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.radio value="foo" property="someProperty" /></f:form>');
130  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters())
131  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
132  ‪$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
133  $context->setRequest(new ‪Request($serverRequest));
134  $view = new TemplateView($context);
135  $view->assign('formObject', $formObject);
136  self::assertStringContainsString('<input type="radio" name="myFieldPrefix[myObjectName][someProperty]" value="foo" />', $view->render());
137  }
138 
139  #[Test]
140  public function ‪renderCallSetsErrorClassAttribute(): void
141  {
142  // Create an extbase request that contains mapping results of the form object property we're working with.
143  $mappingResult = new ‪Result();
144  $objectResult = $mappingResult->forProperty('myObjectName');
145  $propertyResult = $objectResult->forProperty('someProperty');
146  $propertyResult->addError(new ‪Error('invalidProperty', 2));
147  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
148  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
149  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
150  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
151  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
152  $extbaseRequest = new ‪Request($psr7Request);
153 
154  $formObject = new \stdClass();
155  $context = $this->get(RenderingContextFactory::class)->create();
156  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.radio value="foo" property="someProperty" errorClass="myError" /></f:form>');
157  $context->setRequest($extbaseRequest);
158  $view = new TemplateView($context);
159  $view->assign('formObject', $formObject);
160  // The point is that 'class="myError"' is added since the form had mapping errors for this property.
161  self::assertStringContainsString('<input type="radio" name="myFieldPrefix[myObjectName][someProperty]" value="foo" class="myError" />', $view->render());
162  }
163 
164  #[Test]
166  {
167  $mappingResult = new ‪Result();
168  $objectResult = $mappingResult->forProperty('myObjectName');
169  $propertyResult = $objectResult->forProperty('someProperty');
170  $propertyResult->addError(new ‪Error('invalidProperty', 2));
171  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
172  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
173  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
174  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
175  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
176  $extbaseRequest = new ‪Request($psr7Request);
177 
178  $formObject = new \stdClass();
179  $context = $this->get(RenderingContextFactory::class)->create();
180  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.radio value="foo" property="someProperty" /></f:form>');
181  $context->setRequest($extbaseRequest);
182  $view = new TemplateView($context);
183  $view->assign('formObject', $formObject);
184  self::assertStringContainsString('<input type="radio" name="myFieldPrefix[myObjectName][someProperty]" value="foo" class="f3-form-error" />', $view->render());
185  }
186 
187  #[Test]
189  {
190  $mappingResult = new ‪Result();
191  $objectResult = $mappingResult->forProperty('myObjectName');
192  $propertyResult = $objectResult->forProperty('someProperty');
193  $propertyResult->addError(new ‪Error('invalidProperty', 2));
194  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
195  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
196  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
197  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
198  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
199  $extbaseRequest = new ‪Request($psr7Request);
200 
201  $formObject = new \stdClass();
202  $context = $this->get(RenderingContextFactory::class)->create();
203  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.radio value="foo" property="someProperty" class="myClass" /></f:form>');
204  $context->setRequest($extbaseRequest);
205  $view = new TemplateView($context);
206  $view->assign('formObject', $formObject);
207  self::assertStringContainsString('<input class="myClass f3-form-error" type="radio" name="myFieldPrefix[myObjectName][someProperty]" value="foo" />', $view->render());
208  }
209 }
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderDoesNotAppendSquareBracketsToNameAttributeIfBoundToAPropertyOfTypeArray
‪renderDoesNotAppendSquareBracketsToNameAttributeIfBoundToAPropertyOfTypeArray()
Definition: RadioViewHelperTest.php:92
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\render
‪render(string $template, string $expected)
Definition: RadioViewHelperTest.php:50
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderDoesNotSetsCheckedAttributeIfBoundPropertyIsNull
‪renderDoesNotSetsCheckedAttributeIfBoundPropertyIsNull()
Definition: RadioViewHelperTest.php:124
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderCallSetsErrorClassAttribute
‪renderCallSetsErrorClassAttribute()
Definition: RadioViewHelperTest.php:140
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderCallSetsStandardErrorClassAttributeIfNonIsSpecified
‪renderCallSetsStandardErrorClassAttributeIfNonIsSpecified()
Definition: RadioViewHelperTest.php:165
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_BE
‪const REQUESTTYPE_BE
Definition: SystemEnvironmentBuilder.php:45
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderIgnoresBoundPropertyIfCheckedIsSet
‪renderIgnoresBoundPropertyIfCheckedIsSet()
Definition: RadioViewHelperTest.php:60
‪TYPO3\CMS\Extbase\Error\Result
Definition: Result.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form
Definition: ButtonViewHelperTest.php:18
‪TYPO3\CMS\Extbase\Error\Error
Definition: Error.php:25
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderCallExtendsClassAttributeWithErrorClass
‪renderCallExtendsClassAttributeWithErrorClass()
Definition: RadioViewHelperTest.php:188
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeString
‪renderSetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeString()
Definition: RadioViewHelperTest.php:108
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest
Definition: RadioViewHelperTest.php:33
‪$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\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderCorrectlySetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeBoolean
‪renderCorrectlySetsCheckedAttributeIfCheckboxIsBoundToAPropertyOfTypeBoolean()
Definition: RadioViewHelperTest.php:76
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\RadioViewHelperTest\renderDataProvider
‪static renderDataProvider()
Definition: RadioViewHelperTest.php:34
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:35