From c642015de94c436c1a110eda942c56517dffdbd5 Mon Sep 17 00:00:00 2001 From: Luiz Adolfo Date: Sun, 19 Jul 2026 10:46:51 -0300 Subject: [PATCH] Add unit tests for Result and Result Value/HasValue --- tests/UnionResult.Tests/ResultOfTTests.cs | 63 +++++++++++++++++++++++ tests/UnionResult.Tests/ResultTests.cs | 46 +++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/tests/UnionResult.Tests/ResultOfTTests.cs b/tests/UnionResult.Tests/ResultOfTTests.cs index 7a6cb53..0e9a7c2 100644 --- a/tests/UnionResult.Tests/ResultOfTTests.cs +++ b/tests/UnionResult.Tests/ResultOfTTests.cs @@ -31,6 +31,69 @@ public void Failure_ReturnsResultThatIsFailureAndCarriesTheException() result.AsException().Should().BeSameAs(exception); } + [Fact] + public void Value_OnSuccess_ReturnsTheBoxedValue() + { + // Act + var result = Result.Success(42); + + // Assert + result.Value.Should().Be(42); + } + + [Fact] + public void Value_OnFailure_ReturnsTheException() + { + // Arrange + var exception = new InvalidOperationException("boom"); + + // Act + var result = Result.Failure(exception); + + // Assert + result.Value.Should().BeSameAs(exception); + } + + [Fact] + public void Value_OnDefault_IsNull() + { + // Act + var result = default(Result); + + // Assert + result.Value.Should().BeNull(); + } + + [Fact] + public void HasValue_OnSuccess_IsTrue() + { + // Act + var result = Result.Success(42); + + // Assert + result.HasValue.Should().BeTrue(); + } + + [Fact] + public void HasValue_OnFailure_IsTrue() + { + // Act + var result = Result.Failure(new InvalidOperationException("boom")); + + // Assert + result.HasValue.Should().BeTrue(); + } + + [Fact] + public void HasValue_OnDefault_IsFalse() + { + // Act + var result = default(Result); + + // Assert + result.HasValue.Should().BeFalse(); + } + [Fact] public void Failure_WithNullException_ThrowsArgumentNullException() { diff --git a/tests/UnionResult.Tests/ResultTests.cs b/tests/UnionResult.Tests/ResultTests.cs index 148a127..c1c531a 100644 --- a/tests/UnionResult.Tests/ResultTests.cs +++ b/tests/UnionResult.Tests/ResultTests.cs @@ -29,6 +29,52 @@ public void Failure_ReturnsResultThatIsFailure() result.IsFailure.Should().BeTrue(); } + [Fact] + public void Value_OnSuccess_IsNull() + { + // Act + var result = Result.Success(); + + // Assert + result.Value.Should().BeNull(); + } + + [Fact] + public void Value_OnFailure_ReturnsTheException() + { + // Arrange + var exception = new InvalidOperationException("boom"); + + // Act + var result = Result.Failure(exception); + + // Assert + result.Value.Should().BeSameAs(exception); + } + + [Fact] + public void HasValue_OnSuccess_IsFalse() + { + // Success carries no payload, so HasValue only reflects whether there's an + // exception - it isn't a general "is this a valid result" check. + + // Act + var result = Result.Success(); + + // Assert + result.HasValue.Should().BeFalse(); + } + + [Fact] + public void HasValue_OnFailure_IsTrue() + { + // Act + var result = Result.Failure(new InvalidOperationException("boom")); + + // Assert + result.HasValue.Should().BeTrue(); + } + [Fact] public void AsException_OnFailure_ReturnsTheOriginalExceptionInstance() {