From c57fad2779d07ae3a4f44685afe8d3c1f660306a Mon Sep 17 00:00:00 2001 From: "Daniel Mackay [SSW]" <2636640+danielmackay@users.noreply.github.com> Date: Sun, 26 May 2024 02:45:41 +1000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20176=20result=20status=20helpers=20(?= =?UTF-8?q?#184)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added helper extensions to determine status of the result * Added tests for IResultExtensions --------- Co-authored-by: Steve Smith --- src/Ardalis.Result/IResultExtensions.cs | 59 +++++++++ .../IResultExtensions.cs | 120 ++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 src/Ardalis.Result/IResultExtensions.cs create mode 100644 tests/Ardalis.Result.UnitTests/IResultExtensions.cs diff --git a/src/Ardalis.Result/IResultExtensions.cs b/src/Ardalis.Result/IResultExtensions.cs new file mode 100644 index 0000000..c7d4165 --- /dev/null +++ b/src/Ardalis.Result/IResultExtensions.cs @@ -0,0 +1,59 @@ +namespace Ardalis.Result; + +public static class IResultExtensions +{ + /// + /// Returns true if the result is successful (status is Ok). + /// + public static bool IsOk(this IResult result) => result.Status == ResultStatus.Ok; + + /// + /// Returns true if the result is created (status is Created). + /// + public static bool IsCreated(this IResult result) => result.Status == ResultStatus.Created; + + /// + /// Returns true if the result is an error (status is Error). + /// + public static bool IsError(this IResult result) => result.Status == ResultStatus.Error; + + /// + /// Returns true if the result is forbidden (status is Forbidden). + /// + public static bool IsForbidden(this IResult result) => result.Status == ResultStatus.Forbidden; + + /// + /// Returns true if the result is unauthorized (status is Unauthorized). + /// + public static bool IsUnauthorized(this IResult result) => result.Status == ResultStatus.Unauthorized; + + /// + /// Returns true if the result is invalid (status is Invalid). + /// + public static bool IsInvalid(this IResult result) => result.Status == ResultStatus.Invalid; + + /// + /// Returns true if the result is not found (status is NotFound). + /// + public static bool IsNotFound(this IResult result) => result.Status == ResultStatus.NotFound; + + /// + /// Returns true if the result is no content (status is NoContent). + /// + public static bool IsNoContent(this IResult result) => result.Status == ResultStatus.NoContent; + + /// + /// Returns true if the result is a conflict (status is Conflict). + /// + public static bool IsConflict(this IResult result) => result.Status == ResultStatus.Conflict; + + /// + /// Returns true if the result is a critical error (status is CriticalError). + /// + public static bool IsCriticalError(this IResult result) => result.Status == ResultStatus.CriticalError; + + /// + /// Returns true if the result is unavailable (status is Unavailable). + /// + public static bool IsUnavailable(this IResult result) => result.Status == ResultStatus.Unavailable; +} diff --git a/tests/Ardalis.Result.UnitTests/IResultExtensions.cs b/tests/Ardalis.Result.UnitTests/IResultExtensions.cs new file mode 100644 index 0000000..d66d1d8 --- /dev/null +++ b/tests/Ardalis.Result.UnitTests/IResultExtensions.cs @@ -0,0 +1,120 @@ +using Xunit; + +namespace Ardalis.Result.UnitTests; + +public class IResultExtensions +{ + [Fact] + public void IsOk_ReturnsTrue_WhenStatusIsOk() + { + // Arrange & Act + var result = Result.Success(); + + // Assert + Assert.True(result.IsOk()); + } + + [Fact] + public void IsCreated_ReturnsTrue_WhenStatusIsCreated() + { + // Arrange & Act + var foo = new Foo("Bar"); + var result = Result.Created(foo); + + // Assert + Assert.True(result.IsCreated()); + } + + [Fact] + public void IsError_ReturnsTrue_WhenStatusIsError() + { + // Arrange & Act + var result = Result.Error(); + + // Assert + Assert.True(result.IsError()); + } + + [Fact] + public void IsForbidden_ReturnsTrue_WhenStatusIsForbidden() + { + // Arrange & Act + var result = Result.Forbidden(); + + // Assert + Assert.True(result.IsForbidden()); + } + + [Fact] + public void IsUnauthorized_ReturnsTrue_WhenStatusIsUnauthorized() + { + // Arrange & Act + var result = Result.Unauthorized(); + + // Assert + Assert.True(result.IsUnauthorized()); + } + + [Fact] + public void IsInvalid_ReturnsTrue_WhenStatusIsInvalid() + { + // Arrange & Act + var result = Result.Invalid(); + + // Assert + Assert.True(result.IsInvalid()); + } + + [Fact] + public void IsNotFound_ReturnsTrue_WhenStatusIsNotFound() + { + // Arrange & Act + var result = Result.NotFound(); + + // Assert + Assert.True(result.IsNotFound()); + } + + [Fact] + public void IsNoContent_ReturnsTrue_WhenStatusIsNoContent() + { + // Arrange & ActI + var result = Result.NoContent(); + + // Assert + Assert.True(result.IsNoContent()); + } + + [Fact] + public void IsConflict_ReturnsTrue_WhenStatusIsConflict() + { + // Arrange & Act + var result = Result.Conflict(); + + // Assert + Assert.True(result.IsConflict()); + } + + [Fact] + public void IsCriticalError_ReturnsTrue_WhenStatusIsCriticalError() + { + // Arrange & Act + var result = Result.CriticalError(); + + // Assert + Assert.True(result.IsCriticalError()); + } + + [Fact] + public void IsUnavailable_ReturnsTrue_WhenStatusIsUnavailable() + { + // Arrange & Act + var result = Result.Unavailable(); + + // Assert + Assert.True(result.IsUnavailable()); + } + + private record Foo(string Value); + +}