2 namespace TYPO3\CMS\Extensionmanager\Tests\Unit\Service
;
4 /***************************************************************
10 * This script is part of the TYPO3 project. The TYPO3 project is
11 * free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * The GNU General Public License can be found at
17 * http://www.gnu.org/copyleft/gpl.html.
19 * This script is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * This copyright notice MUST APPEAR in all copies of the script!
25 ***************************************************************/
31 class ExtensionManagementServiceTest
extends \TYPO3\CMS\Core\Tests\UnitTestCase
{
37 public function resolveDependenciesCallsDownloadDependenciesIfDownloadKeyExistsInQueue() {
38 $managementMock = $this->getAccessibleMock(
39 'TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService',
40 array('downloadDependencies', 'uninstallDependenciesToBeUpdated', 'setInExtensionRepository', 'downloadMainExtension')
42 $managementMock->expects($this->any())->method('downloadMainExtension')->will($this->returnValue(array()));
43 $extensionModelMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension');
44 $extensionModelMock->_set('extensionKey', 'foobar');
45 $extensionModelMock->_set('version', '1.0.0');
46 $dependencyUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DependencyUtility', array('checkDependencies'));
47 $dependencyUtilityMock->expects($this->atLeastOnce())->method('checkDependencies');
48 $managementMock->_set('dependencyUtility', $dependencyUtilityMock);
49 $downloadQueueMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\DownloadQueue', array('getExtensionQueue', 'addExtensionToInstallQueue'));
50 $downloadQueueMock->expects($this->atLeastOnce())->method('getExtensionQueue')->will($this->returnValue(array(
52 'foo' => $extensionModelMock
55 $managementMock->_set('downloadQueue', $downloadQueueMock);
56 $managementMock->expects($this->once())->method('downloadDependencies')->with(array('foo' => $extensionModelMock))->will($this->returnValue(array()));
57 $managementMock->_call('installExtension', $extensionModelMock);
64 public function resolveDependenciesCallsUpdateAndDownloadDependenciesIfUpdateKeyExistsInQueue() {
65 $managementMock = $this->getAccessibleMock(
66 'TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService',
67 array('downloadDependencies', 'uninstallDependenciesToBeUpdated', 'setInExtensionRepository', 'downloadMainExtension')
69 $managementMock->expects($this->any())->method('downloadMainExtension')->will($this->returnValue(array()));
70 $extensionModelMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension');
71 $extensionModelMock->_set('extensionKey', 'foobar');
72 $extensionModelMock->_set('version', '1.0.0');
73 $dependencyUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DependencyUtility', array('checkDependencies'));
74 $dependencyUtilityMock->expects($this->atLeastOnce())->method('checkDependencies');
75 $managementMock->_set('dependencyUtility', $dependencyUtilityMock);
76 $downloadQueueMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\DownloadQueue', array('getExtensionQueue', 'addExtensionToInstallQueue'));
77 $downloadQueueMock->expects($this->atLeastOnce())->method('getExtensionQueue')->will($this->returnValue(array(
79 'foo' => $extensionModelMock
82 $managementMock->_set('downloadQueue', $downloadQueueMock);
83 $managementMock->expects($this->once())->method('downloadDependencies')->with(array('foo' => $extensionModelMock))->will($this->returnValue(array()));
84 $managementMock->expects($this->once())->method('uninstallDependenciesToBeUpdated')->with(array('foo' => $extensionModelMock))->will($this->returnValue(array()));
85 $managementMock->_call('installExtension', $extensionModelMock);
92 public function downloadDependenciesCallsDownloadUtilityDownloadMethod() {
93 $managementMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService', array(
97 $extensionModelMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension', array('getExtensionKey'));
98 $extensionModelMock->_set('extensionKey', 'foobar');
99 $extensionModelMock->_set('version', '1.0.0');
101 $dependencyUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DependencyUtility');
102 $dependencyUtilityMock->expects($this->atLeastOnce())->method('checkDependencies');
103 $installUtilityMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility');
104 $installUtilityMock->expects($this->any())->method('enrichExtensionWithDetails')->will($this->returnValue(array()));
105 $extensionModelUtilityMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\ExtensionModelUtility');
106 $extensionModelUtilityMock->expects($this->any())->method('mapExtensionArrayToModel')->will($this->returnValue($extensionModelMock));
107 $managementMock->_set('dependencyUtility', $dependencyUtilityMock);
108 $managementMock->_set('installUtility', $installUtilityMock);
109 $managementMock->_set('extensionModelUtility', $extensionModelUtilityMock);
111 $downloadQueue = array(
114 $downloadQueueMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\DownloadQueue', array('removeExtensionFromQueue', 'addExtensionToInstallQueue'));
115 $downloadUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DownloadUtility', array('download'));
116 $downloadUtilityMock->expects($this->once())->method('download')->with($extensionModelMock);
117 $managementMock->_set('downloadUtility', $downloadUtilityMock);
118 $managementMock->_set('downloadQueue', $downloadQueueMock);
119 $managementMock->_call('downloadDependencies', $downloadQueue);
126 public function downloadDependenciesCallsRemoveExtensionFromQueue() {
127 $managementMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService', array(
131 /** @var \TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extensionModelMock */
132 $extensionModelMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension', array('getExtensionKey'));
133 $extensionModelMock->setExtensionKey('foobar');
134 $extensionModelMock->setVersion('1.0.0');
135 $downloadQueue = array(
139 $dependencyUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DependencyUtility');
140 $dependencyUtilityMock->expects($this->atLeastOnce())->method('checkDependencies');
141 $installUtilityMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility');
142 $installUtilityMock->expects($this->any())->method('enrichExtensionWithDetails')->will($this->returnValue(array()));
143 $extensionModelUtilityMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\ExtensionModelUtility');
144 $extensionModelUtilityMock->expects($this->any())->method('mapExtensionArrayToModel')->will($this->returnValue($extensionModelMock));
145 $managementMock->_set('dependencyUtility', $dependencyUtilityMock);
146 $managementMock->_set('installUtility', $installUtilityMock);
147 $managementMock->_set('extensionModelUtility', $extensionModelUtilityMock);
149 $downloadQueueMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\DownloadQueue', array('removeExtensionFromQueue', 'addExtensionToInstallQueue'));
150 $downloadUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DownloadUtility', array('download'));
151 $downloadQueueMock->expects($this->once())->method('removeExtensionFromQueue')->with($extensionModelMock);
152 $managementMock->_set('downloadUtility', $downloadUtilityMock);
153 $managementMock->_set('downloadQueue', $downloadQueueMock);
154 $managementMock->_call('downloadDependencies', $downloadQueue);
161 public function downloadDependenciesReturnsResolvedDependencies() {
162 $managementMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService', array(
166 $extensionModelMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension', array('getExtensionKey'));
167 $extensionModelMock->_set('extensionKey', 'foobar');
168 $extensionModelMock->_set('version', '1.0.0');
169 $downloadQueue = array(
173 $dependencyUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DependencyUtility');
174 $dependencyUtilityMock->expects($this->atLeastOnce())->method('checkDependencies');
175 $installUtilityMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility');
176 $installUtilityMock->expects($this->any())->method('enrichExtensionWithDetails')->will($this->returnValue(array()));
177 $extensionModelUtilityMock = $this->getMock('TYPO3\\CMS\\Extensionmanager\\Utility\\ExtensionModelUtility');
178 $extensionModelUtilityMock->expects($this->any())->method('mapExtensionArrayToModel')->will($this->returnValue($extensionModelMock));
179 $managementMock->_set('dependencyUtility', $dependencyUtilityMock);
180 $managementMock->_set('installUtility', $installUtilityMock);
181 $managementMock->_set('extensionModelUtility', $extensionModelUtilityMock);
183 $downloadQueueMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\DownloadQueue', array('removeExtensionFromQueue', 'addExtensionToInstallQueue'));
184 $downloadUtilityMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\DownloadUtility', array('download'));
185 $extensionModelMock->expects($this->atLeastOnce())->method('getExtensionKey')->will($this->returnValue('foobar'));
186 $managementMock->_set('downloadUtility', $downloadUtilityMock);
187 $managementMock->_set('downloadQueue', $downloadQueueMock);
188 $resolvedDependencies = $managementMock->_call('downloadDependencies', $downloadQueue);
189 $this->assertEquals(array('downloaded' => array('foobar' => $extensionModelMock)), $resolvedDependencies);
196 public function uninstallDependenciesToBeUpdatedCallsUninstall() {
197 $managementMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService', array(
200 $extensionModelMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension', array('getExtensionKey'));
201 $extensionModelMock->_set('extensionKey', 'foobar');
202 $extensionModelMock->_set('version', '1.0.0');
203 $extensionModelMock->expects($this->atLeastOnce())->method('getExtensionKey')->will($this->returnValue('foobar'));
204 $downloadQueue = array(
207 $installUtility = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility', array('uninstall'), array(), '', FALSE);
208 $installUtility->expects($this->once())->method('uninstall')->with('foobar');
209 $managementMock->_set('installUtility', $installUtility);
210 $managementMock->_call('uninstallDependenciesToBeUpdated', $downloadQueue);
217 public function uninstallDependenciesToBeUpdatedReturnsResolvedDependencies() {
218 $managementMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService', array(
221 $extensionModelMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension', array('getExtensionKey'));
222 $extensionModelMock->_set('extensionKey', 'foobar');
223 $extensionModelMock->_set('version', '1.0.0');
224 $extensionModelMock->expects($this->atLeastOnce())->method('getExtensionKey')->will($this->returnValue('foobar'));
225 $downloadQueue = array(
228 $installUtility = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility', array('uninstall'), array(), '', FALSE);
229 $managementMock->_set('installUtility', $installUtility);
230 $resolvedDependencies = $managementMock->_call('uninstallDependenciesToBeUpdated', $downloadQueue);
231 $this->assertEquals(array('updated' => array('foobar' => $extensionModelMock)), $resolvedDependencies);
238 public function installDependenciesCallsInstall() {
239 $managementMock = $this->getAccessibleMock(
240 'TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService',
241 array('emitWillInstallExtensions', 'emitHasInstalledExtension')
243 $installQueue = array(
246 'siteRelPath' => 'path'
249 $installUtility = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility', array('install','emitWillInstallExtensions'), array(), '', FALSE);
250 $installUtility->expects($this->once())->method('install')->with(array(
252 'siteRelPath' => 'path'
254 $managementMock->_set('installUtility', $installUtility);
255 $managementMock->_call('installDependencies', $installQueue);
262 public function installDependenciesReturnsResolvedDependencies() {
263 $managementMock = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Service\\ExtensionManagementService', array(
264 'emitWillInstallExtensions',
265 'emitHasInstalledExtension'
267 $installQueue = array(
270 $installUtility = $this->getAccessibleMock('TYPO3\\CMS\\Extensionmanager\\Utility\\InstallUtility', array('install','emitWillInstallExtensions'), array(), '', FALSE);
271 $installUtility->expects($this->once())->method('install')->with('foobar');
272 $managementMock->_set('installUtility', $installUtility);
273 $resolvedDependencies = $managementMock->_call('installDependencies', $installQueue);
274 $this->assertEquals(array(
275 'installed' => array(
278 ), $resolvedDependencies);