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 */