using System.Collections.Generic;
using System.Threading.Tasks;
namespace Octokit
{
///
/// A client for GitHub's Pull Request Review API.
///
///
/// See the Review API documentation for more information.
///
public class PullRequestReviewsClient : ApiClient, IPullRequestReviewsClient
{
public PullRequestReviewsClient(IApiConnection apiConnection)
: base(apiConnection)
{
}
///
/// Gets reviews for a specified pull request.
///
/// https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
/// The owner of the repository
/// The name of the repository
/// The pull request number
[ManualRoute("GET", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews")]
public Task> GetAll(string owner, string name, int number)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
return GetAll(owner, name, number, ApiOptions.None);
}
///
/// Gets reviews for a specified pull request.
///
/// https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
/// The Id of the repository
/// The pull request number
[ManualRoute("GET", "/repositories/{id}/pulls/{number}/reviews")]
public Task> GetAll(long repositoryId, int number)
{
return GetAll(repositoryId, number, ApiOptions.None);
}
///
/// Gets reviews for a specified pull request.
///
/// https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// Options for changing the API response
[ManualRoute("GET", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews")]
public Task> GetAll(string owner, string name, int number, ApiOptions options)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(options, nameof(options));
var endpoint = ApiUrls.PullRequestReviews(owner, name, number);
return ApiConnection.GetAll(endpoint, null, options);
}
///
/// Gets reviews for a specified pull request.
///
/// https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
/// The Id of the repository
/// The pull request number
/// Options for changing the API response
[ManualRoute("GET", "/repositories/{id}/pulls/{number}/reviews")]
public Task> GetAll(long repositoryId, int number, ApiOptions options)
{
Ensure.ArgumentNotNull(options, nameof(options));
var endpoint = ApiUrls.PullRequestReviews(repositoryId, number);
return ApiConnection.GetAll(endpoint, options);
}
///
/// Gets a single pull request review by ID.
///
/// https://developer.github.com/v3/pulls/reviews/#get-a-single-review
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// The pull request review number
[ManualRoute("GET", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}")]
public Task Get(string owner, string name, int number, long reviewId)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
var endpoint = ApiUrls.PullRequestReview(owner, name, number, reviewId);
return ApiConnection.Get(endpoint);
}
///
/// Gets a single pull request review by ID.
///
/// https://developer.github.com/v3/pulls/reviews/#get-a-single-review
/// The Id of the repository
/// The pull request number
/// The pull request review number
[ManualRoute("GET", "/repositories/{id}/pulls/{number}/reviews/{review_id}")]
public Task Get(long repositoryId, int number, long reviewId)
{
var endpoint = ApiUrls.PullRequestReview(repositoryId, number, reviewId);
return ApiConnection.Get(endpoint);
}
///
/// Creates a review.
///
/// https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review
/// The owner of the repository
/// The name of the repository
/// The Pull Request number
/// The review
[ManualRoute("POST", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews")]
public Task Create(string owner, string name, int number, PullRequestReviewCreate review)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(review, nameof(review));
var endpoint = ApiUrls.PullRequestReviews(owner, name, number);
return ApiConnection.Post(endpoint, review, null, null);
}
///
/// Creates a review.
///
/// https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review
/// The Id of the repository
/// The Pull Request number
/// The review
[ManualRoute("POST", "/repositories/{id}/pulls/{number}/reviews")]
public Task Create(long repositoryId, int number, PullRequestReviewCreate review)
{
Ensure.ArgumentNotNull(review, nameof(review));
var endpoint = ApiUrls.PullRequestReviews(repositoryId, number);
return ApiConnection.Post(endpoint, review, null, null);
}
///
/// Deletes a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// The pull request review number
[ManualRoute("DELETE", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}")]
public Task Delete(string owner, string name, int number, long reviewId)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
var endpoint = ApiUrls.PullRequestReview(owner, name, number, reviewId);
return ApiConnection.Delete(endpoint);
}
///
/// Deletes a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review
/// The Id of the repository
/// The pull request number
/// The pull request review number
[ManualRoute("DELETE", "/repositories/{id}/pulls/{number}/reviews/{review_id}")]
public Task Delete(long repositoryId, int number, long reviewId)
{
var endpoint = ApiUrls.PullRequestReview(repositoryId, number, reviewId);
return ApiConnection.Delete(endpoint);
}
///
/// Dismisses a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// The pull request review number
/// The message indicating why the review was dismissed
[ManualRoute("PUT", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals")]
public Task Dismiss(string owner, string name, int number, long reviewId, PullRequestReviewDismiss dismissMessage)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(dismissMessage, nameof(dismissMessage));
var endpoint = ApiUrls.PullRequestReviewDismissal(owner, name, number, reviewId);
return ApiConnection.Put(endpoint, dismissMessage);
}
///
/// Dismisses a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review
/// The Id of the repository
/// The pull request number
/// The pull request review number
/// The message indicating why the review was dismissed
[ManualRoute("PUT", "/repositories/{id}/pulls/{number}/reviews/{review_id}/dismissals")]
public Task Dismiss(long repositoryId, int number, long reviewId, PullRequestReviewDismiss dismissMessage)
{
Ensure.ArgumentNotNull(dismissMessage, nameof(dismissMessage));
var endpoint = ApiUrls.PullRequestReviewDismissal(repositoryId, number, reviewId);
return ApiConnection.Put(endpoint, dismissMessage);
}
///
/// Submits a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// The pull request review number
/// The message and event being submitted for the review
[ManualRoute("POST", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events")]
public Task Submit(string owner, string name, int number, long reviewId, PullRequestReviewSubmit submitMessage)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(submitMessage, nameof(submitMessage));
var endpoint = ApiUrls.PullRequestReviewSubmit(owner, name, number, reviewId);
return ApiConnection.Post(endpoint, submitMessage, null, null);
}
///
/// Submits a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review
/// The Id of the repository
/// The pull request number
/// The pull request review number
/// The message and event being submitted for the review
[ManualRoute("POST", "/repositories/{id}/pulls/{number}/reviews/{review_id}/events")]
public Task Submit(long repositoryId, int number, long reviewId, PullRequestReviewSubmit submitMessage)
{
Ensure.ArgumentNotNull(submitMessage, nameof(submitMessage));
var endpoint = ApiUrls.PullRequestReviewSubmit(repositoryId, number, reviewId);
return ApiConnection.Post(endpoint, submitMessage, null, null);
}
///
/// Lists comments for a single review
///
/// https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// The pull request review number
[ManualRoute("GET", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments")]
public Task> GetAllComments(string owner, string name, int number, long reviewId)
{
return GetAllComments(owner, name, number, reviewId, ApiOptions.None);
}
///
/// Dismisses a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
/// The Id of the repository
/// The pull request number
/// The pull request review number
[ManualRoute("POST", "/repositories/{id}/pulls/{number}/reviews/{review_id}/comments")]
public Task> GetAllComments(long repositoryId, int number, long reviewId)
{
return GetAllComments(repositoryId, number, reviewId, ApiOptions.None);
}
///
/// Lists comments for a single review
///
/// https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
/// The owner of the repository
/// The name of the repository
/// The pull request number
/// The pull request review number
/// Options for changing the API response
[ManualRoute("GET", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments")]
public Task> GetAllComments(string owner, string name, int number, long reviewId, ApiOptions options)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
var endpoint = ApiUrls.PullRequestReviewComments(owner, name, number, reviewId);
return ApiConnection.GetAll(endpoint, null, options);
}
///
/// Dismisses a pull request review.
///
/// https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
/// The Id of the repository
/// The pull request number
/// The pull request review number
/// Options for changing the API response
[ManualRoute("POST", "/repositories/{id}/pulls/{number}/reviews/{review_id}/comments")]
public Task> GetAllComments(long repositoryId, int number, long reviewId, ApiOptions options)
{
var endpoint = ApiUrls.PullRequestReviewComments(repositoryId, number, reviewId);
return ApiConnection.GetAll(endpoint, null, options);
}
}
}