1
0
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:
James Titcumb
2026-03-04 11:32:02 +00:00
parent 299903fd9d
commit 62bc6521f9
3 changed files with 32 additions and 1 deletions

View File

@@ -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

View File

@@ -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;
},
),
);

View File

@@ -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));
}
}