Skip to content

Commit db7c7ef

Browse files
committed
MAGETWO-51544: [Github] Cannot upgrade to Magento 2.0.4 #4013
- Code review comment updates. - Added unit test for PathBuilder.php
1 parent a52f3c9 commit db7c7ef

File tree

3 files changed

+107
-20
lines changed

3 files changed

+107
-20
lines changed

setup/src/Magento/Setup/Model/Cron/ReadinessCheck.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ReadinessCheck
3434
const KEY_PHP_VERSION_VERIFIED = 'php_version_verified';
3535
const KEY_PHP_SETTINGS_VERIFIED = 'php_settings_verified';
3636
const KEY_PHP_EXTENSIONS_VERIFIED = 'php_extensions_verified';
37-
const KEY_DIR_AND_FILE_PATHS = 'dir_and_file_paths';
37+
const KEY_FILE_PATHS = 'file_paths';
3838
const KEY_ERROR = 'error';
3939
const KEY_LIST = 'list';
4040
const KEY_CURRENT_TIMESTAMP = 'current_timestamp';
@@ -128,15 +128,13 @@ public function runReadinessCheck()
128128
// permissions
129129
try {
130130
$dirAndFilePaths = $this->pathBuilder->build();
131-
$resultJsonRawData[self::KEY_DIR_AND_FILE_PATHS][self::KEY_LIST] = $dirAndFilePaths;
132-
$resultJsonRawData[self::KEY_DIR_AND_FILE_PATHS][self::KEY_ERROR] = $errorMsg;
133-
131+
$resultJsonRawData[self::KEY_FILE_PATHS][self::KEY_LIST] = $dirAndFilePaths;
134132
} catch (\Exception $e) {
135133
$errorMsg = $e->getMessage();
136134
$returnValue = false;
137-
$resultJsonRawData[self::KEY_DIR_AND_FILE_PATHS][self::KEY_ERROR] = $errorMsg;
138-
$resultJsonRawData[self::KEY_DIR_AND_FILE_PATHS][self::KEY_LIST] = [];
135+
$resultJsonRawData[self::KEY_FILE_PATHS][self::KEY_LIST] = [];
139136
}
137+
$resultJsonRawData[self::KEY_FILE_PATHS][self::KEY_ERROR] = $errorMsg;
140138

141139
// updates timestamp
142140
if ($write->isExist(self::SETUP_CRON_JOB_STATUS_FILE)) {

setup/src/Magento/Setup/Model/PathBuilder.php

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
namespace Magento\Setup\Model;
77

8-
use Magento\Framework\App\Filesystem\DirectoryList;
8+
use Magento\Framework\FileSystem\Directory\ReadFactory;
99

1010
/**
1111
* Prepares list of magento specific files and directory paths that updater will need access to perform the upgrade
@@ -18,20 +18,18 @@ class PathBuilder
1818

1919
const COMPOSER_KEY_MAP = 'map';
2020

21-
const VENDOR_PATH_FILE = 'vendor_path.php';
22-
2321
/**
24-
* @var DirectoryList
22+
* @var \Magento\Framework\Filesystem\Directory\ReadInterface $reader
2523
*/
26-
private $directoryList;
27-
24+
private $reader;
2825
/**
29-
* PathBuilder constructor.
30-
* @param DirectoryList $directoryList
26+
* Constructor
27+
*
28+
* @param ReadFactory $readFactory
3129
*/
32-
public function __construct(DirectoryList $directoryList)
30+
public function __construct(ReadFactory $readFactory)
3331
{
34-
$this->directoryList = $directoryList;
32+
$this->reader = $readFactory->create(BP);
3533
}
3634

3735
/**
@@ -45,17 +43,16 @@ public function build()
4543
{
4644
// Locate composer.json for magento2-base module and read the extra map section for the list of
4745
// magento specific files and directories that updater will need access to perform the upgrade
46+
$vendorDir = require VENDOR_PATH;
4847

49-
$vendorPath = $this->directoryList->getPath(DirectoryList::CONFIG) . '/' . self::VENDOR_PATH_FILE;
50-
$vendorDir = require "{$vendorPath}";
5148

5249
$basePackageComposerFilePath = $vendorDir . '/' . self::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE;
53-
if (!file_exists($basePackageComposerFilePath)) {
50+
if (!$this->reader->isExist($basePackageComposerFilePath)) {
5451
throw new \Magento\Setup\Exception(
5552
'Could not locate ' . self::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE . ' file.'
5653
);
5754
}
58-
$composerJsonFileData = json_decode(file_get_contents($basePackageComposerFilePath), true);
55+
$composerJsonFileData = json_decode($this->reader->readFile($basePackageComposerFilePath), true);
5956
$extraMappings = $composerJsonFileData[self::COMPOSER_KEY_EXTRA][self::COMPOSER_KEY_MAP];
6057
$fileAndPathList = [];
6158
foreach ($extraMappings as $map) {
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Setup\Test\Unit\Model;
8+
9+
use \Magento\Setup\Model\PathBuilder;
10+
use \Magento\Setup\Model\Cron\ReadinessCheck;
11+
12+
class PathBuilderTest extends \PHPUnit_Framework_TestCase
13+
{
14+
/**
15+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\FileSystem\Directory\ReadFactory
16+
*/
17+
private $readFactoryMock;
18+
19+
/**
20+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\FileSystem\Directory\ReadInterface
21+
*/
22+
private $readerMock;
23+
24+
/**
25+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\PathBuilder
26+
*/
27+
private $pathBuilder;
28+
29+
public function setup()
30+
{
31+
$this->readFactoryMock = $this->getMock(
32+
'Magento\Framework\Filesystem\Directory\ReadFactory',
33+
[],
34+
[],
35+
'',
36+
false
37+
);
38+
$this->readerMock = $this->getMockForAbstractClass(
39+
'Magento\Framework\Filesystem\Directory\ReadInterface',
40+
[],
41+
'',
42+
false
43+
);
44+
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
45+
$this->readFactoryMock->expects($this->once())->method('create')->willReturn($this->readerMock);
46+
$this->pathBuilder = $objectManager->getObject(
47+
'Magento\Setup\Model\PathBuilder',
48+
['readFactory' => $this->readFactoryMock]
49+
);
50+
}
51+
52+
// Error scenario (magento/magento2-base/composer.json not found)
53+
public function testBuildNoComposerJsonFile()
54+
{
55+
$this->readerMock->expects($this->once())->method('isExist')->willReturn(false);
56+
$this->readerMock->expects($this->never())->method('readFile');
57+
$this->setExpectedException(
58+
'Magento\Setup\Exception',
59+
sprintf('Could not locate %s file.', PathBuilder::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE)
60+
);
61+
$this->pathBuilder->build();
62+
}
63+
64+
// Success scenario
65+
public function testBuild()
66+
{
67+
$this->readerMock->expects($this->once())->method('isExist')->willReturn(true);
68+
$jsonData = json_encode(
69+
[
70+
PathBuilder::COMPOSER_KEY_EXTRA =>
71+
[
72+
PathBuilder::COMPOSER_KEY_MAP =>
73+
[
74+
[
75+
__FILE__,
76+
__FILE__
77+
],
78+
[
79+
__DIR__,
80+
__DIR__
81+
]
82+
]
83+
]
84+
]
85+
);
86+
$this->readerMock->expects($this->once())->method('readFile')->willReturn($jsonData);
87+
$expectedList = [__FILE__, __DIR__];
88+
$actualList = $this->pathBuilder->build();
89+
$this->assertEquals($expectedList, $actualList);
90+
}
91+
92+
}

0 commit comments

Comments
 (0)