‪TYPO3CMS  ‪main
DataStructureIdentifierListenerTest.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;
30 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
31 
32 final class ‪DataStructureIdentifierListenerTest extends UnitTestCase
33 {
34  protected bool ‪$resetSingletonInstances = true;
35 
36  public function ‪setUp(): void
37  {
38  parent::setUp();
39  $cacheManager = new ‪CacheManager();
40  $cacheManager->registerCache(new ‪NullFrontend('runtime'));
41  GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManager);
42  ‪$GLOBALS['LANG'] = $this->createMock(LanguageService::class);
43  }
44 
45  #[Test]
47  {
48  $givenIdentifier = ['aKey' => 'aValue'];
49 
51  [],
52  'aTable',
53  'aField',
54  [],
55  $givenIdentifier,
56  );
57 
58  (new ‪DataStructureIdentifierListener())->modifyDataStructureIdentifier($event);
59 
60  self::assertSame($givenIdentifier, $event->getIdentifier());
61  }
62 
63  #[Test]
65  {
67  [],
68  'tt_content',
69  'pi_flexform',
70  ['CType' => 'form_formframework'],
71  [],
72  );
73 
74  (new ‪DataStructureIdentifierListener())->modifyDataStructureIdentifier($event);
75 
76  self::assertEquals(
77  ['ext-form-persistenceIdentifier' => '', 'ext-form-overrideFinishers' => ''],
78  $event->getIdentifier(),
79  );
80  }
81 
82  #[Test]
84  {
85  $row = [
86  'CType' => 'form_formframework',
87  'pi_flexform' => '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
88  <T3FlexForms>
89  <data>
90  <sheet index="sDEF">
91  <language index="lDEF">
92  <field index="settings.persistenceIdentifier">
93  <value index="vDEF">1:user_upload/karl.yml</value>
94  </field>
95  </language>
96  </sheet>
97  </data>
98  </T3FlexForms>
99  ',
100  ];
101  $incomingIdentifier = [
102  'aKey' => 'aValue',
103  ];
104  $expected = [
105  'aKey' => 'aValue',
106  'ext-form-persistenceIdentifier' => '1:user_upload/karl.yml',
107  'ext-form-overrideFinishers' => '',
108  ];
109 
111  [],
112  'tt_content',
113  'pi_flexform',
114  $row,
115  $incomingIdentifier,
116  );
117 
118  (new ‪DataStructureIdentifierListener())->modifyDataStructureIdentifier($event);
119 
120  self::assertEquals($expected, $event->getIdentifier());
121  }
122 
123  #[Test]
125  {
126  $row = [
127  'CType' => 'form_formframework',
128  'pi_flexform' => '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
129  <T3FlexForms>
130  <data>
131  <sheet index="sDEF">
132  <language index="lDEF">
133  <field index="settings.overrideFinishers">
134  <value index="vDEF">1</value>
135  </field>
136  </language>
137  </sheet>
138  </data>
139  </T3FlexForms>
140  ',
141  ];
142  $expected = [
143  'ext-form-persistenceIdentifier' => '',
144  'ext-form-overrideFinishers' => 'enabled',
145  ];
146 
148  [],
149  'tt_content',
150  'pi_flexform',
151  $row,
152  [],
153  );
154 
155  (new ‪DataStructureIdentifierListener())->modifyDataStructureIdentifier($event);
156 
157  self::assertEquals($expected, $event->getIdentifier());
158  }
159 
160  #[Test]
162  {
163  $dataStructure = ['foo' => 'bar'];
164  $expected = $dataStructure;
165 
167  $dataStructure,
168  [],
169  );
170 
171  (new ‪DataStructureIdentifierListener())->modifyDataStructure($event);
172 
173  self::assertEquals($expected, $event->getDataStructure());
174  }
175 
176  #[DataProvider('modifyDataStructureDataProvider')]
177  #[Test]
178  public function ‪modifyDataStructureAddsExistingFormItems(array $formDefinition, array $expectedItem): void
179  {
180  $formPersistenceManagerMock = $this->createMock(FormPersistenceManagerInterface::class);
181  $formPersistenceManagerMock->expects(self::atLeastOnce())->method('listForms')->willReturn([$formDefinition]);
182  GeneralUtility::addInstance(FormPersistenceManagerInterface::class, $formPersistenceManagerMock);
183 
184  $incomingDataStructure = [
185  'sheets' => [
186  'sDEF' => [
187  'ROOT' => [
188  'el' => [
189  'settings.persistenceIdentifier' => [
190  'config' => [
191  'items' => [
192  0 => [
193  'label' => 'default, no value',
194  'value' => '',
195  ],
196  ],
197  ],
198  ],
199  ],
200  ],
201  ],
202  ],
203  ];
204 
205  $expected = [
206  'sheets' => [
207  'sDEF' => [
208  'ROOT' => [
209  'el' => [
210  'settings.persistenceIdentifier' => [
211  'config' => [
212  'items' => [
213  0 => [
214  'label' => 'default, no value',
215  'value' => '',
216  ],
217  1 => $expectedItem,
218  ],
219  ],
220  ],
221  ],
222  ],
223  ],
224  ],
225  ];
226 
228  $incomingDataStructure,
229  ['ext-form-persistenceIdentifier' => ''],
230  );
231 
232  (new ‪DataStructureIdentifierListener())->modifyDataStructure($event);
233 
234  self::assertEquals($expected, $event->getDataStructure());
235  }
236 
237  public static function ‪modifyDataStructureDataProvider(): array
238  {
239  return [
240  'simple' => [
241  [
242  'persistenceIdentifier' => 'hugo1',
243  'name' => 'myHugo1',
244  'location' => 'extension',
245  ],
246  [
247  'label' => 'myHugo1 (hugo1)',
248  'value' => 'hugo1',
249  'icon' => 'content-form',
250  ],
251  ],
252  'invalid' => [
253  [
254  'persistenceIdentifier' => 'Error.yaml',
255  'label' => 'Test Error Label',
256  'name' => 'Test Error Name',
257  'location' => 'extension',
258  'invalid' => true,
259  ],
260  [
261  'label' => 'Test Error Name (Error.yaml)',
262  'value' => 'Error.yaml',
263  'icon' => 'overlay-missing',
264  ],
265  ],
266  ];
267  }
268 }
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyDataStructureDataProvider
‪static modifyDataStructureDataProvider()
Definition: DataStructureIdentifierListenerTest.php:237
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyIdentifiersAddsOverrideFinisherValue
‪modifyIdentifiersAddsOverrideFinisherValue()
Definition: DataStructureIdentifierListenerTest.php:124
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyIdentifiersReturnsIdentifierForNotMatchingScenario
‪modifyIdentifiersReturnsIdentifierForNotMatchingScenario()
Definition: DataStructureIdentifierListenerTest.php:46
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\setUp
‪setUp()
Definition: DataStructureIdentifierListenerTest.php:36
‪TYPO3\CMS\Form\EventListener\DataStructureIdentifierListener
Definition: DataStructureIdentifierListener.php:49
‪TYPO3\CMS\Core\Cache\Frontend\NullFrontend
Definition: NullFrontend.php:30
‪TYPO3\CMS\Core\Configuration\Event\AfterFlexFormDataStructureParsedEvent
Definition: AfterFlexFormDataStructureParsedEvent.php:32
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyIdentifiersAddDefaultValuesForNewRecord
‪modifyIdentifiersAddDefaultValuesForNewRecord()
Definition: DataStructureIdentifierListenerTest.php:64
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyIdentifiersAddsGivenPersistenceIdentifier
‪modifyIdentifiersAddsGivenPersistenceIdentifier()
Definition: DataStructureIdentifierListenerTest.php:83
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyDataStructureReturnsDataStructureUnchanged
‪modifyDataStructureReturnsDataStructureUnchanged()
Definition: DataStructureIdentifierListenerTest.php:161
‪TYPO3\CMS\Core\Configuration\Event\AfterFlexFormDataStructureIdentifierInitializedEvent
Definition: AfterFlexFormDataStructureIdentifierInitializedEvent.php:35
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest
Definition: DataStructureIdentifierListenerTest.php:33
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: DataStructureIdentifierListenerTest.php:34
‪TYPO3\CMS\Form\Tests\Unit\EventListener\DataStructureIdentifierListenerTest\modifyDataStructureAddsExistingFormItems
‪modifyDataStructureAddsExistingFormItems(array $formDefinition, array $expectedItem)
Definition: DataStructureIdentifierListenerTest.php:178
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Form\Tests\Unit\EventListener
Definition: DataStructureIdentifierListenerTest.php:18
‪TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManagerInterface
Definition: FormPersistenceManagerInterface.php:32