2 namespace TYPO3\CMS\Install\Tests\Unit\Controller\Action\Ajax
;
5 * This file is part of the TYPO3 CMS project.
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
14 * The TYPO3 project - inspiring people to share!
17 use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy
;
18 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility
;
19 use TYPO3\CMS\Core\Utility\GeneralUtility
;
24 class ExtensionCompatibilityTesterTest
extends \TYPO3\CMS\Core\Tests\UnitTestCase
27 * @var \TYPO3\CMS\Core\Package\UnitTestPackageManager A backup of unit test package manager
29 protected $backupPackageManager = null;
34 protected function setUp()
36 $this->backupPackageManager
= ExtensionManagementUtilityAccessibleProxy
::getPackageManager();
42 protected function tearDown()
44 ExtensionManagementUtilityAccessibleProxy
::setPackageManager($this->backupPackageManager
);
45 if (file_exists(PATH_site
. 'typo3temp/assets/ExtensionCompatibilityTester.txt')) {
46 unlink(PATH_site
. 'typo3temp/assets/ExtensionCompatibilityTester.txt');
54 public function getExtensionsToLoadGetsExtensionsWithoutExcluded()
56 $GLOBALS['TYPO3_LOADED_EXT'] = array(
60 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('getExtensionsToExclude'), array());
61 $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToExclude')->will($this->returnValue(array('info')));
62 $result = $extensionCompatibilityTesterMock->_call('getExtensionsToLoad');
63 $this->assertEquals(array('news' => ''), $result);
69 public function executeActionReturnsStringOkIfAllIsWell()
71 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('getExtensionsToLoad', 'tryToLoadExtLocalconfAndExtTablesOfExtensions', 'deleteProtocolFile'), array());
72 $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue(array()));
73 $result = $extensionCompatibilityTesterMock->_call('executeAction');
74 $this->assertEquals('OK', $result);
80 public function executeActionCallsGetExtensionsToLoad()
82 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('getExtensionsToLoad', 'deleteProtocolFile', 'tryToLoadExtLocalconfAndExtTablesOfExtensions'), array());
83 $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue(array()));
84 $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad');
85 $extensionCompatibilityTesterMock->_call('executeAction');
91 public function executeActionCallsLoadExtensions()
93 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('tryToLoadExtLocalconfAndExtTablesOfExtensions', 'getExtensionsToLoad', 'deleteProtocolFile'), array());
94 $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue(array()));
95 $extensionCompatibilityTesterMock->expects($this->once())->method('tryToLoadExtLocalconfAndExtTablesOfExtensions');
96 $extensionCompatibilityTesterMock->_call('executeAction');
102 public function executeActionCallsDeleteProtocolFileIfForceCheckIsSet()
104 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('tryToLoadExtLocalconfAndExtTablesOfExtensions', 'getExtensionsToLoad', 'deleteProtocolFile'), array());
105 $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue(array()));
106 $_GET['install']['extensionCompatibilityTester']['forceCheck'] = 1;
107 $extensionCompatibilityTesterMock->expects($this->once())->method('deleteProtocolFile');
108 $extensionCompatibilityTesterMock->_call('executeAction');
109 unset($_GET['install']['extensionCompatibilityTester']['forceCheck']);
115 public function deleteProtocolFileDeletesFile()
117 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('dummy'), array());
118 GeneralUtility
::writeFile(PATH_site
. 'typo3temp/assets/ExtensionCompatibilityTester.txt', 'foobar');
119 $extensionCompatibilityTesterMock->_call('deleteProtocolFile');
120 $this->assertFalse(file_exists(PATH_site
. 'typo3temp/assets/ExtensionCompatibilityTester.txt'));
126 public function tryToLoadExtLocalconfAndExtTablesOfExtensionsCallsLoadExtTablesForExtension()
128 // tryToLoadExtLocalconfAndExtTablesOfExtensions() triggers a call to ExtensionManagementUtility::loadBaseTca
129 // that works on our UnitTestPackageManager to do things. This package manager needs to be mocked here to
130 // not trigger unwanted side effects.
131 $packageManager = $this->getMock(\TYPO3\CMS\Core\Package\PackageManager
::class, array(), array(), '', false);
132 $packageManager->expects($this->any())->method('getActivePackages')->will($this->returnValue(array()));
133 ExtensionManagementUtility
::setPackageManager($packageManager);
138 'ext_tables.php' => PATH_typo3
. 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_tables.php'
141 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'), array());
142 $extensionCompatibilityTesterMock->expects($this->atLeastOnce())->method('loadExtTablesForExtension');
143 $extensionCompatibilityTesterMock->_call('tryToLoadExtLocalconfAndExtTablesOfExtensions', $extension);
149 public function tryToLoadExtLocalconfAndExtTablesOfExtensionsCallsLoadExtLocalconfForExtension()
151 // tryToLoadExtLocalconfAndExtTablesOfExtensions() triggers a call to ExtensionManagementUtility::loadBaseTca
152 // that works on our UnitTestPackageManager to do things. This package manager needs to be mocked here to
153 // not trigger unwanted side effects.
154 $packageManager = $this->getMock(\TYPO3\CMS\Core\Package\PackageManager
::class, array(), array(), '', false);
155 $packageManager->expects($this->any())->method('getActivePackages')->will($this->returnValue(array()));
156 ExtensionManagementUtility
::setPackageManager($packageManager);
161 'ext_localconf.php' => PATH_typo3
. 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_localconf.php'
164 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'), array());
165 $extensionCompatibilityTesterMock->expects($this->atLeastOnce())->method('loadExtLocalconfForExtension');
166 $extensionCompatibilityTesterMock->_call('tryToLoadExtLocalconfAndExtTablesOfExtensions', $extension);
172 public function loadExtLocalconfForExtensionIncludesExtLocalconfPhp()
177 'ext_localconf.php' => PATH_typo3
. 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_localconf.php'
180 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('dummy'), array());
181 $extensionCompatibilityTesterMock->_call('loadExtLocalconfForExtension', 'demo1', $extension['demo1']);
182 $this->assertArrayHasKey('demo1_executed', $GLOBALS);
183 $this->assertEquals('foobaz', $GLOBALS['demo1_executed']);
184 unset($GLOBALS['demo1_executed']);
190 public function tryToLoadExtLocalconfAndExtTablesOfExtensionsCallsWriteCurrentExtensionToFile()
192 // tryToLoadExtLocalconfAndExtTablesOfExtensions() triggers a call to ExtensionManagementUtility::loadBaseTca
193 // that works on our UnitTestPackageManager to do things. This package manager needs to be mocked here to
194 // not trigger unwanted side effects.
195 $packageManager = $this->getMock(\TYPO3\CMS\Core\Package\PackageManager
::class, array(), array(), '', false);
196 $packageManager->expects($this->any())->method('getActivePackages')->will($this->returnValue(array()));
197 ExtensionManagementUtility
::setPackageManager($packageManager);
202 'ext_tables.php' => PATH_typo3
. 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_tables.php'
205 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'), array());
206 $extensionCompatibilityTesterMock->expects($this->atLeastOnce())->method('writeCurrentExtensionToFile')->with('demo1');
207 $extensionCompatibilityTesterMock->_call('tryToLoadExtLocalconfAndExtTablesOfExtensions', $extension);
213 public function writeCurrentExtensionToFileWritesExtensionKeyToFile()
215 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('dummy'), array());
216 $extensionCompatibilityTesterMock->_call('writeCurrentExtensionToFile', 'demo1');
217 $fileContent = file_get_contents($extensionCompatibilityTesterMock->_get('protocolFile'));
218 $this->assertEquals('demo1', $fileContent);
224 public function getExtensionsToExcludeReturnsArray()
226 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('dummy'), array());
227 $returnValue = $extensionCompatibilityTesterMock->_call('getExtensionsToExclude');
228 $this->assertInternalType('array', $returnValue);
232 * removeCurrentExtensionFromFileRemovesGivenExtensionDataProvider
236 public function removeCurrentExtensionFromFileRemovesGivenExtensionDataProvider()
241 'demo1, demo2, demo3',
246 'demo1, demo2, demo3',
251 'demo1, demo2, demo3',
259 * @dataProvider removeCurrentExtensionFromFileRemovesGivenExtensionDataProvider
261 public function removeCurrentExtensionFromFileRemovesGivenExtension($extensionToRemove, $extensions, $expectedExtensions)
263 $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester
::class, array('dummy'), array());
264 GeneralUtility
::writeFile($extensionCompatibilityTesterMock->_get('protocolFile'), $extensions);
265 $extensionCompatibilityTesterMock->_call('removeCurrentExtensionFromFile', $extensionToRemove);
267 $fileContent = file_get_contents($extensionCompatibilityTesterMock->_get('protocolFile'));
268 $this->assertEquals($expectedExtensions, $fileContent);