From 6052982b84c9500d8f0571b6ce25d6b37f9bbb78 Mon Sep 17 00:00:00 2001 From: Mitch Lienau Date: Mon, 1 Dec 2025 10:16:07 -0500 Subject: [PATCH] #16 - Preserve PreconditionFailed message when mapping to other type --- .../Results/PreconditionFailedResultTests.cs | 23 +++++++++++++++++++ src/F23.Kernel/Result.cs | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/F23.Kernel.Tests/Results/PreconditionFailedResultTests.cs b/src/F23.Kernel.Tests/Results/PreconditionFailedResultTests.cs index 2af30da..645b6c0 100644 --- a/src/F23.Kernel.Tests/Results/PreconditionFailedResultTests.cs +++ b/src/F23.Kernel.Tests/Results/PreconditionFailedResultTests.cs @@ -15,5 +15,28 @@ public void PreconditionFailedResult_SuccessIsFalse(PreconditionFailedReason rea // Assert Assert.False(result.IsSuccess); + } + + [Theory] + [InlineData(PreconditionFailedReason.NotFound)] + [InlineData(PreconditionFailedReason.ConcurrencyMismatch)] + [InlineData(PreconditionFailedReason.Conflict)] + public void MappingPreconditionFailedResultToOther_PreservesTheReasonAndMessage(PreconditionFailedReason reason) + { + // Arrange + var originalMessage = "Original failure message"; + var originalResult = new PreconditionFailedResult(reason, originalMessage); + + // Act + var mappedResult = originalResult.MapFailure(); + + // Assert + var preconditionFailedResult = Assert.IsType>(mappedResult); + Assert.Equal(reason, preconditionFailedResult.Reason); + Assert.Equal(originalMessage, preconditionFailedResult.Message); } + + private class Original { } + + private class Other { } } diff --git a/src/F23.Kernel/Result.cs b/src/F23.Kernel/Result.cs index dbddb18..90f247d 100644 --- a/src/F23.Kernel/Result.cs +++ b/src/F23.Kernel/Result.cs @@ -151,7 +151,7 @@ public Result MapFailure() => SuccessResult => throw new InvalidOperationException("Cannot map failure on success result"), ValidationFailedResult validationFailed => Result.ValidationFailed(validationFailed.Errors), UnauthorizedResult unauthorized => Result.Unauthorized(unauthorized.Message), - PreconditionFailedResult preconditionFailed => Result.PreconditionFailed(preconditionFailed.Reason), + PreconditionFailedResult preconditionFailed => Result.PreconditionFailed(preconditionFailed.Reason, preconditionFailed.Message), _ => throw new InvalidOperationException("Unknown result type") };