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); } } }