Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ A custom description

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -238,8 +238,8 @@ A custom description

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -291,8 +291,8 @@ A custom description

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -391,8 +391,8 @@ A custom description

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Merged, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Merged, Some.HttpsUri(), false),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -453,8 +453,8 @@ A custom description

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -510,7 +510,7 @@ public async Task WhenAPullRequestTemplateDoesNotExistInTheRepo_TheStackPrListMa

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -612,7 +612,7 @@ public async Task WhenOnlySelectingSomeBranchesToCreatePullRequestsFor_OnlyThose

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
Expand Down Expand Up @@ -671,140 +671,11 @@ A custom description

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
inputProvider.DidNotReceive().Text(Questions.PullRequestStackDescription, Arg.Any<string>());
}

[Fact]
public async Task WhenNoLabelsExistInTheRepo_DoesNotAskForLabels_AndNoLabelsAreAppliedToCreatedPullRequests()
{
// Arrange
var sourceBranch = Some.BranchName();
var branch1 = Some.BranchName();
var branch2 = Some.BranchName();
using var repo = new TestGitRepositoryBuilder()
.WithBranch(sourceBranch, true)
.WithBranch(branch1, true)
.WithBranch(branch2, true)
.Build();

var gitHubClient = new TestGitHubRepositoryBuilder().Build();
var stackConfig = Substitute.For<IStackConfig>();
var inputProvider = Substitute.For<IInputProvider>();
var logger = new TestLogger(testOutputHelper);
var fileOperations = new FileOperations();
var gitClient = new GitClient(logger, repo.GitClientSettings);
var handler = new CreatePullRequestsCommandHandler(inputProvider, logger, gitClient, gitHubClient, fileOperations, stackConfig);

var stack1 = new Config.Stack("Stack1", repo.RemoteUri, sourceBranch, [branch1, branch2]);

var stacks = new List<Config.Stack>(
[
stack1,
new("Stack2", repo.RemoteUri, sourceBranch, [])
]);
stackConfig.Load().Returns(stacks);
stackConfig
.WhenForAnyArgs(s => s.Save(Arg.Any<List<Config.Stack>>()))
.Do(ci => stacks = ci.ArgAt<List<Config.Stack>>(0));

inputProvider.Select(Questions.SelectStack, Arg.Any<string[]>()).Returns("Stack1");
inputProvider
.MultiSelect(Questions.SelectPullRequestsToCreate, Arg.Any<PullRequestCreateAction[]>(), true, Arg.Any<Func<PullRequestCreateAction, string>>())
.Returns([new PullRequestCreateAction(branch1, sourceBranch), new PullRequestCreateAction(branch2, branch1)]);
inputProvider.Confirm(Questions.ConfirmCreatePullRequests).Returns(true);
inputProvider.Text(Questions.PullRequestTitle).Returns("PR Title");
inputProvider.Text(Questions.PullRequestStackDescription, Arg.Any<string>()).Returns("A custom description");

// Act
await handler.Handle(CreatePullRequestsCommandInputs.Empty);

// Assert
var expectedPrBody = $@"{StackConstants.StackMarkerStart}
A custom description

{string.Join(Environment.NewLine, gitHubClient.PullRequests.Values.Select(pr => $"- {pr.Url}"))}
{StackConstants.StackMarkerEnd}";

var expectedLabels = new List<string>(["label1", "label2"]).Select(l => new GitHubLabel(l)).ToArray();

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, [])
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
inputProvider.DidNotReceive().MultiSelect(Questions.PullRequestLabels, Arg.Any<string[]>(), Arg.Any<bool>(), Arg.Any<Func<string, string>>());
}

