From cd305839c4bd9a66a915212365ea15ec5d6c7ba5 Mon Sep 17 00:00:00 2001 From: Matthias Eck Date: Tue, 26 May 2026 12:20:58 +0200 Subject: [PATCH] fix(workflow): add missing FailureDetails property to proto converter Signed-off-by: Matthias Eck --- src/Dapr.Workflow/Client/ProtoConverters.cs | 11 +++++++- .../Client/ProtoConvertersTests.cs | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Dapr.Workflow/Client/ProtoConverters.cs b/src/Dapr.Workflow/Client/ProtoConverters.cs index 7941828c4..f97236576 100644 --- a/src/Dapr.Workflow/Client/ProtoConverters.cs +++ b/src/Dapr.Workflow/Client/ProtoConverters.cs @@ -32,7 +32,8 @@ public static WorkflowMetadata ToWorkflowMetadata(Dapr.DurableTask.Protobuf.Work { SerializedInput = string.IsNullOrEmpty(state.Input) ? null : state.Input, SerializedOutput = string.IsNullOrEmpty(state.Output) ? null : state.Output, - SerializedCustomStatus = string.IsNullOrEmpty(state.CustomStatus) ? null : state.CustomStatus + SerializedCustomStatus = string.IsNullOrEmpty(state.CustomStatus) ? null : state.CustomStatus, + FailureDetails = ToWorkflowTaskFailureDetails(state.FailureDetails), }; /// @@ -91,4 +92,12 @@ public static WorkflowHistoryEventType ToHistoryEventType(HistoryEvent.EventType HistoryEvent.EventTypeOneofCase.DetachedWorkflowInstanceCreated => WorkflowHistoryEventType.SubOrchestrationInstanceCreated, _ => WorkflowHistoryEventType.Unknown }; + + private static Workflow.WorkflowTaskFailureDetails? ToWorkflowTaskFailureDetails(TaskFailureDetails? failureDetails) + => failureDetails is null + ? null + : new Workflow.WorkflowTaskFailureDetails( + failureDetails.ErrorType, + failureDetails.ErrorMessage, + string.IsNullOrEmpty(failureDetails.StackTrace) ? null : failureDetails.StackTrace); } diff --git a/test/Dapr.Workflow.Test/Client/ProtoConvertersTests.cs b/test/Dapr.Workflow.Test/Client/ProtoConvertersTests.cs index 4460319fb..01b44165f 100644 --- a/test/Dapr.Workflow.Test/Client/ProtoConvertersTests.cs +++ b/test/Dapr.Workflow.Test/Client/ProtoConvertersTests.cs @@ -125,6 +125,32 @@ public void ToWorkflowMetadata_ShouldSetSerializedFieldsToNull_WhenProtoStringsA Assert.Null(metadata.SerializedCustomStatus); } + [Fact] + public void ToWorkflowMetadata_ShouldMapFailureDetails_WhenPresent() + { + var serializer = new JsonDaprSerializer(); + + var state = new Dapr.DurableTask.Protobuf.WorkflowState + { + InstanceId = "i", + Name = "n", + WorkflowStatus = OrchestrationStatus.Failed, + FailureDetails = new TaskFailureDetails + { + ErrorType = "System.InvalidOperationException", + ErrorMessage = "boom", + StackTrace = "trace" + } + }; + + var metadata = ProtoConverters.ToWorkflowMetadata(state, serializer); + + Assert.NotNull(metadata.FailureDetails); + Assert.Equal("System.InvalidOperationException", metadata.FailureDetails!.ErrorType); + Assert.Equal("boom", metadata.FailureDetails.ErrorMessage); + Assert.Equal("trace", metadata.FailureDetails.StackTrace); + } + [Fact] public void ToWorkflowMetadata_ShouldKeepSerializedFields_WhenProtoStringsContainWhitespace() {