Skip to content

Commit 289e42c

Browse files
authored
Merge pull request #473 from jimmy4o4/master
Add method to get issues for a group.
2 parents f363461 + 054c954 commit 289e42c

File tree

2 files changed

+104
-28
lines changed

2 files changed

+104
-28
lines changed

lib/Gitlab/Api/Issues.php

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,17 @@ class Issues extends AbstractApi
2121
*/
2222
public function all($project_id = null, array $parameters = [])
2323
{
24-
$resolver = $this->createOptionsResolver();
25-
26-
$resolver->setDefined('state')
27-
->setAllowedValues('state', ['opened', 'closed'])
28-
;
29-
$resolver->setDefined('labels');
30-
$resolver->setDefined('milestone');
31-
$resolver->setDefined('iids')
32-
->setAllowedTypes('iids', 'array')
33-
->setAllowedValues('iids', function (array $value) {
34-
return count($value) == count(array_filter($value, 'is_int'));
35-
})
36-
;
37-
$resolver->setDefined('scope')
38-
->setAllowedValues('scope', ['created-by-me', 'assigned-to-me', 'all'])
39-
;
40-
$resolver->setDefined('order_by')
41-
->setAllowedValues('order_by', ['created_at', 'updated_at'])
42-
;
43-
$resolver->setDefined('sort')
44-
->setAllowedValues('sort', ['asc', 'desc'])
45-
;
46-
$resolver->setDefined('search');
47-
$resolver->setDefined('assignee_id')
48-
->setAllowedTypes('assignee_id', 'integer')
49-
;
50-
5124
$path = $project_id === null ? 'issues' : $this->getProjectPath($project_id, 'issues');
5225

53-
return $this->get($path, $resolver->resolve($parameters));
26+
return $this->get($path, $this->createOptionsResolver()->resolve($parameters));
27+
}
28+
29+
public function group($group_id, array $parameters = [])
30+
{
31+
return $this->get(
32+
$this->getGroupPath($group_id, 'issues'),
33+
$this->createOptionsResolver()->resolve($parameters)
34+
);
5435
}
5536

5637
/**
@@ -328,4 +309,39 @@ public function closedByMergeRequests($project_id, $issue_iid)
328309
{
329310
return $this->get($this->getProjectPath($project_id, 'issues/'.$this->encodePath($issue_iid)).'/closed_by');
330311
}
312+
313+
/**
314+
* {@inheritDoc}
315+
*/
316+
protected function createOptionsResolver()
317+
{
318+
$resolver = parent::createOptionsResolver();
319+
320+
$resolver->setDefined('state')
321+
->setAllowedValues('state', ['opened', 'closed'])
322+
;
323+
$resolver->setDefined('labels');
324+
$resolver->setDefined('milestone');
325+
$resolver->setDefined('iids')
326+
->setAllowedTypes('iids', 'array')
327+
->setAllowedValues('iids', function (array $value) {
328+
return count($value) == count(array_filter($value, 'is_int'));
329+
})
330+
;
331+
$resolver->setDefined('scope')
332+
->setAllowedValues('scope', ['created-by-me', 'assigned-to-me', 'all'])
333+
;
334+
$resolver->setDefined('order_by')
335+
->setAllowedValues('order_by', ['created_at', 'updated_at'])
336+
;
337+
$resolver->setDefined('sort')
338+
->setAllowedValues('sort', ['asc', 'desc'])
339+
;
340+
$resolver->setDefined('search');
341+
$resolver->setDefined('assignee_id')
342+
->setAllowedTypes('assignee_id', 'integer')
343+
;
344+
345+
return $resolver;
346+
}
331347
}

test/Gitlab/Tests/Api/IssuesTest.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,66 @@ public function shouldGetAllIssues()
2222
$this->assertEquals($expectedArray, $api->all());
2323
}
2424

25+
/**
26+
* @test
27+
*/
28+
public function shouldGetAllGroupIssues()
29+
{
30+
$expectedArray = array(
31+
array('id' => 1, 'title' => 'An issue'),
32+
array('id' => 2, 'title' => 'Another issue'),
33+
);
34+
35+
$api = $this->getApiMock();
36+
$api->expects($this->once())
37+
->method('get')
38+
->with('groups/1/issues', array())
39+
->will($this->returnValue($expectedArray))
40+
;
41+
42+
$this->assertEquals($expectedArray, $api->group(1));
43+
}
44+
45+
/**
46+
* @test
47+
*/
48+
public function shouldGetGroupIssuesWithPagination()
49+
{
50+
$expectedArray = array(
51+
array('id' => 1, 'title' => 'An issue'),
52+
array('id' => 2, 'title' => 'Another issue'),
53+
);
54+
55+
$api = $this->getApiMock();
56+
$api->expects($this->once())
57+
->method('get')
58+
->with('groups/1/issues', array('page' => 2, 'per_page' => 5))
59+
->will($this->returnValue($expectedArray))
60+
;
61+
62+
$this->assertEquals($expectedArray, $api->group(1, ['page' => 2, 'per_page' => 5]));
63+
}
64+
65+
/**
66+
* @test
67+
*/
68+
public function shouldGetGroupIssuesWithParams()
69+
{
70+
$expectedArray = array(
71+
array('id' => 1, 'title' => 'An issue'),
72+
array('id' => 2, 'title' => 'Another issue'),
73+
);
74+
75+
$api = $this->getApiMock();
76+
$api->expects($this->once())
77+
->method('get')
78+
->with('groups/1/issues', array('order_by' => 'created_at', 'sort' => 'desc', 'labels' => 'foo,bar', 'state' => 'opened'))
79+
->will($this->returnValue($expectedArray))
80+
;
81+
82+
$this->assertEquals($expectedArray, $api->group(1, array('order_by' => 'created_at', 'sort' => 'desc', 'labels' => 'foo,bar', 'state' => 'opened')));
83+
}
84+
2585
/**
2686
* @test
2787
*/

0 commit comments

Comments
 (0)