wishthis/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Review.php
2022-01-21 14:12:04 +01:00

205 lines
7.7 KiB
PHP

<?php
namespace Github\Api\PullRequest;
use Github\Api\AbstractApi;
use Github\Api\AcceptHeaderTrait;
use Github\Exception\InvalidArgumentException;
use Github\Exception\MissingArgumentException;
/**
* API for accessing Pull Request Reviews from your Git/Github repositories.
*
* @link https://developer.github.com/v3/pulls/reviews/
*
* @author Christian Flothmann <christian.flothmann@sensiolabs.de>
*/
class Review extends AbstractApi
{
use AcceptHeaderTrait;
public function configure()
{
return $this;
}
/**
* Get a listing of a pull request's reviews by the username, repository and pull request number.
*
* @link https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param array $params a list of extra parameters.
*
* @return array array of pull request reviews for the pull request
*/
public function all($username, $repository, $pullRequest, array $params = [])
{
$parameters = array_merge([
'page' => 1,
'per_page' => 30,
], $params);
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews', $parameters);
}
/**
* Get a single pull request review by the username, repository, pull request number and the review id.
*
* @link https://developer.github.com/v3/pulls/reviews/#get-a-single-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param int $id the review id
*
* @return array the pull request review
*/
public function show($username, $repository, $pullRequest, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id);
}
/**
* Delete a single pull request review by the username, repository, pull request number and the review id.
*
* @link https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param int $id the review id
*
* @return array|string
*/
public function remove($username, $repository, $pullRequest, $id)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id);
}
/**
* Get comments for a single pull request review.
*
* @link https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param int $id the review id
*
* @return array|string
*/
public function comments($username, $repository, $pullRequest, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id.'/comments');
}
/**
* Create a pull request review by the username, repository and pull request number.
*
* @link https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param array $params a list of extra parameters.
*
* @throws MissingArgumentException
*
* @return array the pull request review
*/
public function create($username, $repository, $pullRequest, array $params = [])
{
if (array_key_exists('event', $params) && !in_array($params['event'], ['APPROVE', 'REQUEST_CHANGES', 'COMMENT'], true)) {
throw new InvalidArgumentException(sprintf('"event" must be one of ["APPROVE", "REQUEST_CHANGES", "COMMENT"] ("%s" given).', $params['event']));
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews', $params);
}
/**
* Submit a pull request review by the username, repository, pull request number and the review id.
*
* @link https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param int $id the review id
* @param array $params a list of extra parameters.
*
* @throws MissingArgumentException
*
* @return array the pull request review
*/
public function submit($username, $repository, $pullRequest, $id, array $params = [])
{
if (!isset($params['event'])) {
throw new MissingArgumentException('event');
}
if (!in_array($params['event'], ['APPROVE', 'REQUEST_CHANGES', 'COMMENT'], true)) {
throw new InvalidArgumentException(sprintf('"event" must be one of ["APPROVE", "REQUEST_CHANGES", "COMMENT"] ("%s" given).', $params['event']));
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id.'/events', $params);
}
/**
* Dismiss a pull request review by the username, repository, pull request number and the review id.
*
* @link https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param int $id the review id
* @param string $message a mandatory dismissal message
*
* @return array|string
*/
public function dismiss($username, $repository, $pullRequest, $id, $message)
{
if (!is_string($message)) {
throw new InvalidArgumentException(sprintf('"message" must be a valid string ("%s" given).', gettype($message)));
}
if (empty($message)) {
throw new InvalidArgumentException('"message" is mandatory and cannot be empty');
}
return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id.'/dismissals', [
'message' => $message,
]);
}
/**
* Update a pull request review by the username, repository, pull request number and the review id.
*
* @link https://developer.github.com/v3/pulls/reviews/#update-a-pull-request-review
*
* @param string $username the username
* @param string $repository the repository
* @param int $pullRequest the pull request number
* @param int $id the review id
* @param string $body a mandatory dismissal message
*
* @return array|string
*/
public function update($username, $repository, $pullRequest, $id, $body)
{
if (!is_string($body)) {
throw new InvalidArgumentException(sprintf('"body" must be a valid string ("%s" given).', gettype($body)));
}
if (empty($body)) {
throw new InvalidArgumentException('"body" is mandatory and cannot be empty');
}
return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id, [
'body' => $body,
]);
}
}