Add more tests for install command, refs #11277
parent
fb2c17d696
commit
0d68dabb5f
|
@ -18,15 +18,14 @@ use Generator;
|
|||
class InstallCommandTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider useCaseProvider
|
||||
* @dataProvider errorCaseProvider
|
||||
* @param array<mixed> $composerJson
|
||||
* @param array<mixed> $command
|
||||
*/
|
||||
public function testInstallCommand(
|
||||
public function testInstallCommandErrors(
|
||||
array $composerJson,
|
||||
array $command,
|
||||
string $expected,
|
||||
bool $lock = false
|
||||
string $expected
|
||||
): void {
|
||||
$this->initTempComposer($composerJson);
|
||||
|
||||
|
@ -37,10 +36,7 @@ class InstallCommandTest extends TestCase
|
|||
self::getPackage('vendor/devpackage', '2.3.4'),
|
||||
];
|
||||
|
||||
if ($lock) {
|
||||
$this->createComposerLock($packages, $devPackages);
|
||||
}
|
||||
|
||||
$this->createComposerLock($packages, $devPackages);
|
||||
$this->createInstalledJson($packages, $devPackages);
|
||||
|
||||
$appTester = $this->getApplicationTester();
|
||||
|
@ -49,29 +45,11 @@ class InstallCommandTest extends TestCase
|
|||
$this->assertSame(trim($expected), trim($appTester->getDisplay(true)));
|
||||
}
|
||||
|
||||
public function useCaseProvider(): Generator
|
||||
public function errorCaseProvider(): Generator
|
||||
{
|
||||
yield 'it writes an error when the dev flag is passed' => [
|
||||
[
|
||||
'repositories' => [
|
||||
'packages' => [
|
||||
'type' => 'package',
|
||||
'package' => [
|
||||
[
|
||||
'name' => 'vendor/package',
|
||||
'description' => 'generic description',
|
||||
'version' => '1.0.0',
|
||||
'dist' => [
|
||||
'url' => 'https://example.org',
|
||||
'type' => 'zip'
|
||||
]
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
'require' => [
|
||||
'vendor/package' => '^1.0'
|
||||
]
|
||||
'repositories' => [],
|
||||
],
|
||||
['--dev' => true],
|
||||
<<<OUTPUT
|
||||
|
@ -81,31 +59,11 @@ Verifying lock file contents can be installed on current platform.
|
|||
Nothing to install, update or remove
|
||||
Generating autoload files
|
||||
OUTPUT
|
||||
,
|
||||
true
|
||||
];
|
||||
|
||||
yield 'it writes an error when no-suggest flag passed' => [
|
||||
[
|
||||
'repositories' => [
|
||||
'packages' => [
|
||||
'type' => 'package',
|
||||
'package' => [
|
||||
[
|
||||
'name' => 'vendor/package',
|
||||
'description' => 'generic description',
|
||||
'version' => '1.0.0',
|
||||
'dist' => [
|
||||
'url' => 'https://example.org',
|
||||
'type' => 'zip'
|
||||
]
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
'require' => [
|
||||
'vendor/package' => '^1.0'
|
||||
]
|
||||
'repositories' => [],
|
||||
],
|
||||
['--no-suggest' => true],
|
||||
<<<OUTPUT
|
||||
|
@ -115,68 +73,112 @@ Verifying lock file contents can be installed on current platform.
|
|||
Nothing to install, update or remove
|
||||
Generating autoload files
|
||||
OUTPUT
|
||||
,
|
||||
true
|
||||
];
|
||||
|
||||
yield 'it writes an error when packages passed' => [
|
||||
[
|
||||
'repositories' => [
|
||||
'packages' => [
|
||||
'type' => 'package',
|
||||
'package' => [
|
||||
[
|
||||
'name' => 'vendor/package',
|
||||
'description' => 'generic description',
|
||||
'version' => '1.0.0',
|
||||
'dist' => [
|
||||
'url' => 'https://example.org',
|
||||
'type' => 'zip'
|
||||
]
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
'require' => [
|
||||
'vendor/package' => '^1.0'
|
||||
]
|
||||
'repositories' => [],
|
||||
],
|
||||
['packages' => ['vendor/package']],
|
||||
<<<OUTPUT
|
||||
Invalid argument vendor/package. Use "composer require vendor/package" instead to add packages to your composer.json.
|
||||
OUTPUT
|
||||
,
|
||||
true
|
||||
];
|
||||
|
||||
yield 'it writes an error when no-install flag is passed' => [
|
||||
[
|
||||
'repositories' => [
|
||||
'packages' => [
|
||||
'type' => 'package',
|
||||
'package' => [
|
||||
[
|
||||
'name' => 'vendor/package',
|
||||
'description' => 'generic description',
|
||||
'version' => '1.0.0',
|
||||
'dist' => [
|
||||
'url' => 'https://example.org',
|
||||
'type' => 'zip'
|
||||
]
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
'require' => [
|
||||
'vendor/package' => '^1.0'
|
||||
]
|
||||
'repositories' => [],
|
||||
],
|
||||
['--no-install' => true],
|
||||
<<<OUTPUT
|
||||
Invalid option "--no-install". Use "composer update --no-install" instead if you are trying to update the composer.lock file.
|
||||
OUTPUT
|
||||
,
|
||||
true
|
||||
];
|
||||
}
|
||||
|
||||
public function testInstallFromEmptyVendor(): void
|
||||
{
|
||||
$this->initTempComposer([
|
||||
'require' => [
|
||||
'root/req' => '1.*',
|
||||
],
|
||||
'require-dev' => [
|
||||
'root/another' => '1.*',
|
||||
],
|
||||
]);
|
||||
|
||||
$rootReqPackage = self::getPackage('root/req');
|
||||
$anotherPackage = self::getPackage('root/another');
|
||||
// Set as a metapackage so that we can do the whole post-remove update & install process without Composer trying to download them (DownloadManager::getDownloaderForPackage).
|
||||
$rootReqPackage->setType('metapackage');
|
||||
$anotherPackage->setType('metapackage');
|
||||
|
||||
$this->createComposerLock([$rootReqPackage], [$anotherPackage]);
|
||||
|
||||
$appTester = $this->getApplicationTester();
|
||||
$appTester->run(['command' => 'install', '--no-progress' => true]);
|
||||
|
||||
$this->assertSame('Installing dependencies from lock file (including require-dev)
|
||||
Verifying lock file contents can be installed on current platform.
|
||||
Package operations: 2 installs, 0 updates, 0 removals
|
||||
- Installing root/another (1.0.0)
|
||||
- Installing root/req (1.0.0)
|
||||
Generating autoload files', trim($appTester->getDisplay(true)));
|
||||
}
|
||||
|
||||
public function testInstallFromEmptyVendorNoDev(): void
|
||||
{
|
||||
$this->initTempComposer([
|
||||
'require' => [
|
||||
'root/req' => '1.*',
|
||||
],
|
||||
'require-dev' => [
|
||||
'root/another' => '1.*',
|
||||
],
|
||||
]);
|
||||
|
||||
$rootReqPackage = self::getPackage('root/req');
|
||||
$anotherPackage = self::getPackage('root/another');
|
||||
// Set as a metapackage so that we can do the whole post-remove update & install process without Composer trying to download them (DownloadManager::getDownloaderForPackage).
|
||||
$rootReqPackage->setType('metapackage');
|
||||
$anotherPackage->setType('metapackage');
|
||||
|
||||
$this->createComposerLock([$rootReqPackage], [$anotherPackage]);
|
||||
|
||||
$appTester = $this->getApplicationTester();
|
||||
$appTester->run(['command' => 'install', '--no-progress' => true, '--no-dev' => true]);
|
||||
|
||||
$this->assertSame('Installing dependencies from lock file
|
||||
Verifying lock file contents can be installed on current platform.
|
||||
Package operations: 1 install, 0 updates, 0 removals
|
||||
- Installing root/req (1.0.0)
|
||||
Generating autoload files', trim($appTester->getDisplay(true)));
|
||||
}
|
||||
|
||||
public function testInstallNewPackagesWithExistingPartialVendor(): void
|
||||
{
|
||||
$this->initTempComposer([
|
||||
'require' => [
|
||||
'root/req' => '1.*',
|
||||
'root/another' => '1.*',
|
||||
],
|
||||
]);
|
||||
$rootReqPackage = self::getPackage('root/req');
|
||||
$anotherPackage = self::getPackage('root/another');
|
||||
// Set as a metapackage so that we can do the whole post-remove update & install process without Composer trying to download them (DownloadManager::getDownloaderForPackage).
|
||||
$rootReqPackage->setType('metapackage');
|
||||
$anotherPackage->setType('metapackage');
|
||||
|
||||
$this->createComposerLock([$rootReqPackage, $anotherPackage], []);
|
||||
$this->createInstalledJson([$rootReqPackage], []);
|
||||
|
||||
$appTester = $this->getApplicationTester();
|
||||
$appTester->run(['command' => 'install', '--no-progress' => true]);
|
||||
|
||||
$this->assertSame('Installing dependencies from lock file (including require-dev)
|
||||
Verifying lock file contents can be installed on current platform.
|
||||
Package operations: 1 install, 0 updates, 0 removals
|
||||
- Installing root/another (1.0.0)
|
||||
Generating autoload files', trim($appTester->getDisplay(true)));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue