From c98a29c086969773c34cd020fab609e1031ae677 Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Tue, 14 Apr 2026 14:10:44 +0200 Subject: [PATCH] test(worker): add integration test for auto-retry flow Co-Authored-By: Claude Sonnet 4.6 --- .../Services/QueueServiceTests.cs | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/ClaudeDo.Worker.Tests/Services/QueueServiceTests.cs b/tests/ClaudeDo.Worker.Tests/Services/QueueServiceTests.cs index fdd5abb..3d3d5c5 100644 --- a/tests/ClaudeDo.Worker.Tests/Services/QueueServiceTests.cs +++ b/tests/ClaudeDo.Worker.Tests/Services/QueueServiceTests.cs @@ -213,6 +213,48 @@ public sealed class QueueServiceTests : IDisposable Assert.True(cancelled); } + [Fact] + public async Task RunNow_AutoRetries_On_Failure_With_SessionId() + { + var (listId, agentTagId) = await SeedListWithAgentTag(); + var task = await SeedQueuedTask(listId); + + var callCount = 0; + var (service, fake) = CreateService((prompt, dir, args, onLine, ct) => + { + callCount++; + if (callCount == 1) + { + return Task.FromResult(new RunResult + { + ExitCode = 1, + ErrorMarkdown = "something broke", + SessionId = "sess-retry-test", + }); + } + return Task.FromResult(new RunResult + { + ExitCode = 0, + ResultMarkdown = "fixed it", + SessionId = "sess-retry-test", + }); + }); + + await service.StartAsync(CancellationToken.None); + await service.RunNow(task.Id); + + // Wait for both runs to complete. + await Task.Delay(2000); + + await service.StopAsync(CancellationToken.None); + + Assert.Equal(2, callCount); + + var finalTask = await _taskRepo.GetByIdAsync(task.Id); + Assert.NotNull(finalTask); + Assert.Equal(TaskStatus.Done, finalTask.Status); + } + [Fact] public async Task GetActive_Returns_Running_Slots() {