‪TYPO3CMS  ‪main
DependencyUtilityTest.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\Test;
27 use TYPO3\CMS\Extensionmanager\Utility\EmConfUtility;
29 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
30 
31 final class ‪DependencyUtilityTest extends UnitTestCase
32 {
33  #[Test]
35  {
36  $dependency = ‪Dependency::createFromEmConf('typo3', '15.0.0-0');
37  $dependencies = new \SplObjectStorage();
38  $dependencies->attach($dependency);
39 
40  $extension = new ‪Extension();
41  $extension->setExtensionKey('foo');
42  $extension->setDependencies($dependencies);
43  $dependencyUtility = new ‪DependencyUtility();
44 
45  $dependencyUtility->checkDependencies($extension);
46  ‪$errors = $dependencyUtility->getDependencyErrors();
47 
48  self::assertSame(1399144499, ‪$errors['foo'][0]['code']);
49  }
50 
51  #[Test]
53  {
54  $dependency = ‪Dependency::createFromEmConf('typo3', '1.0.0-3.0.0');
55  $dependencies = new \SplObjectStorage();
56  $dependencies->attach($dependency);
57 
58  $extension = new ‪Extension();
59  $extension->setExtensionKey('foo');
60  $extension->setDependencies($dependencies);
61  $dependencyUtility = new ‪DependencyUtility();
62 
63  $dependencyUtility->checkDependencies($extension);
64  ‪$errors = $dependencyUtility->getDependencyErrors();
65 
66  self::assertSame(1399144521, ‪$errors['foo'][0]['code']);
67  }
68 
69  #[Test]
71  {
72  $dependency = ‪Dependency::createFromEmConf('typo3', '1.0.0-25.0.0');
73  $dependencies = new \SplObjectStorage();
74  $dependencies->attach($dependency);
75 
76  $extension = new ‪Extension();
77  $extension->setExtensionKey('foo');
78  $extension->setDependencies($dependencies);
79  $dependencyUtility = new ‪DependencyUtility();
80 
81  $dependencyUtility->checkDependencies($extension);
82  ‪$errors = $dependencyUtility->getDependencyErrors();
83  self::assertCount(0, ‪$errors);
84  }
85 
86  #[Test]
88  {
89  $dependency = ‪Dependency::createFromEmConf('typo3', '1.0.0');
90  $dependencies = new \SplObjectStorage();
91  $dependencies->attach($dependency);
92 
93  $extension = new ‪Extension();
94  $extension->setExtensionKey('foo');
95  $extension->setDependencies($dependencies);
96  $dependencyUtility = new ‪DependencyUtility();
97 
98  $dependencyUtility->checkDependencies($extension);
99  ‪$errors = $dependencyUtility->getDependencyErrors();
100  self::assertCount(0, ‪$errors);
101  }
102 
103  #[Test]
105  {
106  $dependency = ‪Dependency::createFromEmConf('typo3', '-15.0.0');
107  $dependencies = new \SplObjectStorage();
108  $dependencies->attach($dependency);
109 
110  $extension = new ‪Extension();
111  $extension->setExtensionKey('foo');
112  $extension->setDependencies($dependencies);
113  $dependencyUtility = new ‪DependencyUtility();
114 
115  $dependencyUtility->checkDependencies($extension);
116  ‪$errors = $dependencyUtility->getDependencyErrors();
117  self::assertCount(0, ‪$errors);
118  }
119 
120  #[Test]
122  {
123  $dependency = ‪Dependency::createFromEmConf('php', '15.0.0');
124  $dependencies = new \SplObjectStorage();
125  $dependencies->attach($dependency);
126 
127  $extension = new ‪Extension();
128  $extension->setExtensionKey('foo');
129  $extension->setDependencies($dependencies);
130  $dependencyUtility = new ‪DependencyUtility();
131 
132  $dependencyUtility->checkDependencies($extension);
133  ‪$errors = $dependencyUtility->getDependencyErrors();
134 
135  self::assertSame(1377977857, ‪$errors['foo'][0]['code']);
136  }
137 
138  #[Test]
140  {
141  $dependency = ‪Dependency::createFromEmConf('php', '1.0.0-3.0.0');
142  $dependencies = new \SplObjectStorage();
143  $dependencies->attach($dependency);
144 
145  $extension = new ‪Extension();
146  $extension->setExtensionKey('foo');
147  $extension->setDependencies($dependencies);
148  $dependencyUtility = new ‪DependencyUtility();
149 
150  $dependencyUtility->checkDependencies($extension);
151  ‪$errors = $dependencyUtility->getDependencyErrors();
152 
153  self::assertSame(1377977856, ‪$errors['foo'][0]['code']);
154  }
155 
156  #[Test]
158  {
159  $dependency = ‪Dependency::createFromEmConf('php', '1.0.0-15.0.0');
160  $dependencies = new \SplObjectStorage();
161  $dependencies->attach($dependency);
162 
163  $extension = new ‪Extension();
164  $extension->setExtensionKey('foo');
165  $extension->setDependencies($dependencies);
166  $dependencyUtility = new ‪DependencyUtility();
167 
168  $dependencyUtility->checkDependencies($extension);
169  ‪$errors = $dependencyUtility->getDependencyErrors();
170 
171  self::assertCount(0, ‪$errors);
172  }
173 
174  #[Test]
176  {
177  $dependency = ‪Dependency::createFromEmConf('php', '1.0.0');
178  $dependencies = new \SplObjectStorage();
179  $dependencies->attach($dependency);
180 
181  $extension = new ‪Extension();
182  $extension->setExtensionKey('foo');
183  $extension->setDependencies($dependencies);
184  $dependencyUtility = new ‪DependencyUtility();
185 
186  $dependencyUtility->checkDependencies($extension);
187  ‪$errors = $dependencyUtility->getDependencyErrors();
188 
189  self::assertCount(0, ‪$errors);
190  }
191 
192  #[Test]
194  {
195  $dependency = ‪Dependency::createFromEmConf('typo3', '-25.0.0');
196  $dependencies = new \SplObjectStorage();
197  $dependencies->attach($dependency);
198 
199  $extension = new ‪Extension();
200  $extension->setExtensionKey('foo');
201  $extension->setDependencies($dependencies);
202  $dependencyUtility = new ‪DependencyUtility();
203 
204  $dependencyUtility->checkDependencies($extension);
205  ‪$errors = $dependencyUtility->getDependencyErrors();
206  self::assertCount(0, ‪$errors);
207  }
208 
209  #[Test]
211  {
212  $availableExtensions = [
213  'dummy' => [],
214  'foo' => [],
215  'bar' => [],
216  ];
217  $eventDispatcher = new ‪NoopEventDispatcher();
218  $listUtilityMock = $this->getMockBuilder(ListUtility::class)
219  ->onlyMethods(['getAvailableExtensions'])
220  ->getMock();
221  $listUtilityMock->injectEventDispatcher($eventDispatcher);
222  $listUtilityMock->expects(self::atLeastOnce())->method('getAvailableExtensions')->willReturn($availableExtensions);
223  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
224  $dependencyUtility->injectListUtility($listUtilityMock);
225 
226  self::assertTrue($dependencyUtility->_call('isDependentExtensionAvailable', 'dummy'));
227  }
228 
229  #[Test]
231  {
232  $availableExtensions = [
233  'dummy' => [],
234  'foo' => [],
235  'bar' => [],
236  ];
237  $eventDispatcher = new ‪NoopEventDispatcher();
238  $listUtilityMock = $this->getMockBuilder(ListUtility::class)
239  ->onlyMethods(['getAvailableExtensions'])
240  ->getMock();
241  $listUtilityMock->injectEventDispatcher($eventDispatcher);
242  $listUtilityMock->expects(self::atLeastOnce())->method('getAvailableExtensions')->willReturn($availableExtensions);
243  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
244  $dependencyUtility->injectListUtility($listUtilityMock);
245 
246  self::assertFalse($dependencyUtility->_call('isDependentExtensionAvailable', '42'));
247  }
248 
249  #[Test]
251  {
252  $emConfUtility = $this->getMockBuilder(EmConfUtility::class)
253  ->onlyMethods(['includeEmConf'])
254  ->getMock();
255  $emConfUtility->expects(self::once())->method('includeEmConf')->willReturn([
256  'key' => 'dummy',
257  'version' => '1.0.0',
258  ]);
259  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, ['setAvailableExtensions']);
260  $dependency = ‪Dependency::createFromEmConf('dummy');
261  $dependencyUtility->injectEmConfUtility($emConfUtility);
262  $dependencyUtility->_set('availableExtensions', [
263  'dummy' => [
264  'foo' => '42',
265  ],
266  ]);
267  $dependencyUtility->expects(self::once())->method('setAvailableExtensions');
268  $dependencyUtility->_call('isAvailableVersionCompatible', $dependency);
269  }
270 
271  #[Test]
273  {
274  $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
275  ->onlyMethods(['count'])
276  ->getMock();
277  $extensionRepositoryMock->expects(self::once())->method('count')->with(['extensionKey' => 'test123'])->willReturn(1);
278  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
279  $dependencyUtility->injectExtensionRepository($extensionRepositoryMock);
280  $count = $dependencyUtility->_call('isExtensionDownloadableFromRemote', 'test123');
281 
282  self::assertTrue($count);
283  }
284 
285  #[Test]
287  {
288  $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
289  ->onlyMethods(['count'])
290  ->getMock();
291  $extensionRepositoryMock->expects(self::once())->method('count')->with(['extensionKey' => 'test123'])->willReturn(0);
292  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
293  $dependencyUtility->injectExtensionRepository($extensionRepositoryMock);
294  $count = $dependencyUtility->_call('isExtensionDownloadableFromRemote', 'test123');
295 
296  self::assertFalse($count);
297  }
298 
299  #[Test]
301  {
302  $dependency = ‪Dependency::createFromEmConf('dummy', '1.0.0-10.0.0');
303  $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
304  ->onlyMethods(['countByVersionRangeAndExtensionKey'])
305  ->getMock();
306  $extensionRepositoryMock->expects(self::once())->method('countByVersionRangeAndExtensionKey')->with('dummy', 1000000, 10000000)->willReturn(2);
307  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
308  $dependencyUtility->injectExtensionRepository($extensionRepositoryMock);
309  $count = $dependencyUtility->_call('isDownloadableVersionCompatible', $dependency);
310 
311  self::assertTrue($count);
312  }
313 
314  #[Test]
316  {
317  $dependency = ‪Dependency::createFromEmConf('dummy', '1.0.0-2.0.0');
318  $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
319  ->onlyMethods(['countByVersionRangeAndExtensionKey'])
320  ->getMock();
321  $extensionRepositoryMock->expects(self::once())->method('countByVersionRangeAndExtensionKey')->with('dummy', 1000000, 2000000)->willReturn(0);
322  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
323  $dependencyUtility->injectExtensionRepository($extensionRepositoryMock);
324  $count = $dependencyUtility->_call('isDownloadableVersionCompatible', $dependency);
325 
326  self::assertFalse($count);
327  }
328 
329  #[Test]
331  {
332  $suitableDependency = ‪Dependency::createFromEmConf('typo3', '3.6.1');
333  $suitableDependencies = new \SplObjectStorage();
334  $suitableDependencies->attach($suitableDependency);
335 
336  $unsuitableDependency = ‪Dependency::createFromEmConf('typo3', '-4.3.0');
337  $unsuitableDependencies = new \SplObjectStorage();
338  $unsuitableDependencies->attach($unsuitableDependency);
339 
340  $extension1 = new ‪Extension();
341  $extension1->setExtensionKey('foo');
342  $extension1->setVersion('1.0.0');
343  $extension1->setDependencies($unsuitableDependencies);
344 
345  $extension2 = new ‪Extension();
346  $extension2->setExtensionKey('bar');
347  $extension2->setVersion('1.0.42');
348  $extension2->setDependencies($suitableDependencies);
349 
351  $myStorage->extensions[] = $extension1;
352  $myStorage->extensions[] = $extension2;
353  $dependency = ‪Dependency::createFromEmConf('foobar', '1.0.0-2.0.0');
354  $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, null);
355  $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
356  ->onlyMethods(['findByVersionRangeAndExtensionKeyOrderedByVersion'])
357  ->getMock();
358  $extensionRepositoryMock->expects(self::once())->method('findByVersionRangeAndExtensionKeyOrderedByVersion')->with('foobar', 1000000, 2000000)->willReturn($myStorage);
359  $dependencyUtility->injectExtensionRepository($extensionRepositoryMock);
360  $extension = $dependencyUtility->_call('getLatestCompatibleExtensionByDependency', $dependency);
361 
362  self::assertInstanceOf(Extension::class, $extension);
363  self::assertSame('bar', $extension->getExtensionKey());
364  }
365 }
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkPhpDependencyThrowsExceptionIfVersionNumberIsTooHigh
‪checkPhpDependencyThrowsExceptionIfVersionNumberIsTooHigh()
Definition: DependencyUtilityTest.php:139
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency
Definition: Dependency.php:28
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkTypo3DependencyCanHandleEmptyVersionHighestVersion
‪checkTypo3DependencyCanHandleEmptyVersionHighestVersion()
Definition: DependencyUtilityTest.php:87
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isDownloadableVersionCompatibleReturnsTrueIfCompatibleVersionExists
‪isDownloadableVersionCompatibleReturnsTrueIfCompatibleVersionExists()
Definition: DependencyUtilityTest.php:300
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension
Definition: Extension.php:30
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkTypo3DependencyCanHandleEmptyVersionLowestVersion
‪checkTypo3DependencyCanHandleEmptyVersionLowestVersion()
Definition: DependencyUtilityTest.php:104
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isAvailableVersionCompatibleCallsIsVersionCompatibleWithExtensionVersion
‪isAvailableVersionCompatibleCallsIsVersionCompatibleWithExtensionVersion()
Definition: DependencyUtilityTest.php:250
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\getLatestCompatibleExtensionByDependencyWillReturnExtensionModelOfLatestExtension
‪getLatestCompatibleExtensionByDependencyWillReturnExtensionModelOfLatestExtension()
Definition: DependencyUtilityTest.php:330
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility
Definition: DependencyUtilityTest.php:18
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkPhpDependencyErrorsIfVersionNumberIsTooLow
‪checkPhpDependencyErrorsIfVersionNumberIsTooLow()
Definition: DependencyUtilityTest.php:121
‪TYPO3\CMS\Extensionmanager\Utility\ListUtility
Definition: ListUtility.php:41
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkPhpDependencyReturnsTrueIfVersionNumberIsInRange
‪checkPhpDependencyReturnsTrueIfVersionNumberIsInRange()
Definition: DependencyUtilityTest.php:157
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkPhpDependencyCanHandleEmptyVersionLowestVersion
‪checkPhpDependencyCanHandleEmptyVersionLowestVersion()
Definition: DependencyUtilityTest.php:193
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isDownloadableVersionCompatibleReturnsFalseIfIncompatibleVersionExists
‪isDownloadableVersionCompatibleReturnsFalseIfIncompatibleVersionExists()
Definition: DependencyUtilityTest.php:315
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkTypo3DependencyErrorsIfVersionNumberIsTooHigh
‪checkTypo3DependencyErrorsIfVersionNumberIsTooHigh()
Definition: DependencyUtilityTest.php:52
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isDependentExtensionAvailableReturnsTrueIfExtensionIsAvailable
‪isDependentExtensionAvailableReturnsTrueIfExtensionIsAvailable()
Definition: DependencyUtilityTest.php:210
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isExtensionDownloadableFromRemoteReturnsFalseIfNoVersionExists
‪isExtensionDownloadableFromRemoteReturnsFalseIfNoVersionExists()
Definition: DependencyUtilityTest.php:286
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility
Definition: DependencyUtility.php:37
‪TYPO3\CMS\Extensionmanager\Domain\Repository\ExtensionRepository
Definition: ExtensionRepository.php:37
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest
Definition: DependencyUtilityTest.php:32
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency\createFromEmConf
‪static createFromEmConf(string $identifier, string $versionConstraint='', string $dependencyType='depends')
Definition: Dependency.php:58
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Fixtures\LatestCompatibleExtensionObjectStorageFixture
Definition: LatestCompatibleExtensionObjectStorageFixture.php:24
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkTypo3DependencyReturnsTrueIfVersionNumberIsInRange
‪checkTypo3DependencyReturnsTrueIfVersionNumberIsInRange()
Definition: DependencyUtilityTest.php:70
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkTypo3DependencyErrorsIfVersionNumberIsTooLow
‪checkTypo3DependencyErrorsIfVersionNumberIsTooLow()
Definition: DependencyUtilityTest.php:34
‪$errors
‪$errors
Definition: annotationChecker.php:116
‪TYPO3\CMS\Core\EventDispatcher\NoopEventDispatcher
Definition: NoopEventDispatcher.php:29
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\checkPhpDependencyCanHandleEmptyVersionHighestVersion
‪checkPhpDependencyCanHandleEmptyVersionHighestVersion()
Definition: DependencyUtilityTest.php:175
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isDependentExtensionAvailableReturnsFalseIfExtensionIsNotAvailable
‪isDependentExtensionAvailableReturnsFalseIfExtensionIsNotAvailable()
Definition: DependencyUtilityTest.php:230
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Utility\DependencyUtilityTest\isExtensionDownloadableFromRemoteReturnsTrueIfOneVersionExists
‪isExtensionDownloadableFromRemoteReturnsTrueIfOneVersionExists()
Definition: DependencyUtilityTest.php:272