public async Task Should_Execute_Task_Continuation() { var successResult = SuccessResult <int, int> .Create(1); var failureResult = FailureResult <int, int> .Create(2); Assert.AreEqual( 2, await successResult .OnSuccessAsync(s => Task.FromResult(s * 2)) .OnFailureAsync(f => Task.FromResult(f * 5)) .GetResultOrThrowExceptionAsync(f => new Exception())); Assert.AreEqual( 2, await successResult .OnSuccessAsync(s => SuccessResult <int, int> .CreateAsync(s * 2)) .OnFailureAsync(f => FailureResult <int, int> .CreateAsync(f * 5)) .GetResultOrThrowExceptionAsync(f => new Exception())); Assert.AreEqual( 4, await failureResult .OnFailureAsync(f => Task.FromResult(f * 2)) .OnSuccessAsync(s => Task.FromResult(s * 5)) .HandleAsync(s => 0, f => f)); Assert.AreEqual( 4, await failureResult .OnFailureAsync(f => FailureResult <int, int> .CreateAsync(f * 2)) .OnSuccessAsync(s => SuccessResult <int, int> .CreateAsync(s * 5)) .HandleAsync(s => 0, f => f)); }
public void Should_Throw_Exception_When_No_Async_Result() { var failure = "failure"; var failableAsyncResult = FailureResult <string, string> .CreateAsync(failure); Assert.ThrowsAsync <Exception>(async() => await failableAsyncResult.GetResultOrThrowExceptionAsync(f => new Exception())); }
public async Task Should_Create_Failure_Async_Result_When_Factory_Method_Used() { var failure = "failure"; var failureAsyncResult = FailureResult <bool, string> .CreateAsync(failure); var failureResult = await failureAsyncResult; Assert.AreEqual(failure, (failureResult as FailureResult <bool, string>).Failure); }
public async Task Should_handle_async_result_with_async_continuations() { var asyncSuccessResult = SuccessResult <int, int> .CreateAsync(1); var asyncFailureResult = FailureResult <int, int> .CreateAsync(1); Func <int, Task <int> > f1 = x => Task.FromResult(x * 2); Func <int, Task <int> > f2 = x => Task.FromResult(-x); var handledSuccessResult = await asyncSuccessResult.HandleAsync(f1, f2); var handledFailureResult = await asyncFailureResult.HandleAsync(f1, f2); Assert.AreEqual(2, handledSuccessResult); Assert.AreEqual(-1, handledFailureResult); }
public async Task Should_handle_async_result() { var asyncSuccessResult = SuccessResult <int, int> .CreateAsync(1); var asyncFailureResult = FailureResult <int, int> .CreateAsync(1); Func <int, int> f1 = x => x * 2; Func <int, int> f2 = x => - x; var handledSuccessResult = await asyncSuccessResult.HandleAsync(f1, f2); var handledFailureResult = await asyncFailureResult.HandleAsync(f1, f2); Assert.AreEqual(2, handledSuccessResult); Assert.AreEqual(-1, handledFailureResult); }