|
11 | 11 |
|
12 | 12 | namespace Symfony\Bundle\MakerBundle\Test; |
13 | 13 |
|
| 14 | +use Composer\Semver\Semver; |
14 | 15 | use PHPUnit\Framework\TestCase; |
15 | 16 | use Symfony\Bundle\MakerBundle\MakerInterface; |
16 | 17 | use Symfony\Bundle\MakerBundle\Str; |
@@ -40,6 +41,10 @@ protected function executeMakerCommand(MakerTestDetails $testDetails) |
40 | 41 | // prepare environment to test |
41 | 42 | $testEnv->prepare(); |
42 | 43 |
|
| 44 | + if (!$this->hasRequiredDependencyVersions($testDetails, $testEnv)) { |
| 45 | + $this->markTestSkipped('Some dependencies versions are too low'); |
| 46 | + } |
| 47 | + |
43 | 48 | // run tests |
44 | 49 | $makerTestProcess = $testEnv->runMaker(); |
45 | 50 | $files = $testEnv->getGeneratedFilesFromOutputText(); |
@@ -95,4 +100,32 @@ protected function getMakerInstance(string $makerClass): MakerInterface |
95 | 100 |
|
96 | 101 | return $this->kernel->getContainer()->get($serviceId); |
97 | 102 | } |
| 103 | + |
| 104 | + private function hasRequiredDependencyVersions(MakerTestDetails $testDetails, MakerTestEnvironment $testEnv): bool |
| 105 | + { |
| 106 | + if (empty($testDetails->getRequiredPackageVersions())) { |
| 107 | + return true; |
| 108 | + } |
| 109 | + |
| 110 | + $installedPackages = json_decode($testEnv->readFile('vendor/composer/installed.json'), true); |
| 111 | + $packageVersions = []; |
| 112 | + foreach ($installedPackages as $installedPackage) { |
| 113 | + $packageVersions[$installedPackage['name']] = $installedPackage['version_normalized']; |
| 114 | + } |
| 115 | + |
| 116 | + foreach ($testDetails->getRequiredPackageVersions() as $requiredPackageData) { |
| 117 | + $name = $requiredPackageData['name']; |
| 118 | + $versionConstraint = $requiredPackageData['version_constraint']; |
| 119 | + |
| 120 | + if (!isset($packageVersions[$name])) { |
| 121 | + throw new \Exception(sprintf('Package "%s" is required in the test project at version "%s" but it is not installed?', $name, $versionConstraint)); |
| 122 | + } |
| 123 | + |
| 124 | + if (!Semver::satisfies($packageVersions[$name], $versionConstraint)) { |
| 125 | + return false; |
| 126 | + } |
| 127 | + } |
| 128 | + |
| 129 | + return true; |
| 130 | + } |
98 | 131 | } |
0 commit comments