fix(worker): block approve of a planning parent with an unfinished child, surface git stderr on ff failure
This commit is contained in:
@@ -214,6 +214,7 @@ public sealed class UnitBranchTests : IDisposable
|
||||
Assert.Equal(TaskStatus.Failed, child.Status);
|
||||
Assert.Equal(movedHead, GitRepoFixture.RunGit(_repo.RepoDir, "rev-parse", unit.BranchName).Trim());
|
||||
Assert.Contains("fast-forward", child.Result);
|
||||
Assert.Contains("Not possible to fast-forward", child.Result); // git's own stderr is surfaced
|
||||
Assert.Equal(WorktreeState.Active, (await WorktreeOf(Child1))!.State);
|
||||
}
|
||||
|
||||
@@ -233,6 +234,23 @@ public sealed class UnitBranchTests : IDisposable
|
||||
Assert.Equal(WorktreeState.Merged, (await WorktreeOf(Parent))!.State);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Approving_a_planning_parent_with_an_unfinished_child_is_blocked()
|
||||
{
|
||||
await _unit.EnsureUnitWorktreeAsync(Parent, default);
|
||||
await RunChild(Child1, Writes());
|
||||
await SetStatus(Child2, TaskStatus.Failed);
|
||||
await SetStatus(Parent, TaskStatus.WaitingForReview);
|
||||
|
||||
var result = await MergeService().ApproveAndMergeAsync(Parent, "main", default);
|
||||
|
||||
Assert.Equal(TaskMergeService.StatusBlocked, result.Status);
|
||||
Assert.Equal($"subtask {Child2} is not Done (status Failed)", result.ErrorMessage);
|
||||
Assert.Equal(TaskStatus.WaitingForReview, (await TaskOf(Parent)).Status);
|
||||
Assert.Equal(WorktreeState.Active, (await WorktreeOf(Parent))!.State);
|
||||
Assert.Equal(_repo.BaseCommit, GitRepoFixture.RunGit(_repo.RepoDir, "rev-parse", "main").Trim());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Approving_an_interactive_child_absorbs_it_instead_of_merging_to_main()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user