public async Task SelectAsync_from_ok_returns_transformation() { var t = new TestTransformerService(); var newOkResult = await Result.Ok() .SelectAsync(() => t.TransformAsync(TestTransformerService.Start, 1)) .SelectAsync(r => t.Transform(r, 2)) .SelectAsync(r => t.TransformAsync(r, 3)); Assert.True(newOkResult.IsSuccess); Assert.Equal("Hello World!!!", newOkResult.Value); newOkResult = await Task.FromResult(Result.Ok()) .SelectAsync(() => t.Transform(TestTransformerService.Start, 4)); Assert.True(newOkResult.IsSuccess); Assert.Equal("Hello World!", newOkResult.Value); newOkResult = await Task.FromResult(Result.Ok()) .SelectAsync(() => t.TransformAsync(TestTransformerService.Start, 5)) .SelectAsync(r => t.TransformAsync(r, 6)); Assert.True(newOkResult.IsSuccess); Assert.Equal("Hello World!!", newOkResult.Value); }
public void Map_runs_function_against_input_and_returns_output() { var t = new TestTransformerService(); var actual = TestTransformerService.Start .Map(i => t.Transform(i, 1)) .Map(i => t.Transform(i, 2)); Assert.Equal("Hello World!!", actual); }
public async Task MapAsync_awaits_as_needed() { var t = new TestTransformerService(); var actual = await TestTransformerService.Start .MapAsync(i => t.TransformAsync(i, 1)) .MapAsync(i => t.Transform(i, 2)) .MapAsync(i => t.TransformAsync(i, 3)); Assert.Equal("Hello World!!!", actual); }
public async Task SelectAsync_from_none_returns_none() { var t = new TestTransformerService(); var maybe = await Maybe.None <string>() .SelectAsync(a => t.TransformAsync(a, 1)) .SelectAsync(a => t.Transform(a, 2)) .SelectAsync(a => t.TransformAsync(a, 3)); Assert.True(maybe.HasNoValue); }
public async Task SelectAsync_from_failure_returns_failure() { var t = new TestTransformerService(); var newFailResult = await Result.Fail(new Failure("oops")) .SelectAsync(() => t.TransformAsync(TestTransformerService.Start, 1)) .SelectAsync(r => t.Transform(r, 2)) .SelectAsync(r => t.TransformAsync(r, 3)); Assert.True(newFailResult.IsFailed); Assert.Equal("oops", newFailResult.Failures.First().Message); }
public async Task SelectAsync_from_maybe_with_value_returns_transformation() { var t = new TestTransformerService(); var maybe = await Maybe.From(TestTransformerService.Start) .SelectAsync(a => t.TransformAsync(a, 1)) .SelectAsync(a => t.Transform(a, 2)) .SelectAsync(a => t.TransformAsync(a, 3)); Assert.True(maybe.HasValue); Assert.Equal("Hello World!!!", maybe.Value); }
public async Task ThenAsync_from_Maybe_with_value_returns_new_maybe() { var t = new TestTransformerService(); var maybe = await Maybe.From(TestTransformerService.Start) .ThenAsync(a => t.TransformMaybeAsync(a, 1)) .ThenAsync(a => t.TransformMaybe(a, 2)) .ThenAsync(a => t.TransformMaybeAsync(a, 3)); Assert.True(maybe.HasValue); Assert.Equal("Hello World!!!", maybe.Value); }
public async Task ThenAsync_from_failure_doesnt_run_function() { var t = new TestTransformerService(); var newFailResult = await Result.Fail <int>(new Failure("oops")) .ThenAsync(r => t.GetResultAsync(string.Empty, 1)) .ThenAsync(r => t.GetResult(string.Empty, 2)) .ThenAsync(r => t.GetResultAsync(string.Empty, 2)) .ThenAsync(r => t.GetResultAsync(3)) .ThenAsync(() => t.GetResultAsync(4)) .ThenAsync(() => t.GetResult(string.Empty, 5)) .ThenAsync(r => t.GetResult(string.Empty, 6)) .ThenAsync(r => t.GetResultAsync(7)) .ThenAsync(() => t.GetResultAsync(2, 8)) .ThenAsync(r => t.GetResult(9)); Assert.True(newFailResult.IsFailed); Assert.Equal("oops", newFailResult.Failures.First().Message); }
public async Task ThenAsync_from_ok_runs_function() { var t = new TestTransformerService(); var newOkResult = await Result.Ok() .ThenAsync(() => t.GetResultAsync(1)) .ThenAsync(() => t.GetResult(2)) .ThenAsync(() => t.GetResultAsync(3)) .ThenAsync(() => t.GetResult(string.Empty, 4)) .ThenAsync(r => t.GetResult(string.Empty, 5)) .ThenAsync(r => t.GetResult(string.Empty, 6)) .ThenAsync(r => t.GetResult(string.Empty, 7)) .ThenAsync(r => t.GetResultAsync(8)) .ThenAsync(() => t.GetResultAsync(2, 9)) .ThenAsync(r => t.GetResult(2, 10)); Assert.True(newOkResult.IsSuccess); Assert.Equal(2, newOkResult.Value); }