public async Task DoesntThrowIfGetFileCalledDuringUpdate() { var comment = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment"); using (var diffService = new FakeDiffService()) { var pullRequest = CreatePullRequest(comment); var service = CreateService(diffService); var target = new PullRequestSession( service, Substitute.For <IAccount>(), pullRequest, Substitute.For <ILocalRepositoryModel>(), string.Empty, true); await target.GetFile("test.cs"); // Simulate calling GetFile with a file that's not yet been initialized // while doing the Update. service.WhenForAnyArgs(x => x.Diff(null, null, null, null, null)) .Do(_ => target.GetFile("other.cs").Forget()); await target.Update(pullRequest); } }
public async Task AddsNewReviewCommentToThread() { var baseContents = @"Line 1 Line 2 Line 3 Line 4"; var editorContents = @"Line 1 Line 2 Line 3 with comment Line 4"; var comment1 = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment", "Comment1"); var comment2 = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment", "Comment2"); using (var diffService = new FakeDiffService()) { var pullRequest = CreatePullRequest(comment1); var service = CreateService(diffService); diffService.AddFile(FilePath, baseContents); var target = new PullRequestSession( service, Substitute.For <IAccount>(), pullRequest, Substitute.For <ILocalRepositoryModel>(), "owner", true); var editor = new FakeEditorContentSource(editorContents); var file = await target.GetFile(FilePath, editor); var thread = file.InlineCommentThreads.Single(); Assert.Equal("Comment1", thread.Comments.Single().Body); Assert.Equal(2, thread.LineNumber); pullRequest = CreatePullRequest(comment1, comment2); await target.Update(pullRequest); thread = file.InlineCommentThreads.Single(); Assert.Equal(2, thread.Comments.Count); Assert.Equal(new[] { "Comment1", "Comment2" }, thread.Comments.Select(x => x.Body).ToArray()); Assert.Equal(2, thread.LineNumber); } }
public async Task UpdatesReviewCommentWithNewBody() { var baseContents = @"Line 1 Line 2 Line 3 Line 4"; var editorContents = @"Line 1 Line 2 Line 3 with comment Line 4"; var originalComment = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment", "Original Comment"); var updatedComment = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment", "Updated Comment"); using (var diffService = new FakeDiffService()) { var pullRequest = CreatePullRequest(originalComment); var service = CreateService(diffService); diffService.AddFile(FilePath, baseContents); var target = new PullRequestSession( service, Substitute.For <IAccount>(), pullRequest, Substitute.For <ILocalRepositoryModel>(), "owner", true); var editor = new FakeEditorContentSource(editorContents); var file = await target.GetFile(FilePath, editor); var thread = file.InlineCommentThreads.Single(); Assert.Equal("Original Comment", thread.Comments.Single().Body); Assert.Equal(2, thread.LineNumber); pullRequest = CreatePullRequest(updatedComment); await target.Update(pullRequest); thread = file.InlineCommentThreads.Single(); Assert.Equal("Updated Comment", thread.Comments.Single().Body); Assert.Equal(2, thread.LineNumber); } }
public async Task AddsNewReviewCommentToThreadNonHeadFile() { var baseContents = @"Line 1 Line 2 Line 3 Line 4"; var headContents = @"Line 1 Line 2 Line 3 with comment Line 4"; var comment1 = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment", "Comment1"); var comment2 = CreateComment(@"@@ -1,4 +1,4 @@ Line 1 Line 2 -Line 3 +Line 3 with comment", "Comment2"); using (var diffService = new FakeDiffService()) { var pullRequest = CreatePullRequest(comment1); var service = CreateRealSessionService(diffService); diffService.AddFile(FilePath, baseContents, "MERGE_BASE"); diffService.AddFile(FilePath, headContents, "123"); var target = new PullRequestSession( service, Substitute.For <IAccount>(), pullRequest, Substitute.For <ILocalRepositoryModel>(), "owner", true); var file = await target.GetFile(FilePath, "123"); Assert.That(file.InlineCommentThreads[0].Comments, Has.Count.EqualTo(1)); Assert.That(file.InlineCommentThreads[0].LineNumber, Is.EqualTo(2)); pullRequest = CreatePullRequest(comment1, comment2); await target.Update(pullRequest); Assert.That(file.InlineCommentThreads[0].Comments, Has.Count.EqualTo(2)); Assert.That(file.InlineCommentThreads[0].LineNumber, Is.EqualTo(2)); } }
public async Task UpdatesThePullRequestModel() { var target = new PullRequestSession( CreateRealSessionService(), Substitute.For <IAccount>(), CreatePullRequest(), Substitute.For <ILocalRepositoryModel>(), "owner", true); var newPullRequest = CreatePullRequest(); await target.Update(newPullRequest); // PullRequestModel overrides Equals such that two PRs with the same number are // considered equal. This was causing the PullRequest not to be updated on refresh. // Test that this works correctly! Assert.That(newPullRequest, Is.SameAs(target.PullRequest)); }
public async Task IsTrueWithUpdatedWithPendingReview() { var currentUser = Substitute.For <IAccount>(); var target = new PullRequestSession( CreateRealSessionService(), currentUser, CreatePullRequest(), Substitute.For <ILocalRepositoryModel>(), "owner", true); Assert.That(target.HasPendingReview, Is.False); var pr = CreatePullRequest(); var review = CreatePullRequestReview(currentUser, PullRequestReviewState.Pending); pr.Reviews.Returns(new[] { review }); await target.Update(pr); Assert.That(target.HasPendingReview, Is.True); }