Merge branch 'claudedo/0a185f8e823d42fc9a5b97c5eb91c616'
This commit is contained in:
@@ -106,7 +106,7 @@ public sealed class ExternalMcpToolSchemaTests
|
||||
"list_runs", "get_run", "get_task_log",
|
||||
"list_agents",
|
||||
"reset_failed_task", "submit_task_for_review",
|
||||
"handoff_list_handler",
|
||||
"handoff_list_handler", "get_handoff_status",
|
||||
"get_app_settings",
|
||||
"wait_for_task_change",
|
||||
"get_queue_state",
|
||||
|
||||
@@ -277,4 +277,64 @@ public sealed class HandoffMcpToolsTests : IDisposable
|
||||
Assert.False(resultB.Coerced);
|
||||
Assert.Equal("wait", resultB.NextPhase);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetHandoffStatus_NeverHandedOff_ReportsZeroRoundFullBudget()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
var handlerTask = await SeedTaskAsync(listId);
|
||||
|
||||
var sut = BuildSut();
|
||||
var status = await sut.GetHandoffStatus(handlerTask.Id, CancellationToken.None);
|
||||
|
||||
Assert.Equal(handlerTask.Id, status.TaskId);
|
||||
Assert.Equal(handlerTask.Number, status.Number);
|
||||
Assert.Equal(0, status.Round);
|
||||
Assert.Equal(HandoffRoundTracker.MaxHandoffs, status.Remaining);
|
||||
Assert.False(status.Final);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetHandoffStatus_AfterHandoffs_ReflectsTrackerState()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
var handlerTask = await SeedTaskAsync(listId);
|
||||
var survivor = await SeedTaskAsync(listId, TaskStatus.WaitingForReview, title: "Survivor");
|
||||
var tracker = new HandoffRoundTracker();
|
||||
var survivors = new[] { survivor.Id };
|
||||
|
||||
await BuildSut(tracker).HandoffListHandler(handlerTask.Id, survivors, "wait", CancellationToken.None);
|
||||
await BuildSut(tracker).HandoffListHandler(handlerTask.Id, survivors, "merge", CancellationToken.None);
|
||||
|
||||
var status = await BuildSut(tracker).GetHandoffStatus(handlerTask.Id, CancellationToken.None);
|
||||
|
||||
Assert.Equal(2, status.Round);
|
||||
Assert.Equal(HandoffRoundTracker.MaxHandoffs - 2, status.Remaining);
|
||||
Assert.False(status.Final);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetHandoffStatus_AfterMergeFinal_ReportsFinal()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
var handlerTask = await SeedTaskAsync(listId);
|
||||
var survivor = await SeedTaskAsync(listId, TaskStatus.WaitingForReview, title: "Survivor");
|
||||
var tracker = new HandoffRoundTracker();
|
||||
var survivors = new[] { survivor.Id };
|
||||
|
||||
await BuildSut(tracker).HandoffListHandler(handlerTask.Id, survivors, "merge_final", CancellationToken.None);
|
||||
|
||||
var status = await BuildSut(tracker).GetHandoffStatus(handlerTask.Id, CancellationToken.None);
|
||||
|
||||
Assert.True(status.Final);
|
||||
Assert.Equal(1, status.Round);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetHandoffStatus_UnknownTask_Throws()
|
||||
{
|
||||
var sut = BuildSut();
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(() =>
|
||||
sut.GetHandoffStatus("missing", CancellationToken.None));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user