[BUGFIX] Show correct label for IRRE records
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Tests / Unit / Form / FormDataProvider / TcaFlexFetchTest.php
1 <?php
2 namespace TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use Prophecy\Argument;
18 use Prophecy\Prophecy\ObjectProphecy;
19 use TYPO3\CMS\Backend\Form\FormDataProvider\TcaFlexFetch;
20 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
21 use TYPO3\CMS\Core\Cache\CacheManager;
22 use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
23 use TYPO3\CMS\Core\Tests\UnitTestCase;
24 use TYPO3\CMS\Core\Utility\GeneralUtility;
25
26 /**
27 * Test case
28 */
29 class TcaFlexFetchTest extends UnitTestCase
30 {
31 /**
32 * @var TcaFlexFetch
33 */
34 protected $subject;
35
36 /**
37 * @var BackendUserAuthentication|ObjectProphecy
38 */
39 protected $backendUserProphecy;
40
41 /**
42 * @var array A backup of registered singleton instances
43 */
44 protected $singletonInstances = array();
45
46 protected function setUp()
47 {
48 $this->singletonInstances = GeneralUtility::getSingletonInstances();
49
50 // Suppress cache foo in xml helpers of GeneralUtility
51 /** @var CacheManager|ObjectProphecy $cacheManagerProphecy */
52 $cacheManagerProphecy = $this->prophesize(CacheManager::class);
53 GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManagerProphecy->reveal());
54 $cacheFrontendProphecy = $this->prophesize(FrontendInterface::class);
55 $cacheManagerProphecy->getCache(Argument::cetera())->willReturn($cacheFrontendProphecy->reveal());
56
57 $this->subject = new TcaFlexFetch();
58 }
59
60 protected function tearDown()
61 {
62 GeneralUtility::purgeInstances();
63 GeneralUtility::resetSingletonInstances($this->singletonInstances);
64 parent::tearDown();
65 }
66
67 /**
68 * @test
69 */
70 public function addDataSetsParsedDataStructureArray()
71 {
72 $input = [
73 'systemLanguageRows' => [],
74 'databaseRow' => [
75 'aField' => [
76 'data' => [],
77 'meta' => [],
78 ],
79 ],
80 'processedTca' => [
81 'columns' => [
82 'aField' => [
83 'config' => [
84 'type' => 'flex',
85 'ds' => [
86 'default' => '
87 <T3DataStructure>
88 <ROOT>
89 <type>array</type>
90 <el>
91 <aFlexField>
92 <TCEforms>
93 <label>aFlexFieldLabel</label>
94 <config>
95 <type>input</type>
96 </config>
97 </TCEforms>
98 </aFlexField>
99 </el>
100 </ROOT>
101 </T3DataStructure>
102 ',
103 ],
104 ],
105 ],
106 ],
107 ],
108 ];
109
110 $expected = $input;
111 $expected['processedTca']['columns']['aField']['config']['ds'] = [
112 'ROOT' => [
113 'type' => 'array',
114 'el' => [
115 'aFlexField' => [
116 'TCEforms' => [
117 'label' => 'aFlexFieldLabel',
118 'config' => [
119 'type' => 'input',
120 ],
121 ],
122 ],
123 ],
124 ],
125 'meta' => [],
126 ];
127
128 $this->assertEquals($expected, $this->subject->addData($input));
129 }
130
131 /**
132 * @test
133 */
134 public function addDataSetsParsedDataStructureArrayWithSheets()
135 {
136 $input = [
137 'systemLanguageRows' => [],
138 'databaseRow' => [
139 'aField' => [
140 'data' => [],
141 'meta' => [],
142 ],
143 ],
144 'processedTca' => [
145 'columns' => [
146 'aField' => [
147 'config' => [
148 'type' => 'flex',
149 'ds' => [
150 'default' => '
151 <T3DataStructure>
152 <sheets>
153 <sDEF>
154 <ROOT>
155 <TCEforms>
156 <sheetTitle>aTitle</sheetTitle>
157 </TCEforms>
158 <type>array</type>
159 <el>
160 <aFlexField>
161 <TCEforms>
162 <label>aFlexFieldLabel</label>
163 <config>
164 <type>input</type>
165 </config>
166 </TCEforms>
167 </aFlexField>
168 </el>
169 </ROOT>
170 </sDEF>
171 </sheets>
172 </T3DataStructure>
173 ',
174 ],
175 ],
176 ],
177 ],
178 ],
179 ];
180
181 $expected = $input;
182 $expected['processedTca']['columns']['aField']['config']['ds'] = [
183 'sheets' => [
184 'sDEF' => [
185 'ROOT' => [
186 'type' => 'array',
187 'el' => [
188 'aFlexField' => [
189 'TCEforms' => [
190 'label' => 'aFlexFieldLabel',
191 'config' => [
192 'type' => 'input',
193 ],
194 ],
195 ],
196 ],
197 'TCEforms' => [
198 'sheetTitle' => 'aTitle',
199 ],
200 ],
201 ],
202 ],
203 'meta' => [],
204 ];
205
206 $this->assertEquals($expected, $this->subject->addData($input));
207 }
208
209 /**
210 * @test
211 */
212 public function addDataThrowsExceptionIfDataStructureCanNotBeParsed()
213 {
214 $input = [
215 'systemLanguageRows' => [],
216 'databaseRow' => [],
217 'processedTca' => [
218 'columns' => [
219 'aField' => [
220 'config' => [
221 'type' => 'flex',
222 'ds' => ''
223 ],
224 ],
225 ],
226 ],
227 ];
228
229 $this->setExpectedException(\UnexpectedValueException::class, $this->anything(), 1440506893);
230
231 $this->subject->addData($input);
232 }
233
234 /**
235 * @test
236 */
237 public function addDataInitializesDatabaseRowValueIfNoDataStringIsGiven()
238 {
239 $input = [
240 'databaseRow' => [],
241 'systemLanguageRows' => [],
242 'processedTca' => [
243 'columns' => [
244 'aField' => [
245 'config' => [
246 'type' => 'flex',
247 'ds' => [
248 'default' => '
249 <T3DataStructure>
250 <ROOT></ROOT>
251 </T3DataStructure>
252 ',
253 ],
254 ],
255 ],
256 ],
257 ],
258 ];
259
260 $expected = $input;
261 $expected['processedTca']['columns']['aField']['config']['ds'] = [
262 'ROOT' => '',
263 'meta' => [],
264 ];
265 $expected['databaseRow']['aField'] = [
266 'data' => [],
267 'meta' => []
268 ];
269
270 $this->assertEquals($expected, $this->subject->addData($input));
271 }
272 }