feat(ui): pick up a task's session in a terminal

This commit is contained in:
Mika Kuns
2026-07-23 16:47:13 +02:00
committed by mika kuns
parent 140ae2fda1
commit eb88dc130c
12 changed files with 97 additions and 8 deletions
@@ -70,6 +70,9 @@ sealed class FakeWorkerClient : IWorkerClient
public Task WakeQueueAsync() { WakeQueueCalls++; return Task.CompletedTask; }
public Task StartPlanningSessionAsync(string taskId, CancellationToken ct = default) { StartPlanningCalls++; return Task.CompletedTask; }
public Task OpenInteractiveTerminalAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
public int PickUpInTerminalCalls { get; private set; }
public string? LastPickUpTaskId { get; private set; }
public Task ResumeTaskInTerminalAsync(string taskId, CancellationToken ct = default) { PickUpInTerminalCalls++; LastPickUpTaskId = taskId; return Task.CompletedTask; }
public Task QueuePlanningSubtasksAsync(string parentTaskId, CancellationToken ct = default) => Task.CompletedTask;
public Task ResumePlanningSessionAsync(string taskId, CancellationToken ct = default) { ResumePlanningCalls++; return Task.CompletedTask; }
public Task<DiscardPlanningOutcome> DiscardPlanningSessionAsync(string taskId, bool dequeueQueuedChildren = false, CancellationToken ct = default)
@@ -177,6 +180,28 @@ public class TasksIslandViewModelPlanningTests
PlanningPhase phase = PlanningPhase.None)
=> new TaskRowViewModel { Id = id, Status = status, ParentTaskId = parentId, PlanningPhase = phase };
[Fact]
public async Task PickUpInTerminal_InvokesWorkerWithTaskId()
{
var row = MakeRow("t1", TaskStatus.WaitingForReview);
var (vm, worker) = VmFactory.Create([row]);
await vm.PickUpInTerminalCommand.ExecuteAsync(row);
Assert.Equal(1, worker.PickUpInTerminalCalls);
Assert.Equal("t1", worker.LastPickUpTaskId);
}
[Fact]
public void CanPickUpInTerminal_OnlyForReviewOrFailed()
{
Assert.True(MakeRow("a", TaskStatus.WaitingForReview).CanPickUpInTerminal);
Assert.True(MakeRow("b", TaskStatus.Failed).CanPickUpInTerminal);
Assert.False(MakeRow("c", TaskStatus.Idle).CanPickUpInTerminal);
Assert.False(MakeRow("d", TaskStatus.Running).CanPickUpInTerminal);
Assert.False(MakeRow("e", TaskStatus.Done).CanPickUpInTerminal);
}
[Fact]
public void PlanningParentWithChildren_CollapsedByDefault_ToggleExpands()
{