PageRenderTime 71ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/typo3/sysext/core/Tests/Unit_Deprecated/Utility/ExtensionManagementUtilityTest.php

https://github.com/andreaswolf/TYPO3.CMS
PHP | 277 lines | 185 code | 16 blank | 76 comment | 0 complexity | 05e22bdd18accd8761b2f440b88f7272 MD5 | raw file
  1. <?php
  2. namespace TYPO3\CMS\Core\Tests\Unit\Utility;
  3. /*
  4. * This file is part of the TYPO3 CMS project.
  5. *
  6. * It is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU General Public License, either version 2
  8. * of the License, or any later version.
  9. *
  10. * For the full copyright and license information, please read the
  11. * LICENSE.txt file that was distributed with this source code.
  12. *
  13. * The TYPO3 project - inspiring people to share!
  14. */
  15. use TYPO3\CMS\Core\Cache\CacheManager;
  16. use TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray;
  17. use TYPO3\CMS\Core\Package\Package;
  18. use TYPO3\CMS\Core\Package\PackageManager;
  19. use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy;
  20. use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
  21. use TYPO3\CMS\Core\Utility\GeneralUtility;
  22. /**
  23. * Test case
  24. */
  25. class ExtensionManagementUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
  26. {
  27. /**
  28. * @var array A backup of registered singleton instances
  29. */
  30. protected $singletonInstances = [];
  31. /**
  32. * @var \TYPO3\CMS\Core\Package\PackageManager
  33. */
  34. protected $backUpPackageManager;
  35. protected function setUp()
  36. {
  37. $this->singletonInstances = GeneralUtility::getSingletonInstances();
  38. $this->backUpPackageManager = ExtensionManagementUtilityAccessibleProxy::getPackageManager();
  39. $this->singletonInstances = GeneralUtility::getSingletonInstances();
  40. }
  41. protected function tearDown()
  42. {
  43. ExtensionManagementUtility::clearExtensionKeyMap();
  44. ExtensionManagementUtilityAccessibleProxy::setPackageManager($this->backUpPackageManager);
  45. ExtensionManagementUtilityAccessibleProxy::setCacheManager(null);
  46. $GLOBALS['TYPO3_LOADED_EXT'] = new LoadedExtensionsArray($this->backUpPackageManager);
  47. GeneralUtility::resetSingletonInstances($this->singletonInstances);
  48. parent::tearDown();
  49. }
  50. /**
  51. * @param string $packageKey
  52. * @param array $packageMethods
  53. * @return PackageManager|\PHPUnit_Framework_MockObject_MockObject
  54. */
  55. protected function createMockPackageManagerWithMockPackage($packageKey, $packageMethods = ['getPackagePath', 'getPackageKey'])
  56. {
  57. $packagePath = PATH_site . 'typo3temp/var/tests/' . $packageKey . '/';
  58. GeneralUtility::mkdir_deep($packagePath);
  59. $this->testFilesToDelete[] = $packagePath;
  60. $package = $this->getMockBuilder(Package::class)
  61. ->disableOriginalConstructor()
  62. ->setMethods($packageMethods)
  63. ->getMock();
  64. $packageManager = $this->getMockBuilder(PackageManager::class)
  65. ->setMethods(['isPackageActive', 'getPackage', 'getActivePackages'])
  66. ->getMock();
  67. $package->expects($this->any())
  68. ->method('getPackagePath')
  69. ->will($this->returnValue($packagePath));
  70. $package->expects($this->any())
  71. ->method('getPackageKey')
  72. ->will($this->returnValue($packageKey));
  73. $packageManager->expects($this->any())
  74. ->method('isPackageActive')
  75. ->will($this->returnValueMap([
  76. [null, false],
  77. [$packageKey, true]
  78. ]));
  79. $packageManager->expects($this->any())
  80. ->method('getPackage')
  81. ->with($this->equalTo($packageKey))
  82. ->will($this->returnValue($package));
  83. $packageManager->expects($this->any())
  84. ->method('getActivePackages')
  85. ->will($this->returnValue([$packageKey => $package]));
  86. return $packageManager;
  87. }
  88. ///////////////////////////////
  89. // Tests concerning isLoaded
  90. ///////////////////////////////
  91. /**
  92. * @test
  93. */
  94. public function isLoadedReturnsFalseIfExtensionIsNotLoadedAndExitIsDisabled()
  95. {
  96. $this->assertFalse(ExtensionManagementUtility::isLoaded($this->getUniqueId('foobar'), false));
  97. }
  98. ///////////////////////////////
  99. // Tests concerning extPath
  100. ///////////////////////////////
  101. /**
  102. * @test
  103. */
  104. public function extPathThrowsExceptionIfExtensionIsNotLoaded()
  105. {
  106. $this->expectException(\BadFunctionCallException::class);
  107. $this->expectExceptionCode(1365429656);
  108. $packageName = $this->getUniqueId('foo');
  109. /** @var PackageManager|\PHPUnit_Framework_MockObject_MockObject $packageManager */
  110. $packageManager = $this->getMockBuilder(PackageManager::class)
  111. ->setMethods(['isPackageActive'])
  112. ->getMock();
  113. $packageManager->expects($this->once())
  114. ->method('isPackageActive')
  115. ->with($this->equalTo($packageName))
  116. ->will($this->returnValue(false));
  117. ExtensionManagementUtility::setPackageManager($packageManager);
  118. ExtensionManagementUtility::extPath($packageName);
  119. }
  120. /**
  121. * @test
  122. */
  123. public function extPathAppendsScriptNameToPath()
  124. {
  125. $package = $this->getMockBuilder(Package::class)
  126. ->disableOriginalConstructor()
  127. ->setMethods(['getPackagePath'])
  128. ->getMock();
  129. /** @var PackageManager|\PHPUnit_Framework_MockObject_MockObject $packageManager */
  130. $packageManager = $this->getMockBuilder(PackageManager::class)
  131. ->setMethods(['isPackageActive', 'getPackage'])
  132. ->getMock();
  133. $package->expects($this->once())
  134. ->method('getPackagePath')
  135. ->will($this->returnValue(PATH_site . 'foo/'));
  136. $packageManager->expects($this->once())
  137. ->method('isPackageActive')
  138. ->with($this->equalTo('foo'))
  139. ->will($this->returnValue(true));
  140. $packageManager->expects($this->once())
  141. ->method('getPackage')
  142. ->with('foo')
  143. ->will($this->returnValue($package));
  144. ExtensionManagementUtility::setPackageManager($packageManager);
  145. $this->assertSame(PATH_site . 'foo/bar.txt', ExtensionManagementUtility::extPath('foo', 'bar.txt'));
  146. }
  147. //////////////////////
  148. // Utility functions
  149. //////////////////////
  150. /**
  151. * Generates a basic TCA for a given table.
  152. *
  153. * @param string $table name of the table, must not be empty
  154. * @return array generated TCA for the given table, will not be empty
  155. */
  156. private function generateTCAForTable($table)
  157. {
  158. $tca = [];
  159. $tca[$table] = [];
  160. $tca[$table]['columns'] = [
  161. 'fieldA' => [],
  162. 'fieldC' => []
  163. ];
  164. $tca[$table]['types'] = [
  165. 'typeA' => ['showitem' => 'fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1'],
  166. 'typeB' => ['showitem' => 'fieldA, fieldB, fieldC;labelC, --palette--;;paletteC, fieldC1, fieldD, fieldD1'],
  167. 'typeC' => ['showitem' => 'fieldC;;paletteD']
  168. ];
  169. $tca[$table]['palettes'] = [
  170. 'paletteA' => ['showitem' => 'fieldX, fieldX1, fieldY'],
  171. 'paletteB' => ['showitem' => 'fieldX, fieldX1, fieldY'],
  172. 'paletteC' => ['showitem' => 'fieldX, fieldX1, fieldY'],
  173. 'paletteD' => ['showitem' => 'fieldX, fieldX1, fieldY']
  174. ];
  175. return $tca;
  176. }
  177. /////////////////////////////////////////////
  178. // Tests concerning getExtensionKeyByPrefix
  179. /////////////////////////////////////////////
  180. /**
  181. * @test
  182. * @see ExtensionManagementUtility::getExtensionKeyByPrefix
  183. */
  184. public function getExtensionKeyByPrefixForLoadedExtensionWithUnderscoresReturnsExtensionKey()
  185. {
  186. ExtensionManagementUtility::clearExtensionKeyMap();
  187. $uniqueSuffix = $this->getUniqueId('test');
  188. $extensionKey = 'tt_news' . $uniqueSuffix;
  189. $extensionPrefix = 'tx_ttnews' . $uniqueSuffix;
  190. $package = $this->getMockBuilder(Package::class)
  191. ->disableOriginalConstructor()
  192. ->setMethods(['getPackageKey'])
  193. ->getMock();
  194. $package->expects($this->exactly(2))
  195. ->method('getPackageKey')
  196. ->will($this->returnValue($extensionKey));
  197. /** @var PackageManager|\PHPUnit_Framework_MockObject_MockObject $packageManager */
  198. $packageManager = $this->getMockBuilder(PackageManager::class)
  199. ->setMethods(['getActivePackages'])
  200. ->getMock();
  201. $packageManager->expects($this->once())
  202. ->method('getActivePackages')
  203. ->will($this->returnValue([$extensionKey => $package]));
  204. ExtensionManagementUtility::setPackageManager($packageManager);
  205. $this->assertEquals($extensionKey, ExtensionManagementUtility::getExtensionKeyByPrefix($extensionPrefix));
  206. }
  207. /**
  208. * @test
  209. * @see ExtensionManagementUtility::getExtensionKeyByPrefix
  210. */
  211. public function getExtensionKeyByPrefixForLoadedExtensionWithoutUnderscoresReturnsExtensionKey()
  212. {
  213. ExtensionManagementUtility::clearExtensionKeyMap();
  214. $uniqueSuffix = $this->getUniqueId('test');
  215. $extensionKey = 'kickstarter' . $uniqueSuffix;
  216. $extensionPrefix = 'tx_kickstarter' . $uniqueSuffix;
  217. $package = $this->getMockBuilder(Package::class)
  218. ->disableOriginalConstructor()
  219. ->setMethods(['getPackageKey'])
  220. ->getMock();
  221. $package->expects($this->exactly(2))
  222. ->method('getPackageKey')
  223. ->will($this->returnValue($extensionKey));
  224. /** @var PackageManager|\PHPUnit_Framework_MockObject_MockObject $packageManager */
  225. $packageManager = $this->getMockBuilder(PackageManager::class)
  226. ->setMethods(['getActivePackages'])
  227. ->getMock();
  228. $packageManager->expects($this->once())
  229. ->method('getActivePackages')
  230. ->will($this->returnValue([$extensionKey => $package]));
  231. ExtensionManagementUtility::setPackageManager($packageManager);
  232. $this->assertEquals($extensionKey, ExtensionManagementUtility::getExtensionKeyByPrefix($extensionPrefix));
  233. }
  234. /**
  235. * @test
  236. * @see ExtensionManagementUtility::getExtensionKeyByPrefix
  237. */
  238. public function getExtensionKeyByPrefixForNotLoadedExtensionReturnsFalse()
  239. {
  240. ExtensionManagementUtility::clearExtensionKeyMap();
  241. $uniqueSuffix = $this->getUniqueId('test');
  242. $extensionPrefix = 'tx_unloadedextension' . $uniqueSuffix;
  243. $this->assertFalse(ExtensionManagementUtility::getExtensionKeyByPrefix($extensionPrefix));
  244. }
  245. /////////////////////////////////////////
  246. // Tests concerning removeCacheFiles
  247. /////////////////////////////////////////
  248. /**
  249. * @test
  250. */
  251. public function removeCacheFilesFlushesSystemCaches()
  252. {
  253. /** @var CacheManager|\PHPUnit_Framework_MockObject_MockObject $mockCacheManager */
  254. $mockCacheManager = $this->getMockBuilder(CacheManager::class)
  255. ->setMethods(['flushCachesInGroup'])
  256. ->getMock();
  257. $mockCacheManager->expects($this->once())->method('flushCachesInGroup')->with('system');
  258. ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
  259. ExtensionManagementUtility::removeCacheFiles();
  260. }
  261. }