Merge claudedo/c4930a56575e45b2ae9be47b1c49eb39
This commit is contained in:
@@ -498,4 +498,42 @@ public sealed class TaskStateServiceTests : IDisposable
|
||||
Assert.Equal(TaskStatus.Queued, t2.Status);
|
||||
Assert.Equal(c1, t2.BlockedByTaskId);
|
||||
}
|
||||
|
||||
// ─── TryAdvanceParentAsync ────────────────────────────────────────────
|
||||
|
||||
[Fact]
|
||||
public async Task TryAdvanceParentAsync_ZeroChildren_AdvancesToWaitingForReview()
|
||||
{
|
||||
// Mirrors deleting the last remaining child: no terminal transition fires for it,
|
||||
// so the caller invokes TryAdvanceParentAsync directly with zero children left.
|
||||
var parent = await SeedTaskAsync(TaskStatus.WaitingForChildren, phase: PlanningPhase.Finalized);
|
||||
|
||||
await _sut.TryAdvanceParentAsync(parent);
|
||||
|
||||
Assert.Equal(TaskStatus.WaitingForReview, await GetStatusAsync(parent));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TryAdvanceParentAsync_AllChildrenTerminal_AdvancesToWaitingForReview()
|
||||
{
|
||||
var parent = await SeedTaskAsync(TaskStatus.WaitingForChildren, phase: PlanningPhase.Finalized);
|
||||
await SeedTaskAsync(TaskStatus.Done, parentId: parent);
|
||||
await SeedTaskAsync(TaskStatus.Done, parentId: parent);
|
||||
|
||||
await _sut.TryAdvanceParentAsync(parent);
|
||||
|
||||
Assert.Equal(TaskStatus.WaitingForReview, await GetStatusAsync(parent));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TryAdvanceParentAsync_SomeChildrenStillRunning_DoesNotAdvance()
|
||||
{
|
||||
var parent = await SeedTaskAsync(TaskStatus.WaitingForChildren, phase: PlanningPhase.Finalized);
|
||||
await SeedTaskAsync(TaskStatus.Done, parentId: parent);
|
||||
await SeedTaskAsync(TaskStatus.Running, parentId: parent);
|
||||
|
||||
await _sut.TryAdvanceParentAsync(parent);
|
||||
|
||||
Assert.Equal(TaskStatus.WaitingForChildren, await GetStatusAsync(parent));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user