maksit-results/MaksIT.Results.Tests/UnitTest1.cs
2025-10-29 23:16:04 +01:00

137 lines
4.0 KiB
C#

using Xunit;
using System.Net;
using MaksIT.Results;
using MaksIT.Results.Mvc;
namespace MaksIT.Results.Tests {
public class ResultTests {
[Fact]
public void Result_Ok_ShouldReturnSuccess() {
// Arrange
var message = "Operation successful";
// Act
var result = Result.Ok(message);
// Assert
Assert.True(result.IsSuccess);
Assert.Contains(message, result.Messages);
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
}
[Fact]
public void Result_BadRequest_ShouldReturnFailure() {
// Arrange
var message = "Invalid request";
// Act
var result = Result.BadRequest(message);
// Assert
Assert.False(result.IsSuccess);
Assert.Contains(message, result.Messages);
Assert.Equal(HttpStatusCode.BadRequest, result.StatusCode);
}
[Fact]
public void Result_Generic_Ok_ShouldReturnSuccessWithValue() {
// Arrange
var value = 42;
var message = "Operation successful";
// Act
var result = Result<int>.Ok(value, message);
// Assert
Assert.True(result.IsSuccess);
Assert.Equal(value, result.Value);
Assert.Contains(message, result.Messages);
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
}
[Fact]
public void Result_Generic_NotFound_ShouldReturnFailureWithNullValue() {
// Arrange
var message = "Resource not found";
// Act
var result = Result<string>.NotFound(null, message);
// Assert
Assert.False(result.IsSuccess);
Assert.Null(result.Value);
Assert.Contains(message, result.Messages);
Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
}
[Fact]
public void Result_ToResultOfType_ShouldTransformValue() {
// Arrange
var initialValue = 42;
var transformedValue = "42";
var result = Result<int>.Ok(initialValue);
// Act
var transformedResult = result.ToResultOfType(value => value.ToString());
// Assert
Assert.True(transformedResult.IsSuccess);
Assert.Equal(transformedValue, transformedResult.Value);
Assert.Equal(result.StatusCode, transformedResult.StatusCode);
}
[Fact]
public void Result_ToActionResult_ShouldReturnStatusCodeResult() {
// Arrange
var result = Result.Ok("Operation successful");
// Act
var actionResult = result.ToActionResult();
// Assert
Assert.IsType<StatusCodeResult>(actionResult);
var statusCodeResult = actionResult as StatusCodeResult;
Assert.NotNull(statusCodeResult);
Assert.Equal((int)HttpStatusCode.OK, statusCodeResult.StatusCode);
}
[Fact]
public void Result_ToActionResult_ShouldReturnObjectResultForFailure() {
// Arrange
var errorMessage = "An error occurred";
var result = Result.BadRequest(errorMessage);
// Act
var actionResult = result.ToActionResult();
// Assert
Assert.IsType<ObjectResult>(actionResult);
var objectResult = actionResult as ObjectResult;
Assert.NotNull(objectResult);
Assert.Equal((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
Assert.IsType<ProblemDetails>(objectResult.Value);
var problemDetails = objectResult.Value as ProblemDetails;
Assert.NotNull(problemDetails);
Assert.Equal((int)HttpStatusCode.BadRequest, problemDetails.Status);
Assert.Equal("An error occurred", problemDetails.Title);
Assert.Equal(errorMessage, problemDetails.Detail);
}
[Fact]
public void Result_Generic_ToActionResult_ShouldReturnObjectResultWithValue() {
// Arrange
var value = new { Id = 1, Name = "Test" };
var result = Result<object>.Ok(value);
// Act
var actionResult = result.ToActionResult();
// Assert
Assert.IsType<ObjectResult>(actionResult);
var objectResult = actionResult as ObjectResult;
Assert.NotNull(objectResult);
Assert.Equal((int)HttpStatusCode.OK, objectResult.StatusCode);
Assert.Equal(value, objectResult.Value);
}
}
}