diff --git a/src/Dapr.Workflow/WorkflowState.cs b/src/Dapr.Workflow/WorkflowState.cs index 15dcce08c..3082cd8a6 100644 --- a/src/Dapr.Workflow/WorkflowState.cs +++ b/src/Dapr.Workflow/WorkflowState.cs @@ -31,7 +31,7 @@ internal WorkflowState(WorkflowMetadata? metadata) { _metadata = metadata; } - + /// /// Gets a value indicating whether the requested workflow instance exists. /// @@ -53,12 +53,16 @@ WorkflowRuntimeStatus.Failed or /// /// Gets the time at which this workflow instance was created. /// - public DateTimeOffset CreatedAt => _metadata?.CreatedAt ?? default; + public DateTimeOffset CreatedAt => _metadata?.CreatedAt is { } dt && dt != default + ? new DateTimeOffset(DateTime.SpecifyKind(dt, DateTimeKind.Utc)) + : default; /// /// Gets the time at which this workflow instance last had its state updated. /// - public DateTimeOffset LastUpdatedAt => _metadata?.LastUpdatedAt ?? default; + public DateTimeOffset LastUpdatedAt => _metadata?.LastUpdatedAt is { } dt && dt != default + ? new DateTimeOffset(DateTime.SpecifyKind(dt, DateTimeKind.Utc)) + : default; /// /// Gets the execution status of the workflow. diff --git a/test/Dapr.Workflow.Test/WorkflowStateTests.cs b/test/Dapr.Workflow.Test/WorkflowStateTests.cs index 5fc99930c..9f94cef14 100644 --- a/test/Dapr.Workflow.Test/WorkflowStateTests.cs +++ b/test/Dapr.Workflow.Test/WorkflowStateTests.cs @@ -56,11 +56,29 @@ public void Properties_ShouldReflectMetadata_WhenPresent() Assert.True(state.Exists); Assert.True(state.IsWorkflowRunning); Assert.False(state.IsWorkflowCompleted); - Assert.Equal(created, state.CreatedAt); - Assert.Equal(updated, state.LastUpdatedAt); + Assert.Equal(created, state.CreatedAt.DateTime); + Assert.Equal(updated, state.LastUpdatedAt.DateTime); Assert.Equal(WorkflowRuntimeStatus.Running, state.RuntimeStatus); } + [Fact] + public void CreatedAt_ShouldReturnDefault_WhenMetadataCreatedAtIsMinValue() + { + var serializer = new JsonWorkflowSerializer(); + var metadata = new WorkflowMetadata( + InstanceId: "i", + Name: "wf", + RuntimeStatus: WorkflowRuntimeStatus.Running, + CreatedAt: DateTime.MinValue, + LastUpdatedAt: DateTime.MinValue, + Serializer: serializer); + + var state = new WorkflowState(metadata); + + Assert.Equal(DateTime.MinValue, state.CreatedAt.DateTime); + Assert.Equal(DateTime.MinValue, state.LastUpdatedAt.DateTime); + } + [Theory] [InlineData(WorkflowRuntimeStatus.Completed)] [InlineData(WorkflowRuntimeStatus.Failed)]