public async Task Should_call_onFallback_with_the_passed_context_when_execute_and_capture() { Func <Context, CancellationToken, Task <ResultPrimitive> > fallbackAction = (_, __) => Task.FromResult(ResultPrimitive.Substitute); IDictionary <string, object> contextData = null; Func <DelegateResult <ResultPrimitive>, Context, Task> onFallbackAsync = (ex, ctx) => { contextData = ctx; return(TaskHelper.EmptyTask); }; FallbackPolicy <ResultPrimitive> fallbackPolicy = Policy .HandleResult(ResultPrimitive.Fault) .FallbackAsync(fallbackAction, onFallbackAsync); (await fallbackPolicy.ExecuteAndCaptureAsync(() => { return(Task.FromResult(ResultPrimitive.Fault)); }, new { key1 = "value1", key2 = "value2" }.AsDictionary()).ConfigureAwait(false)) .Result.Should().Be(ResultPrimitive.Substitute); contextData.Should() .ContainKeys("key1", "key2").And .ContainValues("value1", "value2"); }
public async Task Should_call_fallbackAction_with_the_fault_when_execute_and_capture() { DelegateResult <ResultPrimitive> fallbackOutcome = null; Func <DelegateResult <ResultPrimitive>, Context, CancellationToken, Task <ResultPrimitive> > fallbackAction = (outcome, ctx, ct) => { fallbackOutcome = outcome; return(Task.FromResult(ResultPrimitive.Substitute)); }; Func <DelegateResult <ResultPrimitive>, Context, Task> onFallback = (ex, ctx) => { return(TaskHelper.EmptyTask); }; FallbackPolicy <ResultPrimitive> fallbackPolicy = Policy <ResultPrimitive> .HandleResult(ResultPrimitive.Fault) .FallbackAsync(fallbackAction, onFallback); var result = await fallbackPolicy.ExecuteAndCaptureAsync(() => { return(Task.FromResult(ResultPrimitive.Fault)); }); result.Should().NotBeNull(); result.Result.Should().Be(ResultPrimitive.Substitute); fallbackOutcome.Should().NotBeNull(); fallbackOutcome.Exception.Should().BeNull(); fallbackOutcome.Result.Should().Be(ResultPrimitive.Fault); }