Add more tests for install command, refs #11277
parent
fb2c17d696
commit
0d68dabb5f
|
@ -18,15 +18,14 @@ use Generator;
|
||||||
class InstallCommandTest extends TestCase
|
class InstallCommandTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @dataProvider useCaseProvider
|
* @dataProvider errorCaseProvider
|
||||||
* @param array<mixed> $composerJson
|
* @param array<mixed> $composerJson
|
||||||
* @param array<mixed> $command
|
* @param array<mixed> $command
|
||||||
*/
|
*/
|
||||||
public function testInstallCommand(
|
public function testInstallCommandErrors(
|
||||||
array $composerJson,
|
array $composerJson,
|
||||||
array $command,
|
array $command,
|
||||||
string $expected,
|
string $expected
|
||||||
bool $lock = false
|
|
||||||
): void {
|
): void {
|
||||||
$this->initTempComposer($composerJson);
|
$this->initTempComposer($composerJson);
|
||||||
|
|
||||||
|
@ -37,10 +36,7 @@ class InstallCommandTest extends TestCase
|
||||||
self::getPackage('vendor/devpackage', '2.3.4'),
|
self::getPackage('vendor/devpackage', '2.3.4'),
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($lock) {
|
$this->createComposerLock($packages, $devPackages);
|
||||||
$this->createComposerLock($packages, $devPackages);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->createInstalledJson($packages, $devPackages);
|
$this->createInstalledJson($packages, $devPackages);
|
||||||
|
|
||||||
$appTester = $this->getApplicationTester();
|
$appTester = $this->getApplicationTester();
|
||||||
|
@ -49,29 +45,11 @@ class InstallCommandTest extends TestCase
|
||||||
$this->assertSame(trim($expected), trim($appTester->getDisplay(true)));
|
$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' => [
|
yield 'it writes an error when the dev flag is passed' => [
|
||||||
[
|
[
|
||||||
'repositories' => [
|
'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'
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
['--dev' => true],
|
['--dev' => true],
|
||||||
<<<OUTPUT
|
<<<OUTPUT
|
||||||
|
@ -81,31 +59,11 @@ Verifying lock file contents can be installed on current platform.
|
||||||
Nothing to install, update or remove
|
Nothing to install, update or remove
|
||||||
Generating autoload files
|
Generating autoload files
|
||||||
OUTPUT
|
OUTPUT
|
||||||
,
|
|
||||||
true
|
|
||||||
];
|
];
|
||||||
|
|
||||||
yield 'it writes an error when no-suggest flag passed' => [
|
yield 'it writes an error when no-suggest flag passed' => [
|
||||||
[
|
[
|
||||||
'repositories' => [
|
'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'
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
['--no-suggest' => true],
|
['--no-suggest' => true],
|
||||||
<<<OUTPUT
|
<<<OUTPUT
|
||||||
|
@ -115,68 +73,112 @@ Verifying lock file contents can be installed on current platform.
|
||||||
Nothing to install, update or remove
|
Nothing to install, update or remove
|
||||||
Generating autoload files
|
Generating autoload files
|
||||||
OUTPUT
|
OUTPUT
|
||||||
,
|
|
||||||
true
|
|
||||||
];
|
];
|
||||||
|
|
||||||
yield 'it writes an error when packages passed' => [
|
yield 'it writes an error when packages passed' => [
|
||||||
[
|
[
|
||||||
'repositories' => [
|
'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'
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
['packages' => ['vendor/package']],
|
['packages' => ['vendor/package']],
|
||||||
<<<OUTPUT
|
<<<OUTPUT
|
||||||
Invalid argument vendor/package. Use "composer require vendor/package" instead to add packages to your composer.json.
|
Invalid argument vendor/package. Use "composer require vendor/package" instead to add packages to your composer.json.
|
||||||
OUTPUT
|
OUTPUT
|
||||||
,
|
|
||||||
true
|
|
||||||
];
|
];
|
||||||
|
|
||||||
yield 'it writes an error when no-install flag is passed' => [
|
yield 'it writes an error when no-install flag is passed' => [
|
||||||
[
|
[
|
||||||
'repositories' => [
|
'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'
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
['--no-install' => true],
|
['--no-install' => true],
|
||||||
<<<OUTPUT
|
<<<OUTPUT
|
||||||
Invalid option "--no-install". Use "composer update --no-install" instead if you are trying to update the composer.lock file.
|
Invalid option "--no-install". Use "composer update --no-install" instead if you are trying to update the composer.lock file.
|
||||||
OUTPUT
|
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