Skip to content

Commit 0c3bd38

Browse files
committed
Implement missing review request api
1 parent 4eb1e2e commit 0c3bd38

File tree

5 files changed

+168
-0
lines changed

5 files changed

+168
-0
lines changed

doc/pull_request/review_request.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## Pull Requests / Review Requests API
2+
[Back to the "Pull Requests API"](../pull_requests.md) | [Back to the navigation](../README.md)
3+
4+
The Pull Request Review API is currently available for developers to preview.
5+
To access the API during the preview period, you must provide a custom media type in the Accept header:
6+
7+
```php
8+
$client->api('pull_request')->reviewRequests()->configure();
9+
```
10+
11+
### List all review requests
12+
13+
```php
14+
$reviewRequests = $client->api('pull_request')->reviewRequests()->all('twbs', 'bootstrap', 12);
15+
```
16+
17+
### Create a review request
18+
19+
```php
20+
$client->api('pull_request')->reviewRequests()->create('twbs', 'bootstrap', 12, array('user1', 'user2'));
21+
```
22+
23+
### Remove a review request
24+
25+
```php
26+
$client->api('pull_request')->reviewRequests()->remove('twbs', 'bootstrap', 12, array('user1', 'user2'));
27+
```

lib/Github/Api/PullRequest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Github\Api\PullRequest\Comments;
66
use Github\Api\PullRequest\Review;
7+
use Github\Api\PullRequest\ReviewRequest;
78
use Github\Exception\MissingArgumentException;
89

910
/**
@@ -71,6 +72,11 @@ public function reviews()
7172
return new Review($this->client);
7273
}
7374

75+
public function reviewRequests()
76+
{
77+
return new ReviewRequest($this->client);
78+
}
79+
7480
/**
7581
* Create a pull request.
7682
*

lib/Github/Api/PullRequest/Review.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
*/
1515
class Review extends AbstractApi
1616
{
17+
public function configure()
18+
{
19+
$this->acceptHeaderValue = 'application/vnd.github.black-cat-preview+json';
20+
21+
return $this;
22+
}
23+
1724
/**
1825
* Get a listing of a pull request's reviews by the username, repository and pull request number.
1926
*
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace Github\Api\PullRequest;
4+
5+
use Github\Api\AbstractApi;
6+
7+
/**
8+
* @link https://developer.github.com/v3/pulls/review_requests/
9+
*/
10+
class ReviewRequest extends AbstractApi
11+
{
12+
public function configure()
13+
{
14+
$this->acceptHeaderValue = 'application/vnd.github.black-cat-preview+json';
15+
16+
return $this;
17+
}
18+
19+
/**
20+
* @link https://developer.github.com/v3/pulls/review_requests/#list-review-requests
21+
*
22+
* @param string $username
23+
* @param string $repository
24+
* @param int $pullRequest
25+
* @param array $params
26+
*
27+
* @return array
28+
*/
29+
public function all($username, $repository, $pullRequest, array $params = [])
30+
{
31+
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', $params);
32+
}
33+
34+
/**
35+
* @link https://developer.github.com/v3/pulls/review_requests/#create-a-review-request
36+
*
37+
* @param string $username
38+
* @param string $repository
39+
* @param int $pullRequest
40+
* @param array $reviewers
41+
*
42+
* @return string
43+
*/
44+
public function create($username, $repository, $pullRequest, array $reviewers)
45+
{
46+
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers]);
47+
}
48+
49+
/**
50+
* @link https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request
51+
*
52+
* @param string $username
53+
* @param string $repository
54+
* @param int $pullRequest
55+
* @param array $reviewers
56+
*
57+
* @return string
58+
*/
59+
public function remove($username, $repository, $pullRequest, array $reviewers)
60+
{
61+
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers]);
62+
}
63+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Github\Tests\Api\PullRequest;
4+
5+
use Github\Api\PullRequest\ReviewRequest;
6+
use Github\Tests\Api\TestCase;
7+
8+
class ReviewRequestTest extends TestCase
9+
{
10+
/**
11+
* @test
12+
*/
13+
public function shouldGetAllReviewRequestsForAPullRequest()
14+
{
15+
$expectedValue = [
16+
['id' => 80],
17+
['id' => 81],
18+
];
19+
20+
$api = $this->getApiMock();
21+
$api
22+
->expects($this->once())
23+
->method('get')
24+
->with('/repos/octocat/Hello-World/pulls/12/requested_reviewers')
25+
->willReturn($expectedValue);
26+
27+
$this->assertSame($expectedValue, $api->all('octocat', 'Hello-World', 12));
28+
}
29+
30+
/**
31+
* @test
32+
*/
33+
public function shouldCreateReviewRequest()
34+
{
35+
$api = $this->getApiMock();
36+
$api->expects($this->once())
37+
->method('post')
38+
->with('/repos/octocat/Hello-World/pulls/12/requested_reviewers', ['reviewers' => ['testuser']])
39+
;
40+
41+
$api->create('octocat', 'Hello-World', 12, ['testuser']);
42+
}
43+
44+
/**
45+
* @test
46+
*/
47+
public function shouldDeleteReviewRequest()
48+
{
49+
$api = $this->getApiMock();
50+
$api->expects($this->once())
51+
->method('delete')
52+
->with('/repos/octocat/Hello-World/pulls/12/requested_reviewers', ['reviewers' => ['testuser']])
53+
;
54+
55+
$api->remove('octocat', 'Hello-World', 12, ['testuser']);
56+
}
57+
58+
/**
59+
* @return string
60+
*/
61+
protected function getApiClass()
62+
{
63+
return ReviewRequest::class;
64+
}
65+
}

0 commit comments

Comments
 (0)