using Application.Common.Results; namespace Application.UnitTest.Common.Results; public class ResultTests { [Fact] public void Success_ShouldReturnResultWithIsSuccessTrue() { var result = Result.Success(); Assert.True(result.IsSuccess); Assert.False(result.IsFailure); Assert.Equal(ErrorTypeConstant.None, result.Error.Code); } [Fact] public void Success_WithValue_ShouldReturnResultWithValue() { var result = Result.Success("test-value"); Assert.True(result.IsSuccess); Assert.Equal("test-value", result.Value); } [Fact] public void Failure_ShouldReturnResultWithIsFailureTrue() { var error = new Error("TestError", "Something went wrong"); var result = Result.Failure(error); Assert.True(result.IsFailure); Assert.False(result.IsSuccess); Assert.Equal("TestError", result.Error.Code); Assert.Equal("Something went wrong", result.Error.Message); } [Fact] public void Failure_WithValueType_ShouldReturnTypedResult() { var error = new Error("NotFound", "Item not found"); var result = Result.Failure(error); Assert.True(result.IsFailure); Assert.Throws(() => result.Value); } [Fact] public void Constructor_ShouldThrow_WhenSuccessWithError() { var error = new Error("SomeError", "message"); Assert.Throws(() => new ResultTestCase(true, error)); } [Fact] public void Constructor_ShouldThrow_WhenFailureWithNoError() { var noneError = new Error("None", string.Empty); Assert.Throws(() => new ResultTestCase(false, noneError)); } } public class ResultTestCase : Result { public ResultTestCase(bool isSuccess, Error error) : base(isSuccess, error) { } }