9 use Composer\Package\RootPackage;
12 use PHPUnit_Framework_MockObject_MockObject as MockObject;
23 private $packagesData;
28 private $composerInformation;
33 private $timeZoneProvider;
38 private $packagesAuth;
48 private $objectManagerProvider;
57 $this->composerInformation = $this->getComposerInformation();
58 $this->timeZoneProvider = $this->getMockBuilder(\
Magento\
Setup\Model\DateTime\TimeZoneProvider::class)
59 ->disableOriginalConstructor()
61 $timeZone = $this->createMock(\
Magento\Framework\Stdlib\DateTime\Timezone::class);
62 $this->timeZoneProvider->expects($this->any())->method(
'get')->willReturn($timeZone);
63 $this->packagesAuth = $this->createMock(\
Magento\
Setup\Model\PackagesAuth::class);
64 $this->filesystem = $this->createMock(\
Magento\Framework\Filesystem::class);
65 $this->objectManagerProvider = $this->getMockBuilder(\
Magento\
Setup\Model\ObjectManagerProvider::class)
66 ->disableOriginalConstructor()
69 $appFactory = $this->getMockBuilder(\
Magento\Framework\Composer\MagentoComposerApplicationFactory::class)
70 ->disableOriginalConstructor()
74 ->method(
'runComposerCommand')
104 $appFactory->expects($this->any())->method(
'create')->willReturn(
$application);
107 ->with(\
Magento\Framework\Composer\MagentoComposerApplicationFactory::class)
108 ->willReturn($appFactory);
109 $this->objectManagerProvider->expects($this->any())->method(
'get')->willReturn(
$objectManager);
111 $directoryWrite = $this->getMockForAbstractClass(\
Magento\Framework\
Filesystem\Directory\WriteInterface::class);
112 $directoryRead = $this->getMockForAbstractClass(\
Magento\Framework\
Filesystem\Directory\ReadInterface::class);
113 $this->filesystem->expects($this->any())->method(
'getDirectoryRead')->will($this->returnValue($directoryRead));
114 $this->filesystem->expects($this->any())
115 ->method(
'getDirectoryWrite')
116 ->will($this->returnValue($directoryWrite));
117 $directoryWrite->expects($this->any())->method(
'isExist')->willReturn(
true);
118 $directoryWrite->expects($this->any())->method(
'isReadable')->willReturn(
true);
119 $directoryWrite->expects($this->any())->method(
'delete')->willReturn(
true);
120 $directoryRead->expects($this->any())->method(
'isExist')->willReturn(
true);
121 $directoryRead->expects($this->any())->method(
'isReadable')->willReturn(
true);
122 $directoryRead->expects($this->any())->method(
'stat')->willReturn([
'mtime' =>
'1462460216076']);
123 $directoryRead->expects($this->any())
126 '{"packages":{"magento\/package-1":{' 127 .
'"1.0.0":{"name":"magento\/package-1","version":"1.0.0","vendor":"test","type":"metapackage",' 128 .
'"require":{"magento\/package-3":"1.0.0"}},' 129 .
'"1.0.1":{"name":"magento\/package-1","version":"1.0.1","vendor":"test","type":"magento2-module"},' 130 .
'"1.0.2":{"name":"magento\/package-1","version":"1.0.2","vendor":"test","type":"magento2-module"}' 131 .
'}, "magento\/package-2":{' 132 .
'"1.0.0":{"name":"magento\/package-2","version":"1.0.0","vendor":"test","type":"magento2-module"},' 133 .
'"1.0.1":{"name":"magento\/package-2","version":"1.0.1","vendor":"test","type":"magento2-module"}' 134 .
'}, "magento\/package-3":{' 135 .
'"1.0.0":{"name":"magento\/package-3","version":"1.0.0","vendor":"test","type":"magento2-module"},' 136 .
'"1.0.1":{"name":"magento\/package-3","version":"1.0.1","vendor":"test","type":"magento2-module"},' 137 .
'"1.0.2":{"name":"magento\/package-3","version":"1.0.2","vendor":"test","type":"magento2-module",' 138 .
'"extra":{"x-magento-ext-title":"Package 3 title", "x-magento-ext-type":"Extension"}}' 142 $this->typeMapper = $this->getMockBuilder(\
Magento\
Setup\Model\Grid\TypeMapper::class)
143 ->disableOriginalConstructor()
145 $this->typeMapper->expects(static::any())
151 $this->createPackagesData();
154 private function createPackagesData()
157 $this->composerInformation,
158 $this->timeZoneProvider,
161 $this->objectManagerProvider,
172 private function getComposerInformation($requiredPackages = [], $installedPackages = [],
$repo = [])
174 $composerInformation = $this->createMock(ComposerInformation::class);
175 $composerInformation->expects($this->any())->method(
'getInstalledMagentoPackages')->willReturn(
176 $installedPackages ?:
178 'magento/package-1' => [
179 'name' =>
'magento/package-1',
180 'type' =>
'magento2-module',
183 'magento/package-2' => [
184 'name' =>
'magento/package-2',
185 'type' =>
'magento2-module',
188 'partner/package-3' => [
189 'name' =>
'partner/package-3',
190 'type' =>
'magento2-module',
196 $composerInformation->expects($this->any())->method(
'getRootRepositories')
197 ->willReturn(
$repo ?: [
'repo1',
'repo2']);
198 $composerInformation->expects($this->any())->method(
'getPackagesTypes')
199 ->willReturn([
'magento2-module']);
200 $rootPackage = $this->getMockBuilder(RootPackage::class)
201 ->setConstructorArgs([
'magento/project',
'2.1.0',
'2'])
203 $rootPackage->expects($this->any())
204 ->method(
'getRequires')
208 'magento/package-1' =>
'1.0.0',
209 'magento/package-2' =>
'1.0.1',
210 'partner/package-3' =>
'3.0.0',
213 $composerInformation->expects($this->any())
214 ->method(
'getRootPackage')
215 ->willReturn($rootPackage);
217 return $composerInformation;
222 $latestData = $this->packagesData->syncPackagesData();
223 $this->assertArrayHasKey(
'lastSyncDate', $latestData);
224 $this->assertArrayHasKey(
'date', $latestData[
'lastSyncDate']);
225 $this->assertArrayHasKey(
'time', $latestData[
'lastSyncDate']);
226 $this->assertArrayHasKey(
'packages', $latestData);
227 $this->assertSame(3, count($latestData[
'packages']));
228 $this->assertSame(3, $latestData[
'countOfUpdate']);
229 $this->assertArrayHasKey(
'installPackages', $latestData);
230 $this->assertSame(1, count($latestData[
'installPackages']));
231 $this->assertSame(1, $latestData[
'countOfInstall']);
240 $requiredPackages = [
241 'partner/package-4' =>
'4.0.4',
243 $installedPackages = [
244 'partner/package-4' => [
245 'name' =>
'partner/package-4',
246 'type' =>
'magento2-module',
250 $this->composerInformation = $this->getComposerInformation($requiredPackages, $installedPackages);
251 $this->createPackagesData();
252 $this->packagesData->getPackagesForUpdate();
257 $this->composerInformation = $this->getComposerInformation([], [], [
'https://repo1']);
258 $this->packagesAuth->expects($this->atLeastOnce())
259 ->method(
'getCredentialBaseUrl')
260 ->willReturn(
'repo1');
261 $this->createPackagesData();
262 $packages = $this->packagesData->getPackagesForUpdate();
263 $this->assertEquals(2, count($packages));
264 $this->assertArrayHasKey(
'magento/package-1', $packages);
265 $this->assertArrayHasKey(
'partner/package-3', $packages);
266 $firstPackage = array_values($packages)[0];
267 $this->assertArrayHasKey(
'latestVersion', $firstPackage);
268 $this->assertArrayHasKey(
'versions', $firstPackage);
273 $packages = $this->packagesData->getPackagesForUpdate();
274 $this->assertEquals(3, count($packages));
275 $this->assertArrayHasKey(
'magento/package-1', $packages);
276 $this->assertArrayHasKey(
'magento/package-2', $packages);
277 $this->assertArrayHasKey(
'partner/package-3', $packages);
278 $firstPackage = array_values($packages)[0];
279 $this->assertArrayHasKey(
'latestVersion', $firstPackage);
280 $this->assertArrayHasKey(
'versions', $firstPackage);
285 $installedPackages = $this->packagesData->getInstalledPackages();
286 $this->assertEquals(3, count($installedPackages));
287 $this->assertArrayHasKey(
'magento/package-1', $installedPackages);
288 $this->assertArrayHasKey(
'magento/package-2', $installedPackages);
289 $this->assertArrayHasKey(
'partner/package-3', $installedPackages);
294 static::assertEquals(
295 [
'magento/package-3' =>
'magento/package-1'],
296 $this->packagesData->getMetaPackagesMap()
302 static::assertEquals(
304 'package_title' =>
'Package 3 title',
305 'package_type' =>
'Extension',
306 'name' =>
'magento/package-3',
307 'version' =>
'1.0.2',
310 $this->packagesData->addPackageExtraInfo([
'name' =>
'magento/package-3',
'version' =>
'1.0.2'])
testAddPackageExtraInfo()
testPackagesForUpdateFromJson()
testGetPackagesForUpdateWithException()
testGetPackagesForUpdate()
testGetInstalledPackages()