Skip to content

Commit dc11c09

Browse files
authored
Merge pull request GitLabPHP#281 from tobiasetter/master
Pagination of Project Members
2 parents 208d796 + f6c76e5 commit dc11c09

File tree

2 files changed

+51
-7
lines changed

2 files changed

+51
-7
lines changed

lib/Gitlab/Api/Projects.php

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,22 +242,46 @@ public function cancelPipeline($project_id, $pipeline_id)
242242

243243
/**
244244
* @param int $project_id
245-
* @param string $username_query
245+
* @param array $parameters (
246+
*
247+
* @var string $query The query you want to search members for.
248+
* @var string $page The page you want to take members from. (default: 1)
249+
* @var string $per_page The count of members per page. (default: 20)
250+
* )
251+
*
252+
* @throws MissingOptionsException If a required option is not provided
253+
*
246254
* @return mixed
247255
*/
248-
public function members($project_id, $username_query = null)
256+
public function members($project_id, $parameters = [])
249257
{
250-
$params = array();
251-
if (!empty($username_query)) {
252-
$params['query'] = $username_query;
258+
if (!is_array($parameters)) {
259+
@trigger_error("Deprecated: String parameter of the members() function is deprecated.", E_USER_NOTICE);
260+
$username_query = $parameters;
261+
$parameters = array();
262+
if (!empty($username_query)) {
263+
$parameters['query'] = $username_query;
264+
}
253265
}
254266

255267
$resolver = $this->createOptionsResolver();
268+
269+
$resolver->setDefaults(array(
270+
'page' => 1,
271+
'per_page' => 20,
272+
));
273+
256274
$resolver->setDefined('query')
257275
->setAllowedTypes('query', 'string')
258276
;
277+
$resolver->setDefined('page')
278+
->setAllowedTypes('page', 'int')
279+
;
280+
$resolver->setDefined('per_page')
281+
->setAllowedTypes('per_page', 'int')
282+
;
259283

260-
return $this->get($this->getProjectPath($project_id, 'members'), $resolver->resolve($params));
284+
return $this->get($this->getProjectPath($project_id, 'members'), $resolver->resolve($parameters));
261285
}
262286

263287
/**

test/Gitlab/Tests/Api/ProjectsTest.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,13 +371,33 @@ public function shouldGetMembersWithQuery()
371371
$api = $this->getApiMock();
372372
$api->expects($this->once())
373373
->method('get')
374-
->with('projects/1/members', array('query' => 'at'))
374+
->with('projects/1/members', array('query' => 'at', 'page' => 1, 'per_page' => 20))
375375
->will($this->returnValue($expectedArray))
376376
;
377377

378378
$this->assertEquals($expectedArray, $api->members(1, 'at'));
379379
}
380380

381+
/**
382+
* @test
383+
*/
384+
public function shouldGetMembersWithNullQuery()
385+
{
386+
$expectedArray = array(
387+
array('id' => 1, 'name' => 'Matt'),
388+
array('id' => 2, 'name' => 'Bob')
389+
);
390+
391+
$api = $this->getApiMock();
392+
$api->expects($this->once())
393+
->method('get')
394+
->with('projects/1/members', array('page' => 1, 'per_page' => 20))
395+
->will($this->returnValue($expectedArray))
396+
;
397+
398+
$this->assertEquals($expectedArray, $api->members(1, null));
399+
}
400+
381401
/**
382402
* @test
383403
*/

0 commit comments

Comments
 (0)