Skip to content

Commit fe5d51b

Browse files
mlienauMitch Lienau
andauthored
#16 - Preserve PreconditionFailed message when mapping to other type (#17)
- Fixes issue where mapping a PreconditionFailedResult<T> to another type loses the message. - Adds unit test to ensure reason and message are preserved when mapping to other failure type. Fixes #16 Co-authored-by: Mitch Lienau <mitch@feature23.com>
1 parent c1fc66c commit fe5d51b

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

src/F23.Kernel.Tests/Results/PreconditionFailedResultTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,28 @@ public void PreconditionFailedResult_SuccessIsFalse(PreconditionFailedReason rea
1515

1616
// Assert
1717
Assert.False(result.IsSuccess);
18+
}
19+
20+
[Theory]
21+
[InlineData(PreconditionFailedReason.NotFound)]
22+
[InlineData(PreconditionFailedReason.ConcurrencyMismatch)]
23+
[InlineData(PreconditionFailedReason.Conflict)]
24+
public void MappingPreconditionFailedResultToOther_PreservesTheReasonAndMessage(PreconditionFailedReason reason)
25+
{
26+
// Arrange
27+
var originalMessage = "Original failure message";
28+
var originalResult = new PreconditionFailedResult<Original>(reason, originalMessage);
29+
30+
// Act
31+
var mappedResult = originalResult.MapFailure<Other>();
32+
33+
// Assert
34+
var preconditionFailedResult = Assert.IsType<PreconditionFailedResult<Other>>(mappedResult);
35+
Assert.Equal(reason, preconditionFailedResult.Reason);
36+
Assert.Equal(originalMessage, preconditionFailedResult.Message);
1837
}
38+
39+
private class Original { }
40+
41+
private class Other { }
1942
}

src/F23.Kernel/Result.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public Result<TOther> MapFailure<TOther>() =>
151151
SuccessResult<T> => throw new InvalidOperationException("Cannot map failure on success result"),
152152
ValidationFailedResult<T> validationFailed => Result<TOther>.ValidationFailed(validationFailed.Errors),
153153
UnauthorizedResult<T> unauthorized => Result<TOther>.Unauthorized(unauthorized.Message),
154-
PreconditionFailedResult<T> preconditionFailed => Result<TOther>.PreconditionFailed(preconditionFailed.Reason),
154+
PreconditionFailedResult<T> preconditionFailed => Result<TOther>.PreconditionFailed(preconditionFailed.Reason, preconditionFailed.Message),
155155
_ => throw new InvalidOperationException("Unknown result type")
156156
};
157157

0 commit comments

Comments
 (0)