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