‪TYPO3CMS  ‪main
ModuleDataTest.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;
24 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
25 
26 final class ‪ModuleDataTest extends FunctionalTestCase
27 {
28  #[Test]
29  public function ‪defaultValuesAreOverwritten(): void
30  {
31  $defaultValues = [
32  'property' => 'defaultValue',
33  'anotherProperty' => 'anotherDefaultValue',
34  ];
35 
36  $moduleData = new ‪ModuleData(
37  'my_module',
38  [
39  'property' => 'newValue',
40  ],
41  $defaultValues
42  );
43 
44  $expected = $defaultValues;
45  $expected['property'] = 'newValue';
46 
47  self::assertEquals($expected, $moduleData->toArray());
48  self::assertTrue($moduleData->has('property'));
49  self::assertEquals('newValue', $moduleData->get('property'));
50  self::assertEquals('my_module', $moduleData->getModuleIdentifier());
51 
52  $moduleData->set('anotherProperty', 'anotherPropertyValue');
53  self::assertEquals('anotherPropertyValue', $moduleData->toArray()['anotherProperty']);
54  }
55 
56  #[Test]
57  public function ‪moduleDataAreCreatedFromModule(): void
58  {
59  $defaultValues = [
60  'property' => 'defaultValue',
61  'anoterProperty' => 'anotherDefaultValue',
62  ];
63 
64  $module = $this->get(ModuleFactory::class)->createModule(
65  'my_module',
66  [
67  'packageName' => 'typo3/cms-testing',
68  'path' => '/module/my/module',
69  'moduleData' => $defaultValues,
70  ]
71  );
72 
73  $moduleData = ‪ModuleData::createFromModule($module, ['property' => 'newValue']);
74 
75  $expected = $defaultValues;
76  $expected['property'] = 'newValue';
77 
78  self::assertEquals($expected, $moduleData->toArray());
79  self::assertTrue($moduleData->has('property'));
80  self::assertEquals('newValue', $moduleData->get('property'));
81  self::assertEquals('my_module', $moduleData->getModuleIdentifier());
82 
83  $moduleData->set('anotherProperty', 'anotherPropertyValue');
84  self::assertEquals('anotherPropertyValue', $moduleData->toArray()['anotherProperty']);
85  }
86 
87  #[Test]
89  {
90  $moduleData = new ‪ModuleData(
91  'my_module',
92  [
93  'property' => 'aValue',
94  ],
95  [
96  'property' => 'defaultValue',
97  ]
98  );
99 
100  $this->expectException(\InvalidArgumentException::class);
101  $this->expectExceptionCode(1644600510);
102 
103  $moduleData->clean('invalidProperty', ['allowedValue']);
104  }
105 
106  #[Test]
108  {
109  $moduleData = new ‪ModuleData(
110  'my_module',
111  [
112  'property' => 'aValue',
113  ],
114  [
115  'property' => 'defaultValue',
116  ]
117  );
118 
119  $this->expectException(\InvalidArgumentException::class);
120  $this->expectExceptionCode(1644600511);
121 
122  $moduleData->clean('property', []);
123  }
124 
125  public static function ‪cleanModuleDataPropertyDataProvider(): \Generator
126  {
127  yield 'Nothing happens since the value is valid' => [
128  ['aValue'],
129  false,
130  'aValue',
131  ];
132  yield 'Falls back to default value' => [
133  ['defaultValue'],
134  true,
135  'defaultValue',
136  ];
137  yield 'Falls back to first allowed value' => [
138  ['allowedValue'],
139  true,
140  'allowedValue',
141  ];
142  }
143 
144  #[DataProvider('cleanModuleDataPropertyDataProvider')]
145  #[Test]
146  public function ‪cleanModuleDataProperty(array $allowedValues, bool $cleaned, string $cleanedValue): void
147  {
148  $moduleData = new ‪ModuleData(
149  'my_module',
150  [
151  'property' => 'aValue',
152  ],
153  [
154  'property' => 'defaultValue',
155  ]
156  );
157 
158  self::assertEquals($cleaned, $moduleData->clean('property', $allowedValues));
159  self::assertEquals($cleanedValue, $moduleData->get('property'));
160  }
161 
162  public static function ‪cleanUpModuleDataPropertiesDataProvider(): \Generator
163  {
164  yield 'All valid' => [
165  [
166  'property' => ['aValue'],
167  ],
168  false,
169  false,
170  [
171  'property' => 'aValue',
172  'anotherProperty' => 1,
173  ],
174  ];
175  yield 'All valid - use keys' => [
176  [
177  'property' => ['aValue' => 'LLL:'],
178  ],
179  true,
180  false,
181  [
182  'property' => 'aValue',
183  'anotherProperty' => 1,
184  ],
185  ];
186  yield 'Cleanup by default value and first allowed value' => [
187  [
188  'property' => ['defaultValue'],
189  'anotherProperty' => [2],
190  ],
191  false,
192  true,
193  [
194  'property' => 'defaultValue',
195  'anotherProperty' => 2,
196  ],
197  ];
198  yield 'Cleanup by default value and first allowed value - use keys' => [
199  [
200  'property' => ['defaultValue' => 'LLL:'],
201  'anotherProperty' => [2 => 'LLL:'],
202  ],
203  true,
204  true,
205  [
206  'property' => 'defaultValue',
207  'anotherProperty' => 2,
208  ],
209  ];
210  }
211 
212  #[DataProvider('cleanUpModuleDataPropertiesDataProvider')]
213  #[Test]
215  array $allowedData,
216  bool $useKeys,
217  bool $cleaned,
218  array $cleanedValues
219  ): void {
220  $moduleData = new ‪ModuleData(
221  'my_module',
222  [
223  'property' => 'aValue',
224  'anotherProperty' => 1,
225  ],
226  [
227  'property' => 'defaultValue',
228  ]
229  );
230 
231  self::assertEquals($cleaned, $moduleData->cleanUp($allowedData, $useKeys));
232  self::assertEquals($cleanedValues, $moduleData->toArray());
233  }
234 }
‪TYPO3\CMS\Backend\Module\ModuleFactory
Definition: ModuleFactory.php:29
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest
Definition: ModuleDataTest.php:27
‪TYPO3\CMS\Backend\Module\ModuleData
Definition: ModuleData.php:30
‪TYPO3\CMS\Backend\Module\ModuleData\createFromModule
‪static createFromModule(ModuleInterface $module, array $data)
Definition: ModuleData.php:42
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\cleanModuleDataProperty
‪cleanModuleDataProperty(array $allowedValues, bool $cleaned, string $cleanedValue)
Definition: ModuleDataTest.php:146
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\defaultValuesAreOverwritten
‪defaultValuesAreOverwritten()
Definition: ModuleDataTest.php:29
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\moduleDataAreCreatedFromModule
‪moduleDataAreCreatedFromModule()
Definition: ModuleDataTest.php:57
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\cleanUpModuleDataPropertiesDataProvider
‪static cleanUpModuleDataPropertiesDataProvider()
Definition: ModuleDataTest.php:162
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\cleanModuleDataPropertyThrowsExceptionOnInvalidProperty
‪cleanModuleDataPropertyThrowsExceptionOnInvalidProperty()
Definition: ModuleDataTest.php:88
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\cleanUpModuleDataProperties
‪cleanUpModuleDataProperties(array $allowedData, bool $useKeys, bool $cleaned, array $cleanedValues)
Definition: ModuleDataTest.php:214
‪TYPO3\CMS\Backend\Tests\Functional\Module
Definition: ModuleDataTest.php:18
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\cleanModuleDataPropertyThrowsExceptionOnEmptyAllowedList
‪cleanModuleDataPropertyThrowsExceptionOnEmptyAllowedList()
Definition: ModuleDataTest.php:107
‪TYPO3\CMS\Backend\Tests\Functional\Module\ModuleDataTest\cleanModuleDataPropertyDataProvider
‪static cleanModuleDataPropertyDataProvider()
Definition: ModuleDataTest.php:125