[Fact]
public async Task WhenLabelsExistInTheRepo_AsksForLabels_AndAppliesToCreatedPullRequests()
{
// Arrange
var sourceBranch = Some.BranchName();
var branch1 = Some.BranchName();
var branch2 = Some.BranchName();
using var repo = new TestGitRepositoryBuilder()
.WithBranch(sourceBranch, true)
.WithBranch(branch1, true)
.WithBranch(branch2, true)
.Build();

var gitHubClient = new TestGitHubRepositoryBuilder()
.WithLabel("label1")
.WithLabel("label2")
.Build();
var stackConfig = Substitute.For<IStackConfig>();
var inputProvider = Substitute.For<IInputProvider>();
var logger = new TestLogger(testOutputHelper);
var fileOperations = new FileOperations();
var gitClient = new GitClient(logger, repo.GitClientSettings);
var handler = new CreatePullRequestsCommandHandler(inputProvider, logger, gitClient, gitHubClient, fileOperations, stackConfig);

var stack1 = new Config.Stack("Stack1", repo.RemoteUri, sourceBranch, [branch1, branch2]);

var stacks = new List<Config.Stack>(
[
stack1,
new("Stack2", repo.RemoteUri, sourceBranch, [])
]);
stackConfig.Load().Returns(stacks);
stackConfig
.WhenForAnyArgs(s => s.Save(Arg.Any<List<Config.Stack>>()))
.Do(ci => stacks = ci.ArgAt<List<Config.Stack>>(0));

inputProvider.Select(Questions.SelectStack, Arg.Any<string[]>()).Returns("Stack1");
inputProvider
.MultiSelect(Questions.SelectPullRequestsToCreate, Arg.Any<PullRequestCreateAction[]>(), true, Arg.Any<Func<PullRequestCreateAction, string>>())
.Returns([new PullRequestCreateAction(branch1, sourceBranch), new PullRequestCreateAction(branch2, branch1)]);
inputProvider.Confirm(Questions.ConfirmCreatePullRequests).Returns(true);
inputProvider.Text(Questions.PullRequestTitle).Returns("PR Title");
inputProvider.Text(Questions.PullRequestStackDescription, Arg.Any<string>()).Returns("A custom description");
inputProvider.MultiSelect(Questions.PullRequestLabels, Arg.Any<string[]>(), Arg.Any<bool>(), Arg.Any<Func<string, string>>()).Returns(new List<string>(["label1", "label2"]).ToArray());

// Act
await handler.Handle(CreatePullRequestsCommandInputs.Empty);

// Assert
var expectedPrBody = $@"{StackConstants.StackMarkerStart}
A custom description

{string.Join(Environment.NewLine, gitHubClient.PullRequests.Values.Select(pr => $"- {pr.Url}"))}
{StackConstants.StackMarkerEnd}";

var expectedLabels = new List<string>(["label1", "label2"]).Select(l => new GitHubLabel(l)).ToArray();

var expectedPullRequests = new Dictionary<string, GitHubPullRequest>
{
[branch1] = new GitHubPullRequest(1, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, expectedLabels),
[branch2] = new GitHubPullRequest(2, "PR Title", expectedPrBody, GitHubPullRequestStates.Open, Some.HttpsUri(), false, expectedLabels)
};

gitHubClient.PullRequests.Should().BeEquivalentTo(expectedPullRequests, ExcludeUnimportantPullRequestProperties);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ public async Task WhenThereAreMultiplePullRequestsInAStack_OpensAllPullRequests(

inputProvider.Select(Questions.SelectStack, Arg.Any<string[]>()).Returns("Stack1");

var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch1)
.Returns(prForBranch1);

var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch2)
.Returns(prForBranch2);
Expand Down Expand Up @@ -95,12 +95,12 @@ public async Task WhenThereAreSomePullRequestsInAStack_OpensAllPullRequests()

inputProvider.Select(Questions.SelectStack, Arg.Any<string[]>()).Returns("Stack1");

var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch1)
.Returns(prForBranch1);

var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Closed, Some.HttpsUri(), false, []);
var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Closed, Some.HttpsUri(), false);

// Act
await handler.Handle(OpenPullRequestsCommandInputs.Empty);
Expand Down Expand Up @@ -138,12 +138,12 @@ public async Task WhenStackNameIsProvided_OpensAllPullRequestsForTheStack()
]);
stackConfig.Load().Returns(stacks);

var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch1)
.Returns(prForBranch1);

var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch2)
.Returns(prForBranch2);
Expand Down Expand Up @@ -183,12 +183,12 @@ public async Task WhenOnlyOneStackExists_DoesNotAskForStackName_OpensAllPullRequ
]);
stackConfig.Load().Returns(stacks);

var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch1 = new GitHubPullRequest(1, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch1)
.Returns(prForBranch1);

var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var prForBranch2 = new GitHubPullRequest(2, "PR Title", string.Empty, GitHubPullRequestStates.Open, Some.HttpsUri(), false);
gitHubClient
.GetPullRequest(branch2)
.Returns(prForBranch2);
Expand Down
14 changes: 7 additions & 7 deletions src/Stack.Tests/Commands/Stack/StackStatusCommandHandlerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public async Task WhenMultipleBranchesExistInAStack_AndOneHasAPullRequests_Retur
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch1)
Expand Down Expand Up @@ -106,7 +106,7 @@ public async Task WhenStackNameIsProvided_DoesNotAskForStack_ReturnsStatus()
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch1)
Expand Down Expand Up @@ -169,7 +169,7 @@ public async Task WhenAllStacksAreRequested_ReturnsStatusOfEachStack()
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch1)
Expand Down Expand Up @@ -239,7 +239,7 @@ public async Task WhenAllStacksAreRequested_WithStacksInMultipleRepositories_Ret
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch1)
Expand Down Expand Up @@ -342,7 +342,7 @@ public async Task WhenMultipleBranchesExistInAStack_AndOneNoLongerExistsOnTheRem
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch2)
Expand Down Expand Up @@ -399,7 +399,7 @@ public async Task WhenMultipleBranchesExistInAStack_AndOneNoLongerExistsOnTheRem
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch2)
Expand Down Expand Up @@ -456,7 +456,7 @@ public async Task WhenOnlyOneStackExists_DoesNotAskForStackName_ReturnsStatus()
.WhenForAnyArgs(o => o.Status(Arg.Any<string>(), Arg.Any<Action>()))
.Do(ci => ci.ArgAt<Action>(1)());

var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false, []);
var pr = new GitHubPullRequest(1, "PR title", "PR body", GitHubPullRequestStates.Open, Some.HttpsUri(), false);

gitHubClient
.GetPullRequest(branch1)
Expand Down
Loading