From 1b609b230b1c802df2ba7304a26ac3b18fcc7558 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 13 May 2026 22:03:25 +0000 Subject: [PATCH] Add Task_Completes_After_Multiple_Rounds E2E test Agent-Logs-Url: https://github.com/microsoft/agent-framework/sessions/6e8bca46-448d-4f21-a7e9-240179571970 Co-authored-by: lokitoth <6936551+lokitoth@users.noreply.github.com> --- .../MagenticOrchestrationTests.cs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/dotnet/tests/Microsoft.Agents.AI.Workflows.UnitTests/MagenticOrchestrationTests.cs b/dotnet/tests/Microsoft.Agents.AI.Workflows.UnitTests/MagenticOrchestrationTests.cs index 89425e6d5d..2aa459deac 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Workflows.UnitTests/MagenticOrchestrationTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Workflows.UnitTests/MagenticOrchestrationTests.cs @@ -311,6 +311,55 @@ public class MagenticOrchestrationTests runResult.Result![0].Text.Should().Contain("Task completed after fallback"); } + [Fact] + public async Task Task_Completes_After_Multiple_Rounds() + { + // Arrange: Round 1 delegates to Worker (not satisfied), round 2 completes + // Manager turn sequence: facts1, plan1, ledger1(not satisfied), facts2, plan2, ledger2(satisfied), finalAnswer + List factsResponse1 = CreatePlanResponse("Initial facts"); + List planResponse1 = CreatePlanResponse("Step 1: Delegate to worker"); + List round1Ledger = CreateProgressLedgerResponse( + isRequestSatisfied: false, + isInLoop: false, + isProgressBeingMade: true, + nextSpeaker: "Worker", + instructionOrQuestion: "Please work on the task"); + + List factsResponse2 = CreatePlanResponse("Updated facts after worker input"); + List planResponse2 = CreatePlanResponse("Updated plan after worker input"); + List round2Ledger = CreateProgressLedgerResponse( + isRequestSatisfied: true, + isInLoop: false, + isProgressBeingMade: true, + nextSpeaker: "Worker", + instructionOrQuestion: "Task is done"); + List finalAnswerResponse = CreateFinalAnswerResponse("Multi-round task completed!"); + + TestReplayAgent manager = new( + [factsResponse1, planResponse1, round1Ledger, + factsResponse2, planResponse2, round2Ledger, finalAnswerResponse], + name: "Manager"); + TestEchoAgent worker = new(name: "Worker"); + + List collectedEvents = []; + + Workflow workflow = new MagenticWorkflowBuilder(manager) + .AddParticipants(worker) + .RequirePlanSignoff(false) + .Build(); + + // Act + WorkflowRunResult runResult = await RunMagenticWorkflowAsync( + workflow, + [new ChatMessage(ChatRole.User, "Complex multi-round task")], + eventCollector: collectedEvents); + + // Assert: Two plan created/replanned events (one per TakeTurn), two progress ledger events, final answer + collectedEvents.OfType().Should().HaveCount(2); + runResult.Result.Should().NotBeNull(); + runResult.Result![0].Text.Should().Contain("Multi-round task completed!"); + } + #region Helper Methods private sealed record WorkflowRunResult(