using FluentResults; namespace IdentityShroud.Core.Tests; public static class ResultAssert { public static void Success(Result result) { if (!result.IsSuccess) { var errors = string.Join("\n", result.Errors.Select(e => "\t" + e.Message)); Assert.True(result.IsSuccess, $"ResultAssert.Success: failed, got errors:\n{errors}"); } } public static T Success(Result result) { Success(result.ToResult()); return result.Value; } public static void Failed(Result result, Predicate? filter = null) { if (!result.IsFailed) { Assert.Fail("ResultAssert.Failed: failed, unexpected success result"); } if (filter is not null) Assert.Contains(result.Errors, filter); } public static void Failed(Result result, Predicate? filter = null) { Failed(result.ToResult(), filter); } public static void FailedWith(Result result) where TError : IError { if (!result.IsFailed) { Assert.Fail("ResultAssert.Failed: failed, unexpected success result"); } if (!result.Errors.Any(e => e is TError)) { string typeName = typeof(TError).Name; Assert.Fail($"ResultAssert.Failed: failed, no error of the type {typeName} found"); } } public static void FailedWith(Result result) where TError : IError { if (!result.IsFailed) { Assert.Fail("ResultAssert.Failed: failed, unexpected success result"); } if (!result.Errors.Any(e => e is TError)) { string typeName = typeof(TError).Name; Assert.Fail($"ResultAssert.Failed: failed, no error of the type {typeName} found"); } } }