Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static IActionResult ToActionResult<T>(this Result<T> result)
if (result.IsSuccess)
return new OkObjectResult(result.Value);

var problem = result.Problem ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
var problem = result.GetProblemNoFallback() ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
return new ObjectResult(problem)
{
StatusCode = problem.StatusCode
Expand All @@ -22,7 +22,7 @@ public static IActionResult ToActionResult(this Result result)
if (result.IsSuccess)
return new NoContentResult();

var problem = result.Problem ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
var problem = result.GetProblemNoFallback() ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
return new ObjectResult(problem)
{
StatusCode = problem.StatusCode
Expand All @@ -34,7 +34,7 @@ public static Microsoft.AspNetCore.Http.IResult ToHttpResult<T>(this Result<T> r
if (result.IsSuccess)
return Results.Ok(result.Value);

var problem = result.Problem ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
var problem = result.GetProblemNoFallback() ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
return Results.Problem(
title: problem.Title,
detail: problem.Detail,
Expand All @@ -50,7 +50,7 @@ public static Microsoft.AspNetCore.Http.IResult ToHttpResult(this Result result)
if (result.IsSuccess)
return Results.NoContent();

var problem = result.Problem ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
var problem = result.GetProblemNoFallback() ?? Problem.Create("Operation failed", "Unknown error occurred", 500);
return Results.Problem(
title: problem.Title,
detail: problem.Detail,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ public sealed class CollectionResultTSurrogateConverter<T> : IConverter<Collecti
{
public CollectionResult<T> ConvertFromSurrogate(in CollectionResultTSurrogate<T> surrogate)
{
return CollectionResult<T>.Create(surrogate.IsSuccess, surrogate.Collection, surrogate.PageNumber, surrogate.PageSize, surrogate.TotalItems,
surrogate.Problem);
if (surrogate.IsSuccess)
return CollectionResult<T>.CreateSuccess(surrogate.Collection, surrogate.PageNumber, surrogate.PageSize, surrogate.TotalItems);

return CollectionResult<T>.CreateFailed(surrogate.Problem ?? Problem.GenericError(), surrogate.Collection);
}

public CollectionResultTSurrogate<T> ConvertToSurrogate(in CollectionResult<T> value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ public sealed class ResultSurrogateConverter : IConverter<Result, ResultSurrogat
{
public Result ConvertFromSurrogate(in ResultSurrogate surrogate)
{
return Result.Create(surrogate.IsSuccess, surrogate.Problem);
if (surrogate.IsSuccess)
return Result.Succeed();

return Result.CreateFailed(surrogate.Problem ?? Problem.GenericError());
}

public ResultSurrogate ConvertToSurrogate(in Result value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ public sealed class ResultTSurrogateConverter<T> : IConverter<Result<T>, ResultT
{
public Result<T> ConvertFromSurrogate(in ResultTSurrogate<T> surrogate)
{
return Result<T>.Create(surrogate.IsSuccess, surrogate.Value, surrogate.Problem);
if (surrogate.IsSuccess)
return Result<T>.Succeed(surrogate.Value!);

return Result<T>.CreateFailed(surrogate.Problem ?? Problem.GenericError(), surrogate.Value);
}

public ResultTSurrogate<T> ConvertToSurrogate(in Result<T> value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public void ToActionResult_WithValidationError_Returns400WithProblemDetails()
public void ToActionResult_WithNoProblem_ReturnsDefaultError()
{
// Arrange - manually create failed result without problem
var result = new Result<string> { IsSuccess = false, Problem = null };
var result = (Result<string>)default;

// Act
var actionResult = result.ToActionResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void Fail_NoParameters_ShouldCreateFailedResult()
result.PageSize.Should().Be(0);
result.TotalItems.Should().Be(0);
result.TotalPages.Should().Be(0);
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

#endregion
Expand All @@ -48,7 +48,7 @@ public void Fail_WithEnumerable_ShouldCreateFailedResultWithItems()
result.IsFailed.Should().BeTrue();
result.Collection.Should().BeEquivalentTo(items);
result.Collection.Should().HaveCount(5);
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

[Fact]
Expand Down Expand Up @@ -84,7 +84,7 @@ public void Fail_WithArray_ShouldCreateFailedResultWithItems()
result.IsFailed.Should().BeTrue();
result.Collection.Should().BeEquivalentTo(items);
result.Collection.Should().HaveCount(3);
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ public void From_FailedCollectionResultWithoutProblem_ShouldReturnFailedResult()

// Assert
result.IsFailed.Should().BeTrue();
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

#endregion
Expand Down Expand Up @@ -507,7 +507,7 @@ public void From_GenericFailedCollectionResultWithoutProblem_ShouldReturnFailedR

// Assert
result.IsFailed.Should().BeTrue();
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,4 +286,43 @@ public void ToFailedResult_WithComplexExtensions_ShouldPreserveAllData()
errors["email"].Should().Contain("Already exists");
errors["password"].Should().Contain("Too short");
}
}

[Fact]
public void AddInvalidMessage_ShouldAddValidationError()
{
// Arrange
var problem = new Problem();

// Act
problem.AddValidationError("email", "Email is required");
problem.AddValidationError("email", "Email format is invalid");

// Assert
problem.InvalidField("email")
.Should()
.BeTrue();
var emailErrors = problem.InvalidFieldError("email");
emailErrors.Should()
.Contain("Email is required");
emailErrors.Should()
.Contain("Email format is invalid");
}

[Fact]
public void AddInvalidMessage_WithGeneralMessage_ShouldAddToGeneralErrors()
{
// Arrange
var problem = new Problem();

// Act
problem.AddValidationError("General error occurred");

// Assert
problem.InvalidField("_general")
.Should()
.BeTrue();
var generalErrors = problem.InvalidFieldError("_general");
generalErrors.Should()
.Be("General error occurred");
}
}
39 changes: 0 additions & 39 deletions ManagedCode.Communication.Tests/Results/CollectionResultTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -292,45 +292,6 @@ public void InvalidFieldError_WithValidationProblem_ShouldReturnErrorMessage()
.BeEmpty();
}

[Fact]
public void AddInvalidMessage_ShouldAddValidationError()
{
// Arrange
var result = CollectionResult<string>.Empty();

// Act
result.AddInvalidMessage("email", "Email is required");
result.AddInvalidMessage("email", "Email format is invalid");

// Assert
result.InvalidField("email")
.Should()
.BeTrue();
var emailErrors = result.InvalidFieldError("email");
emailErrors.Should()
.Contain("Email is required");
emailErrors.Should()
.Contain("Email format is invalid");
}

[Fact]
public void AddInvalidMessage_WithGeneralMessage_ShouldAddToGeneralErrors()
{
// Arrange
var result = CollectionResult<string>.Empty();

// Act
result.AddInvalidMessage("General error occurred");

// Assert
result.InvalidField("_general")
.Should()
.BeTrue();
var generalErrors = result.InvalidFieldError("_general");
generalErrors.Should()
.Be("General error occurred");
}

[Fact]
public void ThrowIfFail_WithSuccessfulResult_ShouldNotThrow()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public void Result_Fail_NoParameters_ShouldCreateFailedResult()
// Assert
result.IsFailed.Should().BeTrue();
result.IsSuccess.Should().BeFalse();
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public void Result_FailT_NoParameters_ShouldCreateFailedResultT()
result.IsFailed.Should().BeTrue();
result.IsSuccess.Should().BeFalse();
result.Value.Should().BeNull();
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public void ResultT_Fail_NoParameters_ShouldCreateFailedResult()
result.IsFailed.Should().BeTrue();
result.IsSuccess.Should().BeFalse();
result.Value.Should().BeNull();
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

#endregion
Expand All @@ -41,7 +41,7 @@ public void ResultT_Fail_WithValue_ShouldCreateFailedResultWithValue()
// Assert
result.IsFailed.Should().BeTrue();
result.Value.Should().Be(value);
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

[Fact]
Expand All @@ -54,7 +54,7 @@ public void ResultT_Fail_WithNullValue_ShouldCreateFailedResultWithNull()
// Assert
result.IsFailed.Should().BeTrue();
result.Value.Should().BeNull();
result.HasProblem.Should().BeFalse();
result.HasProblem.Should().BeTrue();
}

#endregion
Expand Down
Loading