diff --git a/tests/Composer/Test/Command/CheckPlatformReqsCommandTest.php b/tests/Composer/Test/Command/CheckPlatformReqsCommandTest.php new file mode 100644 index 000000000..4fcbc639e --- /dev/null +++ b/tests/Composer/Test/Command/CheckPlatformReqsCommandTest.php @@ -0,0 +1,93 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test\Command; + +use Composer\Test\TestCase; +use LogicException; + +class CheckPlatformReqsCommandTest extends TestCase +{ + /** + * @dataProvider caseProvider + * @param array $composerJson + * @param array $command + */ + public function testPlatformReqsAreSatisfied( + array $composerJson, + array $command, + string $expected, + bool $lock = true + ): void { + $this->initTempComposer($composerJson); + + $packages = [ + $this->getPackage('ext-foobar', '2.3.4'), + ]; + $devPackages = [ + $this->getPackage('ext-barbaz', '2.3.4.5') + ]; + + $this->createInstalledJson($packages, $devPackages); + + if ($lock) { + $this->createComposerLock($packages, $devPackages); + } + + $appTester = $this->getApplicationTester(); + $appTester->run(array_merge(['command' => 'check-platform-reqs'], $command)); + + $appTester->assertCommandIsSuccessful(); + $this->assertSame(trim($expected), trim($appTester->getDisplay(true))); + } + + public function testExceptionThrownIfNoLockfileFound(): void + { + $this->expectException(LogicException::class); + $this->expectExceptionMessage("No lockfile found. Unable to read locked packages"); + $this->initTempComposer([]); + $appTester = $this->getApplicationTester(); + $appTester->run(['command' => 'check-platform-reqs']); + } + + public function caseProvider(): \Generator + { + yield 'Disables checking of require-dev packages requirements.' => [ + [ + 'require' => [ + 'ext-foobar' => '^2.0', + ], + 'require-dev' => [ + 'ext-barbaz' => '~4.0', + ] + ], + ['--no-dev' => true], + 'Checking non-dev platform requirements for packages in the vendor dir +ext-foobar 2.3.4 success' + ]; + + yield 'Checks requirements only from the lock file, not from installed packages.' => [ + [ + 'require' => [ + 'ext-foobar' => '^2.3', + ], + 'require-dev' => [ + 'ext-barbaz' => '~2.0', + ] + ], + ['--lock' => true], + 'Checking platform requirements using the lock file +ext-barbaz 2.3.4.5 success +ext-foobar 2.3.4 success' + ]; + } +}