mirror of
https://github.com/php/pie.git
synced 2026-03-23 23:12:17 +01:00
Fix filtering of InstalledPiePackages to exclude non-extensions
Note: baseline widened because of https://github.com/phpstan/phpstan/discussions/14228
This commit is contained in:
@@ -288,6 +288,12 @@ parameters:
|
||||
count: 1
|
||||
path: src/Platform.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$callback of function array_map expects \(callable\(Composer\\Package\\BasePackage\)\: mixed\)\|null, Closure\(Composer\\Package\\CompletePackageInterface\)\: Php\\Pie\\DependencyResolver\\Package given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: src/Platform/InstalledPiePackages.php
|
||||
|
||||
-
|
||||
message: '#^Call to function array_key_exists\(\) with 1 and array\{non\-falsy\-string, non\-empty\-string, non\-empty\-string\} will always evaluate to true\.$#'
|
||||
identifier: function.alreadyNarrowedType
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace Php\Pie\Platform;
|
||||
use Composer\Composer;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Package\CompletePackageInterface;
|
||||
use InvalidArgumentException;
|
||||
use Php\Pie\DependencyResolver\Package;
|
||||
use Php\Pie\ExtensionName;
|
||||
|
||||
@@ -39,7 +40,13 @@ class InstalledPiePackages
|
||||
->getLocalRepository()
|
||||
->getPackages(),
|
||||
static function (BasePackage $basePackage): bool {
|
||||
return $basePackage instanceof CompletePackageInterface && ExtensionName::isValidExtensionName($basePackage->getName());
|
||||
try {
|
||||
ExtensionName::determineFromComposerPackage($basePackage);
|
||||
} catch (InvalidArgumentException) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $basePackage instanceof CompletePackageInterface;
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
@@ -39,4 +39,22 @@ final class InstalledPiePackagesTest extends TestCase
|
||||
self::assertSame('bar2', $packages['bar2']->extensionName()->name());
|
||||
self::assertSame('foo/bar2', $packages['bar2']->name());
|
||||
}
|
||||
|
||||
public function testInvalidExtensionNamesAreFilteredOut(): void
|
||||
{
|
||||
$localRepo = $this->createMock(InstalledRepositoryInterface::class);
|
||||
$localRepo->method('getPackages')->willReturn([
|
||||
new CompletePackage('foo/invalid-extension-name', '1.2.3.0', '1.2.3'),
|
||||
new CompletePackage('invalid-extension-name', '1.2.3.0', '1.2.3'),
|
||||
new CompletePackage('invalid_extension_name', '1.2.3.0', '1.2.3'),
|
||||
]);
|
||||
|
||||
$repoManager = $this->createMock(RepositoryManager::class);
|
||||
$repoManager->method('getLocalRepository')->willReturn($localRepo);
|
||||
|
||||
$composer = $this->createMock(Composer::class);
|
||||
$composer->method('getRepositoryManager')->willReturn($repoManager);
|
||||
|
||||
self::assertCount(0, (new InstalledPiePackages())->allPiePackages($composer));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user