fix(ui): drop stale delta refreshes so the newest task state wins

This commit is contained in:
mika kuns
2026-08-07 09:18:52 +02:00
parent cba7d01c31
commit ac099dd1a8
2 changed files with 41 additions and 3 deletions
@@ -122,4 +122,32 @@ public class TasksIslandDeltaResilienceTests : IDisposable
Assert.Equal(TaskStatus.Running, vm.Items.Single(r => r.Id == "T1").Status);
}
[Fact]
public async Task A_stale_delta_result_does_not_overwrite_a_newer_one()
{
await SeedAsync();
var factory = new FlakyDbFactory(NewContext, failuresLeft: 0);
var vm = new TasksIslandViewModel(factory, new FakeWorker());
var list = UserList("L1", "Work");
await LoadAndWaitAsync(vm, list);
// Start refresh #1 while the DB still says Queued, but do not await it yet.
var first = vm.RefreshTaskFromWorkerAsync("T1");
await using (var db = NewContext())
{
var t = await db.Tasks.FirstAsync(x => x.Id == "T1");
t.Status = TaskStatus.Running;
await db.SaveChangesAsync();
}
// Refresh #2 sees Running and must win, regardless of completion order.
var second = vm.RefreshTaskFromWorkerAsync("T1");
await Task.WhenAll(first, second);
Assert.Equal(TaskStatus.Running, vm.Items.Single(r => r.Id == "T1").Status);
}
}