‪TYPO3CMS  11.5
FormDefinitionArrayConverterTest.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 Prophecy\Argument;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
27 
31 class ‪FormDefinitionArrayConverterTest extends UnitTestCase
32 {
33  use \Prophecy\PhpUnit\ProphecyTrait;
37  protected ‪$resetSingletonInstances = true;
38 
42  public function ‪setUp(): void
43  {
44  parent::setUp();
45  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] = '12345';
46  }
47 
51  public function ‪convertsJsonStringToFormDefinitionArray(): void
52  {
53  $sessionToken = '123';
54 
55  $data = [
56  'prototypeName' => 'standard',
57  'identifier' => 'test',
58  'type' => 'Text',
59  'enabled' => false,
60  'properties' => [
61  'options' => [
62  [
63  '_label' => 'label',
64  '_value' => 'value',
65  ],
66  ],
67  ],
68  '_orig_prototypeName' => [
69  'value' => 'standard',
70  'hmac' => GeneralUtility::hmac(serialize(['test', 'prototypeName', 'standard']), $sessionToken),
71  ],
72  '_orig_identifier' => [
73  'value' => 'test',
74  'hmac' => GeneralUtility::hmac(serialize(['test', 'identifier', 'test']), $sessionToken),
75  ],
76  ];
77 
78  $typeConverter = $this->getAccessibleMock(FormDefinitionArrayConverter::class, ['getFormDefinitionValidationService', 'retrieveSessionToken'], [], '', false);
79  $formDefinitionValidationService = $this->prophesize(FormDefinitionValidationService::class);
80  $formDefinitionValidationService->validateFormDefinitionProperties(Argument::cetera())->shouldBeCalled();
81  $formDefinitionValidationService->isPropertyValueEqualToHistoricalValue(Argument::cetera())->willReturn(true);
82 
83  $typeConverter->method(
84  'retrieveSessionToken'
85  )->willReturn($sessionToken);
86 
87  $typeConverter->method(
88  'getFormDefinitionValidationService'
89  )->willReturn($formDefinitionValidationService->reveal());
90 
91  $input = json_encode($data);
92  $expected = [
93  'prototypeName' => 'standard',
94  'identifier' => 'test',
95  'type' => 'Text',
96  'enabled' => false,
97  'properties' => [
98  'options' => [
99  'value' => 'label',
100  ],
101  ],
102  ];
103  $result = $typeConverter->convertFrom($input, FormDefinitionArray::class);
104 
105  self::assertInstanceOf(FormDefinitionArray::class, $result);
106  self::assertSame($expected, $result->getArrayCopy());
107  }
108 
112  public function ‪convertFromThrowsExceptionIfJsonIsInvalid(): void
113  {
114  $this->expectException(PropertyException::class);
115  $this->expectExceptionCode(1512578002);
116 
117  $typeConverter = new ‪FormDefinitionArrayConverter();
118  $input = '{"francine":"stan",';
119 
120  $typeConverter->convertFrom($input, FormDefinitionArray::class);
121  }
122 
127  {
128  $typeConverter = $this->getAccessibleMock(FormDefinitionArrayConverter::class, ['dummy'], [], '', false);
129 
130  $input = [
131  'foo1' => 'bar',
132  'foo2' => [
133  'foo3' => [
134  [
135  '_label' => 'xxx1',
136  '_value' => 'yyy1',
137  ],
138  [
139  '_label' => 'xxx2',
140  '_value' => 'yyy2',
141  ],
142  [
143  '_label' => 'xxx3',
144  '_value' => 'yyy2',
145  ],
146  ],
147  '_label' => 'xxx',
148  '_value' => 'yyy',
149  ],
150  '_label' => 'xxx',
151  '_value' => 'yyy',
152  ];
153 
154  $expected = [
155  'foo1' => 'bar',
156  'foo2' => [
157  'foo3' => [
158  'yyy1' => 'xxx1',
159  'yyy2' => 'xxx3',
160  ],
161  '_label' => 'xxx',
162  '_value' => 'yyy',
163  ],
164  '_label' => 'xxx',
165  '_value' => 'yyy',
166  ];
167 
168  self::assertSame($expected, $typeConverter->_call('transformMultiValueElementsForFormFramework', $input));
169  }
170 
175  {
176  $this->expectException(PropertyException::class);
177  $this->expectExceptionCode(1528538322);
178 
179  $sessionToken = '123';
180  $typeConverter = $this->getAccessibleMock(FormDefinitionArrayConverter::class, ['retrieveSessionToken'], [], '', false);
181 
182  $typeConverter->method(
183  'retrieveSessionToken'
184  )->willReturn($sessionToken);
185 
186  $input = [
187  'prototypeName' => 'foo',
188  'identifier' => 'test',
189  '_orig_prototypeName' => [
190  'value' => 'standard',
191  'hmac' => GeneralUtility::hmac(serialize(['test', 'prototypeName', 'standard']), $sessionToken),
192  ],
193  '_orig_identifier' => [
194  'value' => 'test',
195  'hmac' => GeneralUtility::hmac(serialize(['test', 'identifier', 'test']), $sessionToken),
196  ],
197  ];
198 
199  $typeConverter->convertFrom(json_encode($input), FormDefinitionArray::class);
200  }
201 
206  {
207  $this->expectException(PropertyException::class);
208  $this->expectExceptionCode(1528538322);
209 
210  $sessionToken = '123';
211  $typeConverter = $this->getAccessibleMock(FormDefinitionArrayConverter::class, ['retrieveSessionToken'], [], '', false);
212 
213  $typeConverter->method(
214  'retrieveSessionToken'
215  )->willReturn($sessionToken);
216 
217  $input = [
218  'prototypeName' => 'standard',
219  'identifier' => 'xxx',
220  '_orig_prototypeName' => [
221  'value' => 'standard',
222  'hmac' => GeneralUtility::hmac(serialize(['test', 'prototypeName', 'standard']), $sessionToken),
223  ],
224  '_orig_identifier' => [
225  'value' => 'test',
226  'hmac' => GeneralUtility::hmac(serialize(['test', 'prototypeName', 'test']), $sessionToken),
227  ],
228  ];
229 
230  $typeConverter->convertFrom(json_encode($input), FormDefinitionArray::class);
231  }
232 }
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\convertsJsonStringToFormDefinitionArray
‪convertsJsonStringToFormDefinitionArray()
Definition: FormDefinitionArrayConverterTest.php:49
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\setUp
‪setUp()
Definition: FormDefinitionArrayConverterTest.php:40
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\convertFromThrowsExceptionIfIdentifierWasChanged
‪convertFromThrowsExceptionIfIdentifierWasChanged()
Definition: FormDefinitionArrayConverterTest.php:203
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinitionValidationService
Definition: FormDefinitionValidationService.php:35
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\transformMultiValueElementsForFormFrameworkTransformValues
‪transformMultiValueElementsForFormFrameworkTransformValues()
Definition: FormDefinitionArrayConverterTest.php:124
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter
Definition: FormDefinitionArrayConverterTest.php:18
‪TYPO3\CMS\Form\Type\FormDefinitionArray
Definition: FormDefinitionArray.php:24
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\convertFromThrowsExceptionIfJsonIsInvalid
‪convertFromThrowsExceptionIfJsonIsInvalid()
Definition: FormDefinitionArrayConverterTest.php:110
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest
Definition: FormDefinitionArrayConverterTest.php:32
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Form\Mvc\Property\TypeConverter\FormDefinitionArrayConverter
Definition: FormDefinitionArrayConverter.php:37
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\convertFromThrowsExceptionIfPrototypeNameWasChanged
‪convertFromThrowsExceptionIfPrototypeNameWasChanged()
Definition: FormDefinitionArrayConverterTest.php:172
‪TYPO3\CMS\Form\Domain\Configuration\Exception\PropertyException
Definition: PropertyException.php:25
‪TYPO3\CMS\Form\Tests\Unit\Mvc\Property\TypeConverter\FormDefinitionArrayConverterTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: FormDefinitionArrayConverterTest.php:35