Skip to content

Commit 666b4f3

Browse files
committed
MAGETWO-83834: Update static test for check composer versions
1 parent e5ebb5a commit 666b4f3

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Test\Integrity;
77

8+
use Composer\Semver\VersionParser;
89
use Magento\Framework\App\Bootstrap;
910
use Magento\Framework\Component\ComponentRegistrar;
1011
use Magento\Framework\Composer\MagentoComponent;
@@ -293,6 +294,23 @@ private function assertRequireInSync(\StdClass $json)
293294
if (!isset(self::$rootJson['require-dev'][$depName]) && !isset(self::$rootJson['require'][$depName])
294295
&& !isset(self::$rootJson['replace'][$depName])) {
295296
$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+
}
296314
}
297315
}
298316
if (!empty($errors)) {
@@ -308,6 +326,20 @@ private function assertRequireInSync(\StdClass $json)
308326
}
309327
}
310328

329+
/**
330+
* @param $componentConfig
331+
* @param $packageName
332+
* @param $section
333+
* @return bool
334+
*/
335+
private function checkDiscrepancy($componentConfig, $packageName, $section)
336+
{
337+
$rootConstraint = (new VersionParser())->parseConstraints(self::$rootJson[$section][$packageName]);
338+
$componentConstraint = (new VersionParser())->parseConstraints($componentConfig->require->$packageName);
339+
340+
return !$rootConstraint->matches($componentConstraint);
341+
}
342+
311343
/**
312344
* Convert a fully qualified module name to a composer package name according to conventions
313345
*

0 commit comments

Comments
 (0)