* 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 InvalidArgumentException; class UpdateCommandTest extends TestCase { /** * @dataProvider provideUpdates * @param array $composerJson * @param array $command */ public function testUpdate(array $composerJson, array $command, string $expected): void { $this->initTempComposer($composerJson); $appTester = $this->getApplicationTester(); $appTester->run(array_merge(['command' => 'update', '--dry-run' => true, '--no-audit' => true], $command)); self::assertStringMatchesFormat(trim($expected), trim($appTester->getDisplay(true))); } public static function provideUpdates(): \Generator { $rootDepAndTransitiveDep = [ 'repositories' => [ 'packages' => [ 'type' => 'package', 'package' => [ ['name' => 'root/req', 'version' => '1.0.0', 'require' => ['dep/pkg' => '^1']], ['name' => 'dep/pkg', 'version' => '1.0.0'], ['name' => 'dep/pkg', 'version' => '1.0.1'], ['name' => 'dep/pkg', 'version' => '1.0.2'], ], ], ], 'require' => [ 'root/req' => '1.*', ], ]; yield 'simple update' => [ $rootDepAndTransitiveDep, [], << [ $rootDepAndTransitiveDep, ['-vv' => true], << [ $rootDepAndTransitiveDep, ['--with' => ['dep/pkg:1.0.0'], '--no-install' => true], << [ $rootDepAndTransitiveDep, ['--with' => ['dep/pkg:^2']], << satisfiable by root/req[1.0.0]. - root/req 1.0.0 requires dep/pkg ^1 -> found dep/pkg[1.0.0, 1.0.1, 1.0.2] but it conflicts with your temporary update constraint (dep/pkg:^2). OUTPUT ]; yield 'update with temporary constraint failing resolution on root package' => [ $rootDepAndTransitiveDep, ['--with' => ['root/req:^2']], <<expectException(InvalidArgumentException::class); $this->expectExceptionMessage('You must enter minimum one package.'); $appTester = $this->getApplicationTester(); $appTester->setInputs(['']); $appTester->run(['command' => 'update', '--interactive' => true]); } }