Merge claudedo/973ea49ec0a642ea9b1ddcff9b71b6fe
This commit is contained in:
@@ -161,4 +161,69 @@ public class DetailsIslandReviewActionsTests : IDisposable
|
||||
|
||||
Assert.Equal(worker.ExceptionMessage, reportedError);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CancelReview_IsDisabled_WhileUnitMergeIsDraining()
|
||||
{
|
||||
var worker = new RecordingWorkerClient();
|
||||
var vm = BuildVm(worker);
|
||||
vm.Bind(new TaskRowViewModel { Id = "task-drain-1", Status = TaskStatus.WaitingForReview });
|
||||
|
||||
Assert.True(vm.CancelReviewCommand.CanExecute(null));
|
||||
|
||||
worker.RaisePlanningMergeStarted("task-drain-1", "main");
|
||||
Assert.False(vm.CancelReviewCommand.CanExecute(null));
|
||||
|
||||
worker.RaisePlanningCompleted("task-drain-1");
|
||||
Assert.True(vm.CancelReviewCommand.CanExecute(null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CancelReview_ReDisables_UntilMergeAborted()
|
||||
{
|
||||
var worker = new RecordingWorkerClient();
|
||||
var vm = BuildVm(worker);
|
||||
vm.Bind(new TaskRowViewModel { Id = "task-drain-2", Status = TaskStatus.WaitingForReview });
|
||||
|
||||
worker.RaisePlanningMergeStarted("task-drain-2", "main");
|
||||
Assert.False(vm.CancelReviewCommand.CanExecute(null));
|
||||
|
||||
worker.RaisePlanningMergeAborted("task-drain-2");
|
||||
Assert.True(vm.CancelReviewCommand.CanExecute(null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CancelReview_UnaffectedByMergeEvents_ForADifferentTask()
|
||||
{
|
||||
var worker = new RecordingWorkerClient();
|
||||
var vm = BuildVm(worker);
|
||||
vm.Bind(new TaskRowViewModel { Id = "task-drain-3", Status = TaskStatus.WaitingForReview });
|
||||
|
||||
worker.RaisePlanningMergeStarted("some-other-parent", "main");
|
||||
|
||||
Assert.True(vm.CancelReviewCommand.CanExecute(null));
|
||||
}
|
||||
|
||||
private sealed class ThrowingCancelWorkerClient : StubWorkerClient
|
||||
{
|
||||
public override bool IsConnected => true;
|
||||
public string ExceptionMessage { get; init; } =
|
||||
"A merge is in progress for this task; wait for it to finish before cancelling.";
|
||||
public override Task CancelReviewAsync(string taskId) => throw new Exception(ExceptionMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CancelReview_WhenWorkerThrows_RaisesErrorReported()
|
||||
{
|
||||
var worker = new ThrowingCancelWorkerClient();
|
||||
var vm = BuildVm(worker);
|
||||
vm.Bind(new TaskRowViewModel { Id = "task-cancel-err-1", Status = TaskStatus.WaitingForReview });
|
||||
|
||||
string? reportedError = null;
|
||||
vm.ErrorReported += msg => reportedError = msg;
|
||||
|
||||
await vm.CancelReviewCommand.ExecuteAsync(null);
|
||||
|
||||
Assert.Equal(worker.ExceptionMessage, reportedError);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user