public async Task 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); await 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); }