/// <summary> /// Creates a pull request comment. /// </summary> /// <param name="pullRequest">The <see cref="GitHubPullRequest"/> to comment on.</param> /// <param name="file">The <see cref="GitHubPullRequestFile"/> to comment on.</param> /// <param name="analyzer">The <see cref="ICodeAnalyzer"/> to use for finding violations.</param> /// <param name="physicalFilePath">The physical path of the file stored locally.</param> /// <returns> /// A <see cref="Task{TResult}"/> of <see cref="IEnumerable{T}"/> of <see cref="PullRequestReviewComment"/> /// representing the commenting operation. /// </returns> public override async Task<IEnumerable<PullRequestReviewComment>> Create(GitHubPullRequest pullRequest, GitHubPullRequestFile file, ICodeAnalyzer analyzer, string physicalFilePath) { if (pullRequest == null) { throw new ArgumentNullException("pullRequest"); } if (file == null) { throw new ArgumentNullException("file"); } var comments = new List<PullRequestReviewComment>(); if (file.Changes > 0) { var comment = new PullRequestReviewCommentCreate( "Renamed files not supported.", pullRequest.LastCommitId, file.FileName, 1); var addedComment = await this.Create(comment, pullRequest.Number); comments.Add(addedComment); } return comments; }
public void PullRequestReviewCommentCreateEnsuresArgumentsValue() { string body = "body"; string commitId = "sha"; string path = "path"; int position = 1; var comment = new PullRequestReviewCommentCreate(body, commitId, path, position); Assert.Equal(body, comment.Body); Assert.Equal(commitId, comment.CommitId); Assert.Equal(path, comment.Path); Assert.Equal(position, comment.Position); }
/// <summary> /// Creates a comment on a pull request review. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/comments/#create-a-comment</remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="number">The Pull Request number</param> /// <param name="comment">The comment</param> /// <returns>The created <see cref="PullRequestReviewComment"/></returns> public async Task<PullRequestReviewComment> Create(string owner, string name, int number, PullRequestReviewCommentCreate comment) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(comment, "comment"); var response = await ApiConnection.Connection.Post<PullRequestReviewComment>(ApiUrls.PullRequestReviewComments(owner, name, number), comment, null, null).ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.Created) { throw new ApiException("Invalid Status Code returned. Expected a 201", response.StatusCode); } return response.BodyAsObject; }
public PullRequestDiffViewModel(ISessionService sessionService, IActionMenuFactory actionMenuFactory, IAlertDialogFactory alertDialogFactory) { var gotoCreateCommentCommand = ReactiveCommand.Create().WithSubscription(_ => { var vm = new ComposerViewModel(async s => { var req = new PullRequestReviewCommentCreate(s, ParentViewModel.HeadSha, Filename, SelectedPatchLine.Item1); var comment = await sessionService.GitHubClient.PullRequest.Comment.Create(ParentViewModel.RepositoryOwner, ParentViewModel.RepositoryName, ParentViewModel.PullRequestId, req); _commentCreatedObservable.OnNext(comment); }, alertDialogFactory); NavigateTo(vm); }); GoToCommentCommand = ReactiveCommand.CreateAsyncTask(this.WhenAnyValue(x => x.SelectedPatchLine).Select(x => x != null), sender => { var sheet = actionMenuFactory.Create(); sheet.AddButton(string.Format("Add Comment on Line {0}", SelectedPatchLine.Item2), gotoCreateCommentCommand); return sheet.Show(sender); }); this.WhenAnyValue(x => x.PullRequestFile.Patch) .IsNotNull() .ToProperty(this, x => x.Patch, out _patch); var comments = new ReactiveList<PullRequestReviewComment>(); Comments = comments.CreateDerivedCollection( x => new FileDiffCommentViewModel(x.User.Login, x.User.AvatarUrl, x.Body, x.Position ?? 0)); this.WhenAnyValue(x => x.ParentViewModel.Comments) .Merge(this.WhenAnyObservable(x => x.ParentViewModel.Comments.Changed).Select(_ => ParentViewModel.Comments)) .Select(x => x.Where(y => string.Equals(y.Path, Filename, StringComparison.OrdinalIgnoreCase)).ToList()) .Subscribe(x => comments.Reset(x)); this.WhenAnyValue(x => x.PullRequestFile.FileName) .ToProperty(this, x => x.Filename, out _filename); this.WhenAnyValue(x => x.Filename) .Subscribe(x => { if (string.IsNullOrEmpty(x)) Title = "Diff"; else Title = Path.GetFileName(Filename) ?? Filename.Substring(Filename.LastIndexOf('/') + 1); }); }
/// <summary> /// Creates a comment on a pull request review. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/comments/#create-a-comment</remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="number">The Pull Request number</param> /// <param name="comment">The comment</param> /// <returns>The created <see cref="PullRequestReviewComment"/></returns> public async Task <PullRequestReviewComment> Create(string owner, string name, int number, PullRequestReviewCommentCreate comment) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(comment, "comment"); var endpoint = ApiUrls.PullRequestReviewComments(owner, name, number); var response = await ApiConnection.Connection.Post <PullRequestReviewComment>(endpoint, comment, null, null).ConfigureAwait(false); if (response.HttpResponse.StatusCode != HttpStatusCode.Created) { throw new ApiException("Invalid Status Code returned. Expected a 201", response.HttpResponse.StatusCode); } return(response.Body); }
async Task<PullRequestReviewComment> CreateComment(string body, int position, string repoName, string pullRequestCommitId, int pullRequestNumber) { var comment = new PullRequestReviewCommentCreate(body, pullRequestCommitId, path, position); var createdComment = await _client.Create(Helper.UserName, repoName, pullRequestNumber, comment); AssertComment(createdComment, body, position); return createdComment; }
/// <summary> /// Creates a comment on a pull request review. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/comments/#create-a-comment</remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="number">The Pull Request number</param> /// <param name="comment">The comment</param> public async Task<PullRequestReviewComment> Create(int repositoryId, int number, PullRequestReviewCommentCreate comment) { Ensure.ArgumentNotNull(comment, "comment"); var endpoint = ApiUrls.PullRequestReviewComments(repositoryId, number); var response = await ApiConnection.Connection.Post<PullRequestReviewComment>(endpoint, comment, null, null).ConfigureAwait(false); if (response.HttpResponse.StatusCode != HttpStatusCode.Created) { throw new ApiException("Invalid Status Code returned. Expected a 201", response.HttpResponse.StatusCode); } return response.Body; }
/// <summary> /// Creates a comment on a pull request review. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/comments/#create-a-comment</remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="number">The Pull Request number</param> /// <param name="comment">The comment</param> public async Task<PullRequestReviewComment> Create(long repositoryId, int number, PullRequestReviewCommentCreate comment) { Ensure.ArgumentNotNull(comment, nameof(comment)); var endpoint = ApiUrls.PullRequestReviewComments(repositoryId, number); var response = await ApiConnection.Connection.Post<PullRequestReviewComment>(endpoint, comment, null, null).ConfigureAwait(false); if (response.HttpResponse.StatusCode != HttpStatusCode.Created) { throw new ApiException("Invalid Status Code returned. Expected a 201", response.HttpResponse.StatusCode); } return response.Body; }
public async Task EnsuresArgumentsNotNull() { var connection = Substitute.For<IApiConnection>(); var client = new PullRequestReviewCommentsClient(connection); string body = "Comment content"; string commitId = "qe3dsdsf6"; string path = "file.css"; int position = 7; var comment = new PullRequestReviewCommentCreate(body, commitId, path, position); await Assert.ThrowsAsync<ArgumentNullException>(() => client.Create(null, "fakeRepoName", 1, comment)); await Assert.ThrowsAsync<ArgumentException>(() => client.Create("", "fakeRepoName", 1, comment)); await Assert.ThrowsAsync<ArgumentNullException>(() => client.Create("fakeOwner", null, 1, comment)); await Assert.ThrowsAsync<ArgumentException>(() => client.Create("fakeOwner", "", 1, comment)); await Assert.ThrowsAsync<ArgumentNullException>(() => client.Create("fakeOwner", "fakeRepoName", 1, null)); }
public void PostsToCorrectUrl() { var connection = Substitute.For<IApiConnection>(); var client = new PullRequestReviewCommentsClient(connection); var comment = new PullRequestReviewCommentCreate("Comment content", "qe3dsdsf6", "file.css", 7); client.Create("fakeOwner", "fakeRepoName", 13, comment); connection.Connection.Received().Post<PullRequestReviewComment>(Arg.Is<Uri>(u => u.ToString() == "repos/fakeOwner/fakeRepoName/pulls/13/comments"), comment, null, null); }
/// <summary> /// Creates a pull request comment. /// </summary> /// <param name="comment">The <see cref="PullRequestReviewCommentCreate"/> to create.</param> /// <param name="pullRequestNumber">The GitHub pull request number.</param> /// <returns> /// A <see cref="Task{TResult}"/> of <see cref="PullRequestReviewComment"/> representing the commenting /// operation. /// </returns> protected async Task<PullRequestReviewComment> Create( PullRequestReviewCommentCreate comment, int pullRequestNumber) { return await this.client.Create(this.repository.Owner, this.repository.Name, pullRequestNumber, comment); }