Skip to content

Commit 0a0826b

Browse files
acrobatNyholm
authored andcommitted
Implement missing review request api (#547)
1 parent 9f0cf3a commit 0a0826b

File tree

5 files changed

+174
-0
lines changed

5 files changed

+174
-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: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Github\Api\PullRequest;
44

55
use Github\Api\AbstractApi;
6+
use Github\Api\AcceptHeaderTrait;
67
use Github\Exception\InvalidArgumentException;
78
use Github\Exception\MissingArgumentException;
89

@@ -14,6 +15,15 @@
1415
*/
1516
class Review extends AbstractApi
1617
{
18+
use AcceptHeaderTrait;
19+
20+
public function configure()
21+
{
22+
$this->acceptHeaderValue = 'application/vnd.github.black-cat-preview+json';
23+
24+
return $this;
25+
}
26+
1727
/**
1828
* Get a listing of a pull request's reviews by the username, repository and pull request number.
1929
*
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
namespace Github\Api\PullRequest;
4+
5+
use Github\Api\AbstractApi;
6+
use Github\Api\AcceptHeaderTrait;
7+
8+
/**
9+
* @link https://developer.github.com/v3/pulls/review_requests/
10+
*/
11+
class ReviewRequest extends AbstractApi
12+
{
13+
use AcceptHeaderTrait;
14+
15+
public function configure()
16+
{
17+
$this->acceptHeaderValue = 'application/vnd.github.black-cat-preview+json';
18+
19+
return $this;
20+
}
21+
22+
/**
23+
* @link https://developer.github.com/v3/pulls/review_requests/#list-review-requests
24+
*
25+
* @param string $username
26+
* @param string $repository
27+
* @param int $pullRequest
28+
* @param array $params
29+
*
30+
* @return array
31+
*/
32+
public function all($username, $repository, $pullRequest, array $params = [])
33+
{
34+
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', $params);
35+
}
36+
37+
/**
38+
* @link https://developer.github.com/v3/pulls/review_requests/#create-a-review-request
39+
*
40+
* @param string $username
41+
* @param string $repository
42+
* @param int $pullRequest
43+
* @param array $reviewers
44+
*
45+
* @return string
46+
*/
47+
public function create($username, $repository, $pullRequest, array $reviewers)
48+
{
49+
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers]);
50+
}
51+
52+
/**
53+
* @link https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request
54+
*
55+
* @param string $username
56+
* @param string $repository
57+
* @param int $pullRequest
58+
* @param array $reviewers
59+
*
60+
* @return string
61+
*/
62+
public function remove($username, $repository, $pullRequest, array $reviewers)
63+
{
64+
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers]);
65+
}
66+
}
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)