diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d16e9904..cb62fb6d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Added CI schedule variables endpoints * Added support for triggering a pipeline +* Added support for the search_namespaces projects parameter [11.1.0]: https://github.com/GitLabPHP/Client/compare/11.0.0...11.1.0 diff --git a/src/Api/Projects.php b/src/Api/Projects.php index d8c573963..61f05e27e 100644 --- a/src/Api/Projects.php +++ b/src/Api/Projects.php @@ -30,6 +30,7 @@ class Projects extends AbstractApi * or last_activity_at fields (default is created_at) * @var string $sort Return projects sorted in asc or desc order (default is desc) * @var string $search return list of projects matching the search criteria + * @var bool $search_namespaces Include ancestor namespaces when matching search criteria * @var bool $simple return only the ID, URL, name, and path of each project * @var bool $owned limit by projects owned by the current user * @var bool $membership limit by projects that the current user is a member of @@ -66,6 +67,10 @@ public function all(array $parameters = []) ->setAllowedValues('sort', ['asc', 'desc']) ; $resolver->setDefined('search'); + $resolver->setDefined('search_namespaces') + ->setAllowedTypes('search_namespaces', 'bool') + ->setNormalizer('search_namespaces', $booleanNormalizer) + ; $resolver->setDefined('simple') ->setAllowedTypes('simple', 'bool') ->setNormalizer('simple', $booleanNormalizer) diff --git a/tests/Api/ProjectsTest.php b/tests/Api/ProjectsTest.php index 3c21766a1..2e53efb66 100644 --- a/tests/Api/ProjectsTest.php +++ b/tests/Api/ProjectsTest.php @@ -125,6 +125,17 @@ public function shouldSearchProjects(): void $this->assertEquals($expectedArray, $api->all(['search' => 'a project'])); } + /** + * @test + */ + public function shouldSearchProjectsWithNamespace(): void + { + $expectedArray = $this->getMultipleProjectsDataWithNamespace(); + + $api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['search' => 'a_project', 'search_namespaces' => 'true']); + $this->assertEquals($expectedArray, $api->all(['search' => 'a_project', 'search_namespaces' => true])); + } + /** * @test */ @@ -1914,6 +1925,14 @@ protected function getMultipleProjectsData() ]; } + protected function getMultipleProjectsDataWithNamespace() + { + return [ + ['id' => 1, 'name' => 'A project', 'namespace' => ['id' => 4, 'name' => 'A namespace', 'path' => 'a_namespace']], + ['id' => 2, 'name' => 'Another project', 'namespace' => ['id' => 5, 'name' => 'Another namespace', 'path' => 'another_namespace']], + ]; + } + public function possibleAccessLevels() { return [