diff --git a/lib/Gitlab/Api/Projects.php b/lib/Gitlab/Api/Projects.php index 040641069..116458341 100644 --- a/lib/Gitlab/Api/Projects.php +++ b/lib/Gitlab/Api/Projects.php @@ -242,22 +242,46 @@ public function cancelPipeline($project_id, $pipeline_id) /** * @param int $project_id - * @param string $username_query + * @param array $parameters ( + * + * @var string $query The query you want to search members for. + * @var string $page The page you want to take members from. (default: 1) + * @var string $per_page The count of members per page. (default: 20) + * ) + * + * @throws MissingOptionsException If a required option is not provided + * * @return mixed */ - public function members($project_id, $username_query = null) + public function members($project_id, $parameters = []) { - $params = array(); - if (!empty($username_query)) { - $params['query'] = $username_query; + if (!is_array($parameters)) { + @trigger_error("Deprecated: String parameter of the members() function is deprecated.", E_USER_NOTICE); + $username_query = $parameters; + $parameters = array(); + if (!empty($username_query)) { + $parameters['query'] = $username_query; + } } $resolver = $this->createOptionsResolver(); + + $resolver->setDefaults(array( + 'page' => 1, + 'per_page' => 20, + )); + $resolver->setDefined('query') ->setAllowedTypes('query', 'string') ; + $resolver->setDefined('page') + ->setAllowedTypes('page', 'int') + ; + $resolver->setDefined('per_page') + ->setAllowedTypes('per_page', 'int') + ; - return $this->get($this->getProjectPath($project_id, 'members'), $resolver->resolve($params)); + return $this->get($this->getProjectPath($project_id, 'members'), $resolver->resolve($parameters)); } /** diff --git a/test/Gitlab/Tests/Api/ProjectsTest.php b/test/Gitlab/Tests/Api/ProjectsTest.php index 0d9f07397..14f50218d 100644 --- a/test/Gitlab/Tests/Api/ProjectsTest.php +++ b/test/Gitlab/Tests/Api/ProjectsTest.php @@ -371,13 +371,33 @@ public function shouldGetMembersWithQuery() $api = $this->getApiMock(); $api->expects($this->once()) ->method('get') - ->with('projects/1/members', array('query' => 'at')) + ->with('projects/1/members', array('query' => 'at', 'page' => 1, 'per_page' => 20)) ->will($this->returnValue($expectedArray)) ; $this->assertEquals($expectedArray, $api->members(1, 'at')); } + /** + * @test + */ + public function shouldGetMembersWithNullQuery() + { + $expectedArray = array( + array('id' => 1, 'name' => 'Matt'), + array('id' => 2, 'name' => 'Bob') + ); + + $api = $this->getApiMock(); + $api->expects($this->once()) + ->method('get') + ->with('projects/1/members', array('page' => 1, 'per_page' => 20)) + ->will($this->returnValue($expectedArray)) + ; + + $this->assertEquals($expectedArray, $api->members(1, null)); + } + /** * @test */