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() {