Skip to content

Commit 4816276

Browse files
committed
MAGETWO-83834: Update static test for check composer versions
- changes after CR
1 parent 666b4f3 commit 4816276

File tree

1 file changed

+49
-22
lines changed

1 file changed

+49
-22
lines changed

dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ class ComposerTest extends \PHPUnit\Framework\TestCase
2121
*/
2222
private static $root;
2323

24+
/**
25+
* @var array
26+
*/
27+
private static $mainComposerModules;
28+
2429
/**
2530
* @var \stdClass
2631
*/
@@ -40,6 +45,11 @@ public static function setUpBeforeClass()
4045
{
4146
self::$root = BP;
4247
self::$rootJson = json_decode(file_get_contents(self::$root . '/composer.json'), true);
48+
$availableSections = ['require', 'require-dev', 'replace'];
49+
self::$mainComposerModules = [];
50+
foreach ($availableSections as $availableSection) {
51+
self::$mainComposerModules = array_merge(self::$mainComposerModules, self::$rootJson[$availableSection]);
52+
}
4353
self::$dependencies = [];
4454
self::$objectManager = Bootstrap::create(BP, $_SERVER)->getObjectManager();
4555
}
@@ -175,6 +185,8 @@ private function assertMagentoConventions($dir, $packageType, \StdClass $json)
175185
default:
176186
throw new \InvalidArgumentException("Unknown package type {$packageType}");
177187
}
188+
189+
$this->assertPackageVersions($json);
178190
}
179191

180192
/**
@@ -291,28 +303,11 @@ private function assertRequireInSync(\StdClass $json)
291303
// Magento Composer Installer is not needed for already existing components
292304
continue;
293305
}
294-
if (!isset(self::$rootJson['require-dev'][$depName]) && !isset(self::$rootJson['require'][$depName])
295-
&& !isset(self::$rootJson['replace'][$depName])) {
306+
if (!isset(self::$mainComposerModules[$depName])) {
296307
$errors[] = "'$name' depends on '$depName'";
297-
} else {
298-
if (isset(self::$rootJson['require-dev'][$depName])
299-
&& $this->checkDiscrepancy($json, $depName, 'require-dev')) {
300-
$errors[] = "root composer.json has dependency '"
301-
. $depName . ":" . self::$rootJson['require-dev'][$depName] . " BUT "
302-
. "'$name' composer.json has dependency '$depName:{$json->require->$depName}'";
303-
} elseif (isset(self::$rootJson['require'][$depName])
304-
&& $this->checkDiscrepancy($json, $depName, 'require')) {
305-
$errors[] = "root composer.json has dependency '"
306-
. $depName . ":" . self::$rootJson['require'][$depName] . " BUT "
307-
. "'$name' composer.json has dependency '$depName:{$json->require->$depName}'";
308-
} elseif (isset(self::$rootJson['replace'][$depName])
309-
&& $this->checkDiscrepancy($json, $depName, 'replace')) {
310-
$errors[] = "root composer.json has dependency '"
311-
. $depName . ":" . self::$rootJson['replace'][$depName] . " BUT "
312-
. "'$name' composer.json has dependency '$depName:{$json->require->$depName}'";
313-
}
314308
}
315309
}
310+
316311
if (!empty($errors)) {
317312
$this->fail(
318313
"The following dependencies are missing in root 'composer.json',"
@@ -326,15 +321,47 @@ private function assertRequireInSync(\StdClass $json)
326321
}
327322
}
328323

324+
/**
325+
*
326+
*
327+
* @param \StdClass $json
328+
*/
329+
private function assertPackageVersions(\StdClass $json)
330+
{
331+
$name = $json->name;
332+
if (preg_match('/magento\/project-*/', self::$rootJson['name']) == 1) {
333+
return;
334+
}
335+
if (isset($json->require)) {
336+
$errors = [];
337+
$errorTemplate = "root composer.json has dependency '%s:%s' BUT '%s' composer.json has dependency '%s:%s'";
338+
foreach (array_keys((array)$json->require) as $depName) {
339+
if ($this->checkDiscrepancy($json, $depName)) {
340+
$errors[] = sprintf(
341+
$errorTemplate,
342+
$depName,
343+
self::$mainComposerModules[$depName],
344+
$name,
345+
$depName,
346+
$json->require->$depName
347+
);
348+
}
349+
}
350+
351+
if (!empty($errors)) {
352+
$this->fail(join("\n", $errors));
353+
}
354+
}
355+
}
356+
329357
/**
330358
* @param $componentConfig
331359
* @param $packageName
332-
* @param $section
333360
* @return bool
334361
*/
335-
private function checkDiscrepancy($componentConfig, $packageName, $section)
362+
private function checkDiscrepancy($componentConfig, $packageName)
336363
{
337-
$rootConstraint = (new VersionParser())->parseConstraints(self::$rootJson[$section][$packageName]);
364+
$rootConstraint = (new VersionParser())->parseConstraints(self::$mainComposerModules[$packageName]);
338365
$componentConstraint = (new VersionParser())->parseConstraints($componentConfig->require->$packageName);
339366

340367
return !$rootConstraint->matches($componentConstraint);

0 commit comments

Comments
 (0)