public void Should_call_onFallback_passing_result_triggering_fallback() { bool fallbackActionExecuted = false; Func<CancellationToken, Task<ResultClass>> fallbackAction = ct => { fallbackActionExecuted = true; return Task.FromResult(new ResultClass(ResultPrimitive.Substitute)); }; ResultClass resultPassedToOnFallback = null; Func<DelegateResult<ResultClass>, Task> onFallbackAsync = r => { resultPassedToOnFallback = r.Result; return TaskHelper.EmptyTask; }; FallbackPolicy<ResultClass> fallbackPolicy = Policy .HandleResult<ResultClass>(r => r.ResultCode == ResultPrimitive.Fault) .FallbackAsync(fallbackAction, onFallbackAsync); ResultClass resultFromDelegate = new ResultClass(ResultPrimitive.Fault); fallbackPolicy.ExecuteAsync(() => { return Task.FromResult(resultFromDelegate); }); fallbackActionExecuted.Should().BeTrue(); resultPassedToOnFallback.Should().NotBeNull(); resultPassedToOnFallback.Should().Be(resultFromDelegate); }
public void Should_call_onFallback_passing_result_triggering_fallback() { bool fallbackActionExecuted = false; Func<ResultClass> fallbackAction = () => { fallbackActionExecuted = true; return new ResultClass(ResultPrimitive.Substitute); }; ResultClass resultPassedToOnFallback = null; Action<DelegateResult<ResultClass>> onFallback = r => { resultPassedToOnFallback = r.Result; }; FallbackPolicy<ResultClass> fallbackPolicy = Policy .HandleResult<ResultClass>(r => r.ResultCode == ResultPrimitive.Fault) .Fallback(fallbackAction, onFallback); ResultClass resultFromDelegate = new ResultClass(ResultPrimitive.Fault); fallbackPolicy.Execute(() => { return resultFromDelegate; }); fallbackActionExecuted.Should().BeTrue(); resultPassedToOnFallback.Should().NotBeNull(); resultPassedToOnFallback.Should().Be(resultFromDelegate); }