ResultTests.cs (3326B)
1 using AwesomeAssertions; 2 using SimpleResults.Errors; 3 using SimpleResults.Results; 4 5 namespace Tests.Results; 6 7 public class ResultTests 8 { 9 [Fact] 10 public void Success_ShouldCreateSuccessfulResult() 11 { 12 // Act 13 var result = Result.Success(); 14 15 // Assert 16 result.IsFailure.Should().BeFalse(); 17 } 18 19 [Fact] 20 public void Failure_WithErrorDetail_ShouldCreateFailedResult() 21 { 22 // Arrange 23 const int errorCode = 404; 24 const string message = "Not found"; 25 var errorDetail = new ErrorDetail(errorCode, message); 26 27 // Act 28 var result = Result.Failure(errorDetail); 29 30 // Assert 31 result.IsFailure.Should().BeTrue(); 32 var error = result.TryGetError(); 33 error.ErrorCode.Should().Be(errorCode); 34 error.Message.Should().Be(message); 35 } 36 37 [Fact] 38 public void Failure_WithCodeMessageAndException_ShouldCreateFailedResult() 39 { 40 // Arrange 41 var exception = new InvalidOperationException("Test exception"); 42 const int code = 500; 43 const string message = "Internal error"; 44 45 // Act 46 var result = Result.Failure(code, message, exception); 47 48 // Assert 49 result.IsFailure.Should().BeTrue(); 50 var error = result.TryGetError(); 51 error.ErrorCode.Should().Be(code); 52 error.Message.Should().Be(message); 53 error.Exception.Should().Be(exception); 54 } 55 56 [Fact] 57 public void Failure_WithCodeMessageAndNullException_ShouldCreateFailedResult() 58 { 59 // Act 60 const int code = 400; 61 const string message = "Bad request"; 62 var result = Result.Failure(code, message, null); 63 64 // Assert 65 result.IsFailure.Should().BeTrue(); 66 var error = result.TryGetError(); 67 error.ErrorCode.Should().Be(code); 68 error.Message.Should().Be(message); 69 error.Exception.Should().BeNull(); 70 } 71 72 [Fact] 73 public void TryGetError_OnSuccessfulResult_ShouldThrowNullReferenceException() 74 { 75 // Arrange 76 var result = Result.Success(); 77 78 // Act & Assert 79 var exception = Assert.Throws<InvalidOperationException>(() => result.TryGetError()); 80 Assert.Contains("Can't get error", exception.Message); 81 } 82 83 [Fact] 84 public void IsFailure_OnFailedResult_ShouldReturnTrue() 85 { 86 // Arrange 87 const int code = 400; 88 const string message = "Bad request"; 89 var result = Result.Failure(code, message, null); 90 91 // Act & Assert 92 Assert.True(result.IsFailure); 93 } 94 95 [Fact] 96 public void MultipleFailureCalls_ShouldCreateIndependentInstances() 97 { 98 // Arrange 99 const int code1 = 400; 100 const string message1 = "Error 1"; 101 const int code2 = 500; 102 const string message2 = "Error 2"; 103 var error1 = new ErrorDetail(code1, message1); 104 var error2 = new ErrorDetail(code2, message2); 105 106 // Act 107 var result1 = Result.Failure(error1); 108 var result2 = Result.Failure(error2); 109 110 // Assert 111 Assert.NotSame(result1, result2); 112 Assert.True(result1.IsFailure); 113 Assert.True(result2.IsFailure); 114 Assert.Equal(code1, result1.TryGetError().ErrorCode); 115 Assert.Equal(code2, result2.TryGetError().ErrorCode); 116 } 117 }