feat(ui): pick up a task's session in a terminal
This commit is contained in:
@@ -100,6 +100,7 @@ public abstract class StubWorkerClient : IWorkerClient
|
||||
public virtual Task AbortConflictMergeAsync(string taskId) => Task.CompletedTask;
|
||||
public virtual Task StartPlanningSessionAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
|
||||
public virtual Task OpenInteractiveTerminalAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
|
||||
public virtual Task ResumeTaskInTerminalAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
|
||||
public virtual Task ResumePlanningSessionAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
|
||||
public virtual Task<DiscardPlanningOutcome> DiscardPlanningSessionAsync(string taskId, bool dequeueQueuedChildren = false, CancellationToken ct = default)
|
||||
=> Task.FromResult(new DiscardPlanningOutcome(DiscardPlanningResult.Discarded, 0, 0));
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user