From 4efcf6d7bf117b8dc0ee50f8089c40254e9df114 Mon Sep 17 00:00:00 2001 From: onspli Date: Thu, 26 Sep 2024 16:58:52 +0200 Subject: [PATCH] Add test for filtering packages by url --- .../PackageSelection/PackageSelectionTest.php | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/tests/PackageSelection/PackageSelectionTest.php b/tests/PackageSelection/PackageSelectionTest.php index 84889690..4be2b036 100644 --- a/tests/PackageSelection/PackageSelectionTest.php +++ b/tests/PackageSelection/PackageSelectionTest.php @@ -776,6 +776,143 @@ public function testSelect(array $expected, array $config, array $filterRepos = self::assertEquals($expected, \array_keys($selected->getValue($selection))); } + /** + * @return array + */ + public function dataFilterRepos(): array + { + $packages = [ + 'alpha1' => [ + 'name' => 'vendor/project-alpha', + 'version' => '1.2.3.1', + 'source' => [ + 'url' => 'git@github.com:vendor/project-alpha.git', + 'type' => 'vcs', + 'reference' => '1.2.3.1' + ] + ], + 'alpha2' => [ + 'name' => 'vendor/project-alpha', + 'version' => '1.2.3.2', + 'source' => [ + 'url' => 'git@github.com:vendor/project-alpha.git', + 'type' => 'vcs', + 'reference' => '1.2.3.2' + ] + ], + 'beta1' => [ + 'name' => 'vendor/project-beta', + 'version' => '1.2.3.1', + 'source' => [ + 'url' => 'git@github.com:vendor/project-beta.git', + 'type' => 'vcs', + 'reference' => '1.2.3.1' + ] + ], + 'gamma1' => [ + 'name' => 'vendor/project-gamma', + 'version' => '1.2.3.1', + 'source' => [ + 'url' => 'git@github.com:vendor/project-gamma.git', + 'type' => 'vcs', + 'reference' => '1.2.3.1' + ] + ], + ]; + + $repo = [ + 'alpha_packages' => [ + 'type' => 'package', + 'package' => [ + $packages['alpha1'], + $packages['alpha2'], + ] + ], + 'beta_packages' => [ + 'type' => 'package', + 'package' => [ + $packages['beta1'], + ] + ], + 'gamma_packages' => [ + 'type' => 'package', + 'package' => [ + $packages['gamma1'], + ] + ], + ]; + + foreach ($packages as &$p) { + $p = $p['name'] . '-' . $p['version']; + } + + $data = []; + + $data['Filter by one repository alpha'] = [ + [ + $packages['alpha1'], + $packages['alpha2'], + ], + [ + 'repositories' => array_values($repo), + ], + ['git@github.com:vendor/project-alpha.git'], + ]; + + $data['Filter by one repository beta'] = [ + [ + $packages['beta1'], + ], + [ + 'repositories' => array_values($repo), + ], + ['git@github.com:vendor/project-beta.git'], + ]; + + $data['Filter by two repositories'] = [ + [ + $packages['alpha1'], + $packages['alpha2'], + $packages['beta1'], + ], + [ + 'repositories' => array_values($repo), + ], + ['git@github.com:vendor/project-beta.git', 'git@github.com:vendor/project-alpha.git'], + ]; + + return $data; + } + + /** + * @dataProvider dataFilterRepos + * + * @param string[] $expected + * @param array $config + * @param string[]|null $filterRepos + * @param string[]|null $filterPackages + */ + public function testFilterRepos(array $expected, array $config, array $filterRepos = null): void + { + + unset(Config::$defaultRepositories['packagist'], Config::$defaultRepositories['packagist.org']); + + $composer = (new Factory())->createComposer(new NullIO(), $config, true, null, false); + + $selection = new PackageSelection(new NullOutput(), 'build', $config, false); + $selection->setRepositoriesFilter($filterRepos); + $selection->setPackagesFilter([]); + + $selection->select($composer, true); + + $selectionRef = new \ReflectionClass(PackageSelection::class); + $selected = $selectionRef->getProperty('selected'); + $selected->setAccessible(true); + + \sort($expected, \SORT_STRING); + self::assertEquals($expected, \array_keys($selected->getValue($selection))); + } + /** * @return array */