Merge claudedo/72b309e176cb4a96945159fd8dd6ce92

This commit is contained in:
mika kuns
2026-08-06 14:39:34 +02:00
3 changed files with 59 additions and 3 deletions
@@ -57,12 +57,16 @@ public class DetailsIslandDeleteTaskTests : IDisposable
private sealed class RecordingWorkerClient : StubWorkerClient
{
public override bool IsConnected => true;
public override bool IsConnected { get; } = true;
public (bool Ok, string? Error) Result { get; set; } = (true, null);
public string? DeletedTaskId { get; private set; }
public Exception? ThrowOnDelete { get; set; }
public RecordingWorkerClient(bool isConnected = true) => IsConnected = isConnected;
public override Task<(bool Ok, string? Error)> DeleteTaskAsync(string taskId)
{
if (ThrowOnDelete != null) throw ThrowOnDelete;
DeletedTaskId = taskId;
return Task.FromResult(Result);
}
@@ -114,4 +118,35 @@ public class DetailsIslandDeleteTaskTests : IDisposable
Assert.False(deleteFromListCalled);
Assert.False(closed);
}
[Fact]
public void DeleteTask_WhenWorkerOffline_CommandIsDisabled()
{
var worker = new RecordingWorkerClient(isConnected: false);
var vm = BuildVm(worker);
vm.Bind(new TaskRowViewModel { Id = "task-del-3", Status = TaskStatus.Idle });
Assert.False(vm.DeleteTaskCommand.CanExecute(null));
}
[Fact]
public async Task DeleteTask_WhenWorkerThrowsInvalidOperationException_SurfacesErrorAndKeepsDetailOpen()
{
var worker = new RecordingWorkerClient { ThrowOnDelete = new InvalidOperationException("Connection is not active.") };
var vm = BuildVm(worker);
vm.Bind(new TaskRowViewModel { Id = "task-del-4", Status = TaskStatus.Idle });
var deleteFromListCalled = false;
vm.DeleteFromList = _ => { deleteFromListCalled = true; return Task.CompletedTask; };
var closed = false;
vm.CloseDetail = () => closed = true;
string? reportedError = null;
vm.ShowErrorAsync = msg => { reportedError = msg; return Task.CompletedTask; };
await vm.DeleteTaskCommand.ExecuteAsync(null);
Assert.Equal("Connection is not active.", reportedError);
Assert.False(deleteFromListCalled);
Assert.False(closed);
}
}