public void Should_Return_Null_Azure_DevOps_Pull_Request_By_Branch() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, "somebranch") { GitClientFactory = new FakeNullGitClientFactory(), Settings = { ThrowExceptionIfPullRequestCouldNotBeFound = false }, }; // When var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // Then pullRequest.ShouldNotBe(null); pullRequest.HasPullRequestLoaded.ShouldBe(false); pullRequest.RepositoryName.ShouldBe("MyRepoName"); pullRequest.CollectionName.ShouldBe("DefaultCollection"); pullRequest.ProjectName.ShouldBe("MyProject"); pullRequest.PullRequestId.ShouldBe(0); pullRequest.PullRequestStatus.ShouldBe(AzureDevOpsPullRequestState.NotSet); pullRequest.CodeReviewId.ShouldBe(0); pullRequest.SourceRefName.ShouldBeEmpty(); pullRequest.TargetRefName.ShouldBeEmpty(); pullRequest.LastSourceCommitId.ShouldBeEmpty(); pullRequest.LastTargetCommitId.ShouldBeEmpty(); }
/// <summary> /// Initializes a new instance of the <see cref="AzureDevOpsPullRequestSystem"/> class. /// Connects to the Azure DevOps server using NTLM authentication. /// </summary> /// <param name="log">The Cake log context.</param> /// <param name="settings">Settings for accessing Azure DevOps Server.</param> public AzureDevOpsPullRequestSystem(ICakeLog log, AzureDevOpsPullRequestSystemSettings settings) : base(log) { settings.NotNull(nameof(settings)); this.settings = settings; if (settings.CheckCommitId) { this.AddCapability(new AzureDevOpsCheckingCommitIdCapability(log, this)); this.Log.Information("Commit ID check capability is enabled."); } else { this.Log.Information("Commit ID check capability is disabled."); } if (settings.ManageDiscussionThreadStatus) { this.AddCapability(new AzureDevOpsDiscussionThreadsCapability(log, this)); this.Log.Information("Discussion thread status management capability is enabled."); } else { this.Log.Information("Discussion thread status management capability is disabled."); } // Filtering by modified files is always required as we otherwise no longer can compare issues // in a subsequent run as we lose information about file and line. // See https://github.com/cake-contrib/Cake.Issues.PullRequests.AzureDevOps/issues/46#issuecomment-419149355 this.AddCapability(new AzureDevOpsFilteringByModifiedFilesCapability(log, this)); this.azureDevOpsPullRequest = new AzureDevOpsPullRequest(log, settings); }
public void Should_Return_Collection_Of_Valid_Iteration_Changes() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 22); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var changes = pullRequest.GetIterationChanges(500); // Then changes.ShouldNotBeNull(); changes.ShouldNotBeEmpty(); changes.Count().ShouldBe(2); changes.First().ShouldNotBeNull(); changes.First().ShouldBeOfType <AzureDevOpsPullRequestIterationChange>(); changes.First().ChangeId.ShouldBe(100); changes.First().ChangeTrackingId.ShouldBe(1); changes.First().ItemPath.ShouldBeOfType <FilePath>(); changes.First().ItemPath.FullPath.ShouldBe("/src/my/class1.cs"); changes.Skip(1).First().ShouldNotBeNull(); changes.Skip(1).First().ShouldBeOfType <AzureDevOpsPullRequestIterationChange>(); changes.Skip(1).First().ChangeId.ShouldBe(200); changes.Skip(1).First().ChangeTrackingId.ShouldBe(2); changes.Skip(1).First().ItemPath.ShouldBeNull(); }
public void Should_Throw_If_Comment_Is_Whitespace() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 100); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.CreateComment(" ")); // Then result.IsArgumentOutOfRangeException("comment"); }
public void Should_Throw_If_Input_Thread_Is_Null() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 100); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.CreateCommentThread(null)); // Then result.IsArgumentNullException("thread"); }
public void Should_Return_Valid_Iteration_Id() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, 12); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When int id = pullRequest.GetLatestIterationId(); // Then id.ShouldBe(42); }
public void Should_Return_Invalid_Id_If_Something_Is_Wrong_With_Iteration() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 13); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When int id = pullRequest.GetLatestIterationId(); // Then id.ShouldBe(-1); }
public void Should_Resolve_Comment_Thread() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, 21); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When pullRequest.ResolveCommentThread(123); // Then // ?? Nothing to validate here since the method returns void }
public void Should_Throw_If_AzureDevOps_Pull_Request_Status_Is_Null() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 16); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.SetStatus(null)); // Then result.IsArgumentNullException("status"); }
public void Should_Set_Approved_Vote_On_AzureDevOps_Pull_Request() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 23); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When pullRequest.Vote(AzureDevOpsPullRequestVote.Approved); // Then // ?? Nothing to validate here since the method returns void }
public void Should_Throw_If_Comment_Is_Null_Or_Empty_Or_Whitespace(string comment, Type expectedExceptionType) { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 100); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.CreateComment(comment)) as ArgumentException; // Then result.ShouldNotBeNull(); result.IsArgumentException(expectedExceptionType, "comment"); }
public void Should_Throw_If_Vote_Value_Is_Invalid_On_AzureDevOps_Pull_Request() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 23); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.Vote((AzureDevOpsPullRequestVote)3)); // Then result.ShouldNotBe(null); result.IsExpected("Vote"); result.Message.ShouldBe("Something went wrong"); }
public void Should_Create_Valid_Comment_Thread() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, 200); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When pullRequest.CreateCommentThread(new AzureDevOpsPullRequestCommentThread { Id = 300, Status = AzureDevOpsCommentThreadStatus.Pending, FilePath = "/index.html" }); // Then // ?? Nothing to validate here since the method returns void }
public void Should_Not_Throw_If_Null_Is_Returned() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, 21) { GitClientFactory = new FakeNullForMethodsGitClientFactory(), }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var changes = pullRequest.GetIterationChanges(42); // Then changes.ShouldBeNull(); }
public void Should_Throw_If_Null_Is_Returned() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 11) { GitClientFactory = new FakeNullForMethodsGitClientFactory(), }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.GetLatestIterationId()); // Then result.IsAzureDevOpsException(); }
public void Should_Return_Null_If_Null_Is_Returned_From_Git_Client() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 100) { GitClientFactory = new FakeNullForMethodsGitClientFactory(), }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var thread = pullRequest.CreateComment("Foo"); // Then thread.ShouldBeNull(); }
public void Should_Not_Throw_If_Null_Is_Returned() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 100) { GitClientFactory = new FakeNullForMethodsGitClientFactory(), }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When pullRequest.CreateCommentThread(new AzureDevOpsPullRequestCommentThread()); // Then // ?? Nothing to validate here since the method returns void }
public void Should_Not_Fail_If_Empty_List_Is_Returned() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 33) { GitClientFactory = new FakeNullForMethodsGitClientFactory(), }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var threads = pullRequest.GetCommentThreads(); // Then threads.ShouldNotBeNull(); threads.ShouldBeEmpty(); }
public void Should_Set_Valid_Status_On_AzureDevOps_Pull_Request() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 16); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); var status = new AzureDevOpsPullRequestStatus("Hello") { State = AzureDevOpsPullRequestStatusState.Succeeded }; // When pullRequest.SetStatus(status); // Then // ?? Nothing to validate here since the method returns void }
public static AzureDevOpsPullRequest AzureDevOpsPullRequest( this ICakeContext context, AzureDevOpsPullRequestSettings settings) { context.NotNull(nameof(context)); settings.NotNull(nameof(settings)); var pullRequest = new AzureDevOpsPullRequest(context.Log, settings, new GitClientFactory()); if (pullRequest.HasPullRequestLoaded) { return(pullRequest); } return(null); }
public void Should_Return_Valid_Comment_Threads() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, 44); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var threads = pullRequest.GetCommentThreads(); // Then threads.ShouldNotBeNull(); threads.ShouldNotBeEmpty(); threads.Count().ShouldBe(2); AzureDevOpsPullRequestCommentThread thread1 = threads.First(); thread1.Id.ShouldBe(11); thread1.Status.ShouldBe(AzureDevOpsCommentThreadStatus.Active); thread1.FilePath.ShouldNotBeNull(); thread1.FilePath.FullPath.ShouldBe("some/path/to/file.cs"); thread1.Comments.ShouldNotBeNull(); thread1.Comments.ShouldNotBeEmpty(); thread1.Comments.Count().ShouldBe(2); AzureDevOpsComment comment11 = thread1.Comments.First(); comment11.ShouldNotBeNull(); comment11.Content.ShouldBe("Hello"); comment11.IsDeleted.ShouldBe(false); comment11.CommentType.ShouldBe(AzureDevOpsCommentType.CodeChange); AzureDevOpsComment comment12 = thread1.Comments.Last(); comment12.ShouldNotBeNull(); comment12.Content.ShouldBe("Goodbye"); comment12.IsDeleted.ShouldBe(true); comment12.CommentType.ShouldBe(AzureDevOpsCommentType.Text); AzureDevOpsPullRequestCommentThread thread2 = threads.Last(); thread2.Id.ShouldBe(22); thread2.Status.ShouldBe(AzureDevOpsCommentThreadStatus.Fixed); thread2.FilePath.ShouldBeNull(); thread2.Comments.ShouldNotBeNull(); thread2.Comments.ShouldBeEmpty(); }
public void Should_Return_Empty_Collection_If_No_Changes_Found() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 42) { GitClientFactory = new FakeNullForMethodsGitClientFactory() }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var files = pullRequest.GetModifiedFiles(); // Then files.ShouldBeOfType <List <FilePath> >(); files.ShouldNotBeNull(); files.ShouldBeEmpty(); }
public void Should_Create_Valid_Comment_Thread() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsUrl, 200); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); var inThread = new AzureDevOpsPullRequestCommentThread { Id = 300, Status = AzureDevOpsCommentThreadStatus.Pending, FilePath = "/index.html" }; // When var outThread = pullRequest.CreateCommentThread(inThread); // Then outThread.Id.ShouldBe(inThread.Id); outThread.Status.ShouldBe(inThread.Status); outThread.FilePath.ShouldBeEquivalentTo(inThread.FilePath); }
public void Should_Throw_If_Null_Is_Returned_On_AzureDevOps_Pull_Request() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 23) { GitClientFactory = new FakeNullForMethodsGitClientFactory(), }; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var result = Record.Exception(() => pullRequest.Vote(AzureDevOpsPullRequestVote.WaitingForAuthor)); // Then result.ShouldNotBe(null); result.IsExpected("Vote"); result.IsAzureDevOpsPullRequestNotFoundException(); }
public void Should_Return_Null_If_Pull_Request_Is_Invalid() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 100) { GitClientFactory = new FakeNullGitClientFactory(), }; fixture.Settings.ThrowExceptionIfPullRequestCouldNotBeFound = false; var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var outThread = pullRequest.CreateCommentThread(new AzureDevOpsPullRequestCommentThread()); // Then outThread.ShouldBeNull(); }
public void Should_Throw_If_Target_Branch_Not_Found() { // Given var fixture = new CreatePullRequestFixture( BasePullRequestFixture.ValidAzureDevOpsServerUrl, "testBranch", "NotExistingBranch", "test", "test"); // When var result = Record.Exception(() => AzureDevOpsPullRequest.Create(fixture.Log, fixture.GitClientFactory, fixture.Settings)); // Then result.IsAzureDevOpsBranchNotFoundException($"Branch not found \"NotExistingBranch\""); }
public void Should_Throw_If_AzureDevOps_Pull_Request_State_Is_Invalid() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 16); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); var status = new AzureDevOpsPullRequestStatus("whatever") { State = (AzureDevOpsPullRequestStatusState)123 }; // When var result = Record.Exception(() => pullRequest.SetStatus(status)); // Then result.ShouldNotBe(null); result.IsExpected("SetStatus"); result.Message.ShouldBe("Unknown value"); }
public void Should_Throw_If_Log_Is_Null() { // Given var fixture = new CreatePullRequestFixture( BasePullRequestFixture.ValidAzureDevOpsServerUrl, "testBranch", "NotExistingBranch", "test", "test"); ICakeLog log = null; // When var result = Record.Exception(() => AzureDevOpsPullRequest.Create(log, fixture.GitClientFactory, fixture.Settings)); // Then result.IsArgumentNullException("log"); }
public void Should_Throw_If_Settings_Are_Null() { // Given var fixture = new CreatePullRequestFixture( BasePullRequestFixture.ValidAzureDevOpsServerUrl, "testBranch", "NotExistingBranch", "test", "test"); AzureDevOpsCreatePullRequestSettings settings = null; // When var result = Record.Exception(() => AzureDevOpsPullRequest.Create(fixture.Log, fixture.GitClientFactory, settings)); // Then result.IsArgumentNullException("settings"); }
public void Should_Return_Valid_Collection_Of_Modified_Files() { // Given var fixture = new PullRequestFixture(BasePullRequestFixture.ValidAzureDevOpsServerUrl, 42); var pullRequest = new AzureDevOpsPullRequest(fixture.Log, fixture.Settings, fixture.GitClientFactory); // When var files = pullRequest.GetModifiedFiles(); // Then files.ShouldNotBeNull(); files.ShouldNotBeEmpty(); files.ShouldHaveSingleItem(); var filePath = files.First(); filePath.ShouldBeOfType <FilePath>(); filePath.ShouldNotBeNull(); filePath.FullPath.ShouldNotBeEmpty(); filePath.FullPath.ShouldBe("src/project/myclass.cs"); }