‪TYPO3CMS  11.5
NodeFactoryTest.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\PhpUnit\ProphecyTrait;
32 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
33 
37 class ‪NodeFactoryTest extends UnitTestCase
38 {
39  use ProphecyTrait;
40 
45  {
46  $this->expectException(Exception::class);
47  $this->expectExceptionCode(1432207533);
48  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
49  1433089391 => [
50  'class' => 'foo',
51  'priority' => 23,
52  ],
53  ];
54  new ‪NodeFactory();
55  }
56 
61  {
62  $this->expectException(Exception::class);
63  $this->expectExceptionCode(1432207533);
64  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
65  1433089393 => [
66  'nodeName' => 'foo',
67  'class' => 'bar',
68  ],
69  ];
70  new ‪NodeFactory();
71  }
72 
77  {
78  $this->expectException(Exception::class);
79  $this->expectExceptionCode(1432207533);
80  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
81  1433089392 => [
82  'nodeName' => 'foo',
83  'priority' => 23,
84  ],
85  ];
86  new ‪NodeFactory();
87  }
88 
93  {
94  $this->expectException(Exception::class);
95  $this->expectExceptionCode(1432223531);
96  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
97  1433089394 => [
98  'nodeName' => 'foo',
99  'class' => 'bar',
100  'priority' => -23,
101  ],
102  ];
103  new ‪NodeFactory();
104  }
109  {
110  $this->expectException(Exception::class);
111  $this->expectExceptionCode(1432223531);
112  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
113  1433089395 => [
114  'nodeName' => 'foo',
115  'class' => 'bar',
116  'priority' => 142,
117  ],
118  ];
119  new ‪NodeFactory();
120  }
121 
126  {
127  $this->expectException(Exception::class);
128  $this->expectExceptionCode(1432223893);
129  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
130  1433089396 => [
131  'nodeName' => 'foo',
132  'priority' => 20,
133  'class' => 'fooClass',
134  ],
135  1433089397 => [
136  'nodeName' => 'foo',
137  'priority' => 20,
138  'class' => 'barClass',
139  ],
140  ];
141  new ‪NodeFactory();
142  }
143 
148  {
149  $this->expectException(Exception::class);
150  $this->expectExceptionCode(1433155522);
151  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
152  1433154905 => [
153  'class' => 'foo',
154  'priority' => 23,
155  ],
156  ];
157  new ‪NodeFactory();
158  }
159 
164  {
165  $this->expectException(Exception::class);
166  $this->expectExceptionCode(1433155522);
167  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
168  1433154905 => [
169  'nodeName' => 'foo',
170  'class' => 'bar',
171  ],
172  ];
173  new ‪NodeFactory();
174  }
175 
180  {
181  $this->expectException(Exception::class);
182  $this->expectExceptionCode(1433155522);
183  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
184  1433154906 => [
185  'nodeName' => 'foo',
186  'priority' => 23,
187  ],
188  ];
189  new ‪NodeFactory();
190  }
191 
196  {
197  $this->expectException(Exception::class);
198  $this->expectExceptionCode(1433155563);
199  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
200  1433154907 => [
201  'nodeName' => 'foo',
202  'class' => 'bar',
203  'priority' => -23,
204  ],
205  ];
206  new ‪NodeFactory();
207  }
212  {
213  $this->expectException(Exception::class);
214  $this->expectExceptionCode(1433155563);
215  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
216  1433154908 => [
217  'nodeName' => 'foo',
218  'class' => 'bar',
219  'priority' => 142,
220  ],
221  ];
222  new ‪NodeFactory();
223  }
224 
229  {
230  $this->expectException(Exception::class);
231  $this->expectExceptionCode(1433155705);
232  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
233  1433154909 => [
234  'nodeName' => 'foo',
235  'priority' => 20,
236  'class' => 'fooClass',
237  ],
238  1433154910 => [
239  'nodeName' => 'foo',
240  'priority' => 20,
241  'class' => 'barClass',
242  ],
243  ];
244  new ‪NodeFactory();
245  }
246 
251  {
252  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
253  1433154909 => [
254  'nodeName' => 'foo',
255  'priority' => 20,
256  'class' => 'fooClass',
257  ],
258  1433154910 => [
259  'nodeName' => 'bar',
260  'priority' => 20,
261  'class' => 'barClass',
262  ],
263  ];
264  new ‪NodeFactory();
265  }
266 
270  public function ‪createThrowsExceptionIfRenderTypeIsNotGiven(): void
271  {
272  $this->expectException(Exception::class);
273  $this->expectExceptionCode(1431452406);
274  $subject = new ‪NodeFactory();
275  $subject->create([]);
276  }
277 
282  {
283  $this->expectException(Exception::class);
284  $this->expectExceptionCode(1431872546);
285  $mockNode = new \stdClass();
286  $mockSubject = $this->getMockBuilder(NodeFactory::class)
287  ->onlyMethods(['instantiate'])
288  ->disableOriginalConstructor()
289  ->getMock();
290  $mockSubject->expects(self::once())->method('instantiate')->willReturn($mockNode);
291  $mockSubject->create(['renderType' => 'foo']);
292  }
293 
298  {
299  $unknownElementProphecy = $this->prophesize(UnknownElement::class);
300  $unknownElementRevelation = $unknownElementProphecy->reveal();
301  GeneralUtility::addInstance(UnknownElement::class, $unknownElementRevelation);
302  $subject = new ‪NodeFactory();
303  self::assertSame($unknownElementRevelation, $subject->create(['renderType' => 'foo']));
304  }
305 
310  {
311  $data = [
312  'type' => 'select',
313  'renderType' => 'selectTree',
314  ];
315  $selectTreeElementProphecy = $this->prophesize(SelectTreeElement::class);
316  $selectTreeElementRevelation = $selectTreeElementProphecy->reveal();
317  GeneralUtility::addInstance(SelectTreeElement::class, $selectTreeElementRevelation);
318  $subject = new ‪NodeFactory();
319  self::assertSame($selectTreeElementRevelation, $subject->create($data));
320  }
321 
326  {
327  $data = [
328  'type' => 'select',
329  'renderType' => 'selectSingle',
330  'parameterArray' => [
331  'fieldConf' => [
332  'config' => [],
333  ],
334  ],
335  ];
336  $subject = new ‪NodeFactory();
337  $selectSingleElementProphecy = $this->prophesize(SelectSingleElement::class);
338  $selectSingleElementRevelation = $selectSingleElementProphecy->reveal();
339  GeneralUtility::addInstance(SelectSingleElement::class, $selectSingleElementRevelation);
340  self::assertSame($selectSingleElementRevelation, $subject->create($data));
341  }
342 
346  public function ‪createInstantiatesNewRegisteredElement(): void
347  {
348  $data = ['renderType' => 'foo'];
349  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
350  [
351  'nodeName' => 'foo',
352  'priority' => 20,
353  'class' => FooElement::class,
354  ],
355  ];
356 
357  $subject = new ‪NodeFactory();
358  self::assertInstanceOf(FooElement::class, ($subject->create($data)));
359  }
360 
365  {
366  $data = ['renderType' => 'foo'];
367  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
368  1433089467 => [
369  'nodeName' => 'foo',
370  'priority' => 20,
371  'class' => FooElement::class,
372  ],
373  1433089468 => [
374  'nodeName' => 'foo',
375  'priority' => 30,
376  'class' => BarElement::class,
377  ],
378  ];
379  $subject = new ‪NodeFactory();
380  self::assertInstanceOf(BarElement::class, ($subject->create($data)));
381  }
382 
387  {
388  $data = ['renderType' => 'foo'];
389  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
390  1433089469 => [
391  'nodeName' => 'foo',
392  'priority' => 30,
393  'class' => FooElement::class,
394  ],
395  1433089470 => [
396  'nodeName' => 'foo',
397  'priority' => 20,
398  'class' => BarElement::class,
399  ],
400  ];
401  $subject = new ‪NodeFactory();
402  self::assertInstanceOf(FooElement::class, ($subject->create($data)));
403  }
404 
409  {
410  $this->expectException(Exception::class);
411  $this->expectExceptionCode(1433157422);
412  $data = ['renderType' => 'foo'];
413  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
414  1433156887 => [
415  'nodeName' => 'foo',
416  'priority' => 10,
417  'class' => InvalidNodeResolverClass::class,
418  ],
419  ];
420  $subject = new ‪NodeFactory();
421  $subject->create($data);
422  }
423 
428  {
429  $data = ['renderType' => 'foo'];
430  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
431  [
432  'nodeName' => 'foo',
433  'priority' => 20,
434  'class' => FooElement::class,
435  ],
436  ];
437 
438  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
439  1433156887 => [
440  'nodeName' => 'foo',
441  'priority' => 10,
442  'class' => FooResolver::class,
443  ],
444  1433156888 => [
445  'nodeName' => 'foo',
446  'priority' => 30,
447  'class' => BarResolver::class,
448  ],
449  ];
450  $subject = new ‪NodeFactory();
451  self::assertInstanceOf(BarElement::class, ($subject->create($data)));
452  }
453 
458  {
459  $data = ['renderType' => 'foo'];
460  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
461  [
462  'nodeName' => 'foo',
463  'priority' => 20,
464  'class' => FooElement::class,
465  ],
466  ];
467 
468  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
469  1433156887 => [
470  'nodeName' => 'foo',
471  'priority' => 30,
472  'class' => BarResolver::class,
473  ],
474  1433156888 => [
475  'nodeName' => 'foo',
476  'priority' => 10,
477  'class' => FooResolver::class,
478  ],
479  ];
480  $subject = new ‪NodeFactory();
481  self::assertInstanceOf(BarElement::class, ($subject->create($data)));
482  }
483 
488  {
489  $data = ['renderType' => 'foo'];
490  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = [
491  [
492  'nodeName' => 'foo',
493  'priority' => 20,
494  'class' => FooElement::class,
495  ],
496  ];
497 
498  ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeResolver'] = [
499  1433156887 => [
500  'nodeName' => 'foo',
501  'priority' => 30,
502  'class' => BarResolver::class,
503  ],
504  ];
505  $subject = new ‪NodeFactory();
506  self::assertInstanceOf(BarElement::class, ($subject->create($data)));
507  }
508 }
‪TYPO3\CMS\Backend\Form\Element\UnknownElement
Definition: UnknownElement.php:22
‪TYPO3\CMS\Backend\Tests\Unit\Form\Fixtures\NodeFactory\NodeResolvers\BarResolver
Definition: BarResolver.php:12
‪TYPO3\CMS\Backend\Tests\Unit\Form\Fixtures\NodeFactory\NodeResolvers\InvalidNodeResolverClass
Definition: InvalidNodeResolverClass.php:7
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createReturnsInstanceOfSelectSingleElementIfNeeded
‪createReturnsInstanceOfSelectSingleElementIfNeeded()
Definition: NodeFactoryTest.php:324
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createThrowsExceptionIfResolverDoesNotImplementNodeResolverInterface
‪createThrowsExceptionIfResolverDoesNotImplementNodeResolverInterface()
Definition: NodeFactoryTest.php:407
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfOverrideMissesClassKey
‪constructThrowsExceptionIfOverrideMissesClassKey()
Definition: NodeFactoryTest.php:75
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructorThrowsExceptionIfOverrideTwoNodesWithSamePriorityAndSameNodeNameAreRegistered
‪constructorThrowsExceptionIfOverrideTwoNodesWithSamePriorityAndSameNodeNameAreRegistered()
Definition: NodeFactoryTest.php:124
‪TYPO3\CMS\Backend\Form\Exception
Definition: AccessDeniedContentEditException.php:16
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfOverridePriorityIsLowerThanZero
‪constructThrowsExceptionIfOverridePriorityIsLowerThanZero()
Definition: NodeFactoryTest.php:91
‪TYPO3\CMS\Backend\Tests\Unit\Form\Fixtures\NodeFactory\NodeElements\BarElement
Definition: BarElement.php:11
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createInstantiatesResolverWithHighestPriorityFirstWithOtherGivenOrder
‪createInstantiatesResolverWithHighestPriorityFirstWithOtherGivenOrder()
Definition: NodeFactoryTest.php:456
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createThrowsExceptionIfRenderTypeIsNotGiven
‪createThrowsExceptionIfRenderTypeIsNotGiven()
Definition: NodeFactoryTest.php:269
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructorThrowsExceptionIfResolverTwoNodesWithSamePriorityAndSameNodeNameAreRegistered
‪constructorThrowsExceptionIfResolverTwoNodesWithSamePriorityAndSameNodeNameAreRegistered()
Definition: NodeFactoryTest.php:227
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfResolverMissesNodeNameKey
‪constructThrowsExceptionIfResolverMissesNodeNameKey()
Definition: NodeFactoryTest.php:146
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfOverrideMissesNodeNameKey
‪constructThrowsExceptionIfOverrideMissesNodeNameKey()
Definition: NodeFactoryTest.php:43
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfOverrideMissesPriorityKey
‪constructThrowsExceptionIfOverrideMissesPriorityKey()
Definition: NodeFactoryTest.php:59
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructorThrowsNoExceptionIfResolverWithSamePriorityButDifferentNodeNameAreRegistered
‪constructorThrowsNoExceptionIfResolverWithSamePriorityButDifferentNodeNameAreRegistered()
Definition: NodeFactoryTest.php:249
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfResolverPriorityIsHigherThanHundred
‪constructThrowsExceptionIfResolverPriorityIsHigherThanHundred()
Definition: NodeFactoryTest.php:210
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createInstantiatesElementRegisteredWithHigherPriorityWithOneGivenOrder
‪createInstantiatesElementRegisteredWithHigherPriorityWithOneGivenOrder()
Definition: NodeFactoryTest.php:363
‪TYPO3\CMS\Backend\Tests\Unit\Form\Fixtures\NodeFactory\NodeResolvers\FooResolver
Definition: FooResolver.php:12
‪TYPO3\CMS\Backend\Form\Element\SelectTreeElement
Definition: SelectTreeElement.php:29
‪TYPO3\CMS\Backend\Tests\Unit\Form\Fixtures\NodeFactory\NodeElements\FooElement
Definition: FooElement.php:11
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest
Definition: NodeFactoryTest.php:38
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createInstantiatesResolverWithHighestPriorityFirstWithOneGivenOrder
‪createInstantiatesResolverWithHighestPriorityFirstWithOneGivenOrder()
Definition: NodeFactoryTest.php:426
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createReturnsInstanceOfUnknownElementIfTypeIsNotRegistered
‪createReturnsInstanceOfUnknownElementIfTypeIsNotRegistered()
Definition: NodeFactoryTest.php:296
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfResolverPriorityIsLowerThanZero
‪constructThrowsExceptionIfResolverPriorityIsLowerThanZero()
Definition: NodeFactoryTest.php:194
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createThrowsExceptionIfNodeDoesNotImplementNodeInterface
‪createThrowsExceptionIfNodeDoesNotImplementNodeInterface()
Definition: NodeFactoryTest.php:280
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createInstantiatesNodeClassReturnedByResolver
‪createInstantiatesNodeClassReturnedByResolver()
Definition: NodeFactoryTest.php:486
‪TYPO3\CMS\Backend\Form\NodeFactory
Definition: NodeFactory.php:37
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfOverridePriorityIsHigherThanHundred
‪constructThrowsExceptionIfOverridePriorityIsHigherThanHundred()
Definition: NodeFactoryTest.php:107
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createInstantiatesElementRegisteredWithHigherPriorityWithOtherGivenOrder
‪createInstantiatesElementRegisteredWithHigherPriorityWithOtherGivenOrder()
Definition: NodeFactoryTest.php:385
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfResolverMissesClassKey
‪constructThrowsExceptionIfResolverMissesClassKey()
Definition: NodeFactoryTest.php:178
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createInstantiatesNewRegisteredElement
‪createInstantiatesNewRegisteredElement()
Definition: NodeFactoryTest.php:345
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Backend\Form\Element\SelectSingleElement
Definition: SelectSingleElement.php:32
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\createReturnsInstanceOfSelectTreeElementIfNeeded
‪createReturnsInstanceOfSelectTreeElementIfNeeded()
Definition: NodeFactoryTest.php:308
‪TYPO3\CMS\Backend\Tests\Unit\Form\NodeFactoryTest\constructThrowsExceptionIfResolverMissesPriorityKey
‪constructThrowsExceptionIfResolverMissesPriorityKey()
Definition: NodeFactoryTest.php:162
‪TYPO3\CMS\Backend\Tests\Unit\Form