22 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
37 protected function setUp()
39 $this->objectManagerMock = $this->getMockBuilder(\
TYPO3\CMS\
Extbase\Object\ObjectManagerInterface::class)->getMock();
48 $dependencyMock = $this->getMockBuilder(Dependency::class)
49 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
51 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'15.0.0'));
52 $dependencyMock->setIdentifier(
'typo3');
53 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
55 $this->expectException(ExtensionManagerException::class);
56 $this->expectExceptionCode(1399144499);
57 $dependencyUtility->_call(
'checkTypo3Dependency', $dependencyMock);
66 $dependencyMock = $this->getMockBuilder(Dependency::class)
67 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
69 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'3.0.0'));
70 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
71 $dependencyMock->setIdentifier(
'typo3');
72 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
74 $this->expectException(ExtensionManagerException::class);
75 $this->expectExceptionCode(1399144521);
76 $dependencyUtility->_call(
'checkTypo3Dependency', $dependencyMock);
85 $dependencyMock = $this->getMockBuilder(Dependency::class)
86 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
88 $dependencyMock->setIdentifier(
'123');
89 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
91 $this->expectException(ExtensionManagerException::class);
92 $this->expectExceptionCode(1399144551);
93 $dependencyUtility->_call(
'checkTypo3Dependency', $dependencyMock);
102 $dependencyMock = $this->getMockBuilder(Dependency::class)
103 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
105 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'15.0.0'));
106 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
107 $dependencyMock->setIdentifier(
'typo3');
108 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
110 $this->assertTrue($dependencyUtility->_call(
'checkTypo3Dependency', $dependencyMock));
119 $dependencyMock = $this->getMockBuilder(Dependency::class)
120 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
122 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
''));
123 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
124 $dependencyMock->setIdentifier(
'typo3');
125 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
127 $this->assertTrue($dependencyUtility->_call(
'checkTypo3Dependency', $dependencyMock));
136 $dependencyMock = $this->getMockBuilder(Dependency::class)
137 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
139 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'15.0.0'));
140 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
''));
141 $dependencyMock->setIdentifier(
'typo3');
142 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
144 $this->assertTrue($dependencyUtility->_call(
'checkTypo3Dependency', $dependencyMock));
153 $dependencyMock = $this->getMockBuilder(Dependency::class)
154 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
156 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'15.0.0'));
157 $dependencyMock->setIdentifier(
'php');
158 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
160 $this->expectException(ExtensionManagerException::class);
161 $this->expectExceptionCode(1377977857);
162 $dependencyUtility->_call(
'checkPhpDependency', $dependencyMock);
171 $dependencyMock = $this->getMockBuilder(Dependency::class)
172 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
174 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'3.0.0'));
175 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
176 $dependencyMock->setIdentifier(
'php');
177 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
179 $this->expectException(ExtensionManagerException::class);
180 $this->expectExceptionCode(1377977856);
181 $dependencyUtility->_call(
'checkPhpDependency', $dependencyMock);
190 $dependencyMock = $this->getMockBuilder(Dependency::class)
191 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
193 $dependencyMock->setIdentifier(
'123');
194 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
196 $this->expectException(ExtensionManagerException::class);
197 $this->expectExceptionCode(1377977858);
198 $dependencyUtility->_call(
'checkPhpDependency', $dependencyMock);
207 $dependencyMock = $this->getMockBuilder(Dependency::class)
208 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
210 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'15.0.0'));
211 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
212 $dependencyMock->setIdentifier(
'php');
213 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
215 $this->assertTrue($dependencyUtility->_call(
'checkPhpDependency', $dependencyMock));
224 $dependencyMock = $this->getMockBuilder(Dependency::class)
225 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
227 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
''));
228 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
229 $dependencyMock->setIdentifier(
'php');
230 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
232 $this->assertTrue($dependencyUtility->_call(
'checkPhpDependency', $dependencyMock));
241 $dependencyMock = $this->getMockBuilder(Dependency::class)
242 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
244 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'15.0.0'));
245 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
''));
246 $dependencyMock->setIdentifier(
'php');
247 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
249 $this->assertTrue($dependencyUtility->_call(
'checkPhpDependency', $dependencyMock));
258 $extensionMock = $this->getMockBuilder(Extension::class)
259 ->setMethods([
'dummy'])
262 $dependencyMock = $this->getMockBuilder(Dependency::class)
263 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
265 $dependencyMock->setIdentifier(
'php');
266 $dependencyStorage = new \SplObjectStorage();
267 $dependencyStorage->attach($dependencyMock);
268 $extensionMock->setDependencies($dependencyStorage);
270 $dependencyUtility = $this->getMockBuilder(DependencyUtility::class)
271 ->setMethods([
'checkPhpDependency',
'checkTypo3Dependency'])
273 $dependencyUtility->expects($this->atLeastOnce())->method(
'checkPhpDependency');
274 $dependencyUtility->checkDependencies($extensionMock);
283 $extensionMock = $this->getMockBuilder(Extension::class)
284 ->setMethods([
'dummy'])
287 $dependencyMock = $this->getMockBuilder(Dependency::class)
288 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
290 $dependencyMock->setIdentifier(
'typo3');
291 $dependencyStorage = new \SplObjectStorage();
292 $dependencyStorage->attach($dependencyMock);
293 $extensionMock->setDependencies($dependencyStorage);
295 $dependencyUtility = $this->getMockBuilder(DependencyUtility::class)
296 ->setMethods([
'checkPhpDependency',
'checkTypo3Dependency'])
299 $dependencyUtility->expects($this->atLeastOnce())->method(
'checkTypo3Dependency');
300 $dependencyUtility->checkDependencies($extensionMock);
309 $dependencyMock = $this->getMockBuilder(Dependency::class)
310 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
312 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'15.0.0'));
313 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
315 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
317 $this->assertTrue($dependencyUtility->_call(
'isVersionCompatible', $version, $dependencyMock));
326 $dependencyMock = $this->getMockBuilder(Dependency::class)
327 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
329 $dependencyMock->expects($this->atLeastOnce())->method(
'getHighestVersion')->will($this->returnValue(
'1.0.1'));
330 $dependencyMock->expects($this->atLeastOnce())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
332 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
334 $this->assertFalse($dependencyUtility->_call(
'isVersionCompatible', $version, $dependencyMock));
342 $availableExtensions = [
347 $listUtilityMock = $this->getMockBuilder(\
TYPO3\CMS\Extensionmanager\Utility\ListUtility::class)
348 ->setMethods([
'getAvailableExtensions'])
350 $listUtilityMock->expects($this->atLeastOnce())->method(
'getAvailableExtensions')->will($this->returnValue($availableExtensions));
351 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
352 $dependencyUtility->_set(
'listUtility', $listUtilityMock);
354 $this->assertTrue($dependencyUtility->_call(
'isDependentExtensionAvailable',
'dummy'));
362 $availableExtensions = [
367 $listUtilityMock = $this->getMockBuilder(\
TYPO3\CMS\Extensionmanager\Utility\ListUtility::class)
368 ->setMethods([
'getAvailableExtensions'])
370 $listUtilityMock->expects($this->atLeastOnce())->method(
'getAvailableExtensions')->will($this->returnValue($availableExtensions));
371 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
372 $dependencyUtility->_set(
'listUtility', $listUtilityMock);
374 $this->assertFalse($dependencyUtility->_call(
'isDependentExtensionAvailable',
'42'));
382 $emConfUtility = $this->getMockBuilder(\
TYPO3\CMS\Extensionmanager\Utility\EmConfUtility::class)
383 ->setMethods([
'includeEmConf'])
385 $emConfUtility->expects($this->once())->method(
'includeEmConf')->will($this->returnValue([
389 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'setAvailableExtensions',
'isVersionCompatible']);
390 $dependencyMock = $this->getMockBuilder(Dependency::class)
391 ->setMethods([
'getIdentifier'])
393 $dependencyMock->expects($this->once())->method(
'getIdentifier')->will($this->returnValue(
'dummy'));
394 $dependencyUtility->_set(
'emConfUtility', $emConfUtility);
395 $dependencyUtility->_set(
'availableExtensions', [
400 $dependencyUtility->expects($this->once())->method(
'setAvailableExtensions');
401 $dependencyUtility->expects($this->once())->method(
'isVersionCompatible')->with(
'1.0.0', $this->anything());
402 $dependencyUtility->_call(
'isAvailableVersionCompatible', $dependencyMock);
410 $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
411 ->setMethods([
'countByExtensionKey'])
412 ->setConstructorArgs([$this->objectManagerMock])
414 $extensionRepositoryMock->expects($this->once())->method(
'countByExtensionKey')->with(
'test123')->will($this->returnValue(1));
415 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
416 $dependencyUtility->_set(
'extensionRepository', $extensionRepositoryMock);
417 $count = $dependencyUtility->_call(
'isExtensionDownloadableFromTer',
'test123');
419 $this->assertTrue($count);
427 $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
428 ->setMethods([
'countByExtensionKey'])
429 ->setConstructorArgs([$this->objectManagerMock])
431 $extensionRepositoryMock->expects($this->once())->method(
'countByExtensionKey')->with(
'test123')->will($this->returnValue(0));
432 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
433 $dependencyUtility->_set(
'extensionRepository', $extensionRepositoryMock);
434 $count = $dependencyUtility->_call(
'isExtensionDownloadableFromTer',
'test123');
436 $this->assertFalse($count);
444 $dependencyMock = $this->getMockBuilder(Dependency::class)
445 ->setMethods([
'getIdentifier',
'getHighestVersion',
'getLowestVersion'])
447 $dependencyMock->expects($this->once())->method(
'getIdentifier')->will($this->returnValue(
'dummy'));
448 $dependencyMock->expects($this->once())->method(
'getHighestVersion')->will($this->returnValue(
'10.0.0'));
449 $dependencyMock->expects($this->once())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
450 $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
451 ->setMethods([
'countByVersionRangeAndExtensionKey'])
452 ->setConstructorArgs([$this->objectManagerMock])
454 $extensionRepositoryMock->expects($this->once())->method(
'countByVersionRangeAndExtensionKey')->with(
'dummy', 1000000, 10000000)->will($this->returnValue(2));
455 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
456 $dependencyUtility->_set(
'extensionRepository', $extensionRepositoryMock);
457 $count = $dependencyUtility->_call(
'isDownloadableVersionCompatible', $dependencyMock);
459 $this->assertTrue($count);
467 $dependencyMock = $this->getMockBuilder(Dependency::class)
468 ->setMethods([
'getIdentifier'])
470 $dependencyMock->expects($this->once())->method(
'getIdentifier')->will($this->returnValue(
'dummy'));
471 $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
472 ->setMethods([
'countByVersionRangeAndExtensionKey'])
473 ->setConstructorArgs([$this->objectManagerMock])
475 $extensionRepositoryMock->expects($this->once())->method(
'countByVersionRangeAndExtensionKey')->with(
'dummy', 1000000, 2000000)->will($this->returnValue(0));
476 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'getLowestAndHighestIntegerVersions']);
477 $dependencyUtility->_set(
'extensionRepository', $extensionRepositoryMock);
478 $dependencyUtility->expects($this->once())->method(
'getLowestAndHighestIntegerVersions')->will($this->returnValue([
479 'lowestIntegerVersion' => 1000000,
480 'highestIntegerVersion' => 2000000
482 $count = $dependencyUtility->_call(
'isDownloadableVersionCompatible', $dependencyMock);
484 $this->assertFalse($count);
492 $expectedVersions = [
493 'lowestIntegerVersion' => 1000000,
494 'highestIntegerVersion' => 2000000
497 $dependencyMock = $this->getMockBuilder(Dependency::class)
498 ->setMethods([
'getHighestVersion',
'getLowestVersion'])
500 $dependencyMock->expects($this->once())->method(
'getHighestVersion')->will($this->returnValue(
'2.0.0'));
501 $dependencyMock->expects($this->once())->method(
'getLowestVersion')->will($this->returnValue(
'1.0.0'));
502 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'dummy']);
503 $versions = $dependencyUtility->_call(
'getLowestAndHighestIntegerVersions', $dependencyMock);
505 $this->assertSame($expectedVersions, $versions);
514 $suitableDependency->setIdentifier(
'typo3');
515 $suitableDependency->setLowestVersion(
'3.6.1');
517 $suitableDependencies = new \SplObjectStorage();
518 $suitableDependencies->attach($suitableDependency);
521 $unsuitableDependency->setIdentifier(
'typo3');
522 $unsuitableDependency->setHighestVersion(
'4.3.0');
524 $unsuitableDependencies = new \SplObjectStorage();
525 $unsuitableDependencies->attach($unsuitableDependency);
528 $extension1->setExtensionKey(
'foo');
529 $extension1->setVersion(
'1.0.0');
530 $extension1->setDependencies($unsuitableDependencies);
533 $extension2->setExtensionKey(
'bar');
534 $extension2->setVersion(
'1.0.42');
535 $extension2->setDependencies($suitableDependencies);
537 $myStorage = new \TYPO3\CMS\Extensionmanager\Tests\Unit\Fixtures\LatestCompatibleExtensionObjectStorageFixture();
538 $myStorage->extensions[] = $extension1;
539 $myStorage->extensions[] = $extension2;
540 $dependencyMock = $this->getMockBuilder(Dependency::class)
541 ->setMethods([
'getIdentifier'])
543 $dependencyMock->expects($this->once())->method(
'getIdentifier')->will($this->returnValue(
'foobar'));
544 $dependencyUtility = $this->getAccessibleMock(DependencyUtility::class, [
'getLowestAndHighestIntegerVersions']);
545 $dependencyUtility->expects($this->once())->method(
'getLowestAndHighestIntegerVersions')->will($this->returnValue([
546 'lowestIntegerVersion' => 1000000,
547 'highestIntegerVersion' => 2000000
549 $extensionRepositoryMock = $this->getMockBuilder(ExtensionRepository::class)
550 ->setMethods([
'findByVersionRangeAndExtensionKeyOrderedByVersion'])
551 ->setConstructorArgs([$this->objectManagerMock])
553 $extensionRepositoryMock->expects($this->once())->method(
'findByVersionRangeAndExtensionKeyOrderedByVersion')->with(
'foobar', 1000000, 2000000)->will($this->returnValue($myStorage));
554 $dependencyUtility->_set(
'extensionRepository', $extensionRepositoryMock);
555 $extension = $dependencyUtility->_call(
'getLatestCompatibleExtensionByIntegerVersionDependency', $dependencyMock);
557 $this->assertInstanceOf(Extension::class, $extension);
558 $this->assertSame(
'bar', $extension->getExtensionKey());
568 $foo1->setExtensionKey(
'foo');
569 $foo1->setVersion(
'1.0.0');
571 $foo2->setExtensionKey(
'foo');
572 $foo2->setVersion(
'1.0.1');
576 $bar1->setExtensionKey(
'bar');
577 $bar1->setVersion(
'1.1.2');
579 $bar2->setExtensionKey(
'bar');
580 $bar2->setVersion(
'1.1.1');
582 $bar3->setExtensionKey(
'bar');
583 $bar3->setVersion(
'1.0.3');
585 $input = [$foo1, $foo2, $bar1, $bar2, $bar3];
586 $this->assertEquals([
'foo' => $foo2,
'bar' => $bar1], (
new DependencyUtility())->filterYoungestVersionOfExtensionList($input,
true));
595 $suitableDependency->setIdentifier(
'typo3');
596 $suitableDependency->setLowestVersion(
'3.6.1');
598 $suitableDependencies = new \SplObjectStorage();
599 $suitableDependencies->attach($suitableDependency);
602 $unsuitableDependency->setIdentifier(
'typo3');
603 $unsuitableDependency->setHighestVersion(
'4.3.0');
605 $unsuitableDependencies = new \SplObjectStorage();
606 $unsuitableDependencies->attach($unsuitableDependency);
610 $foo1->setExtensionKey(
'foo');
611 $foo1->setVersion(
'1.0.0');
612 $foo1->setDependencies($suitableDependencies);
615 $foo2->setExtensionKey(
'foo');
616 $foo2->setVersion(
'1.0.1');
617 $foo2->setDependencies($unsuitableDependencies);
621 $bar1->setExtensionKey(
'bar');
622 $bar1->setVersion(
'1.1.2');
623 $bar1->setDependencies($unsuitableDependencies);
626 $bar2->setExtensionKey(
'bar');
627 $bar2->setVersion(
'1.1.1');
628 $bar2->setDependencies($suitableDependencies);
630 $input = [$foo1, $foo2, $bar1, $bar2];
631 $this->assertEquals([
'foo' => $foo1,
'bar' => $bar2], (
new DependencyUtility())->filterYoungestVersionOfExtensionList($input,
false));