@@ -433,6 +433,41 @@ public async Task When_Exception_Occurs_During_Evaluation_Should_Return_Error()
433
433
_ = featureProviderMock . Received ( 1 ) . ResolveStructureValueAsync ( flagName , defaultValue , Arg . Any < EvaluationContext > ( ) ) ;
434
434
}
435
435
436
+ [ Fact ]
437
+ public async Task When_Error_Is_Returned_From_Provider_Should_Not_Run_After_Hook_But_Error_Hook ( )
438
+ {
439
+ var fixture = new Fixture ( ) ;
440
+ var domain = fixture . Create < string > ( ) ;
441
+ var clientVersion = fixture . Create < string > ( ) ;
442
+ var flagName = fixture . Create < string > ( ) ;
443
+ var defaultValue = fixture . Create < Value > ( ) ;
444
+ const string testMessage = "Couldn't parse flag data." ;
445
+
446
+ var featureProviderMock = Substitute . For < FeatureProvider > ( ) ;
447
+ featureProviderMock . ResolveStructureValueAsync ( flagName , defaultValue , Arg . Any < EvaluationContext > ( ) )
448
+ . Returns ( Task . FromResult ( new ResolutionDetails < Value > ( flagName , defaultValue , ErrorType . ParseError ,
449
+ "ERROR" , null , testMessage ) ) ) ;
450
+ featureProviderMock . GetMetadata ( ) . Returns ( new Metadata ( fixture . Create < string > ( ) ) ) ;
451
+ featureProviderMock . GetProviderHooks ( ) . Returns ( ImmutableList < Hook > . Empty ) ;
452
+
453
+ await Api . Instance . SetProviderAsync ( featureProviderMock ) ;
454
+ var client = Api . Instance . GetClient ( domain , clientVersion ) ;
455
+ var testHook = new TestHook ( ) ;
456
+ client . AddHooks ( testHook ) ;
457
+ var response = await client . GetObjectDetailsAsync ( flagName , defaultValue ) ;
458
+
459
+ response . ErrorType . Should ( ) . Be ( ErrorType . ParseError ) ;
460
+ response . Reason . Should ( ) . Be ( Reason . Error ) ;
461
+ response . ErrorMessage . Should ( ) . Be ( testMessage ) ;
462
+ _ = featureProviderMock . Received ( 1 )
463
+ . ResolveStructureValueAsync ( flagName , defaultValue , Arg . Any < EvaluationContext > ( ) ) ;
464
+
465
+ Assert . Equal ( 1 , testHook . BeforeCallCount ) ;
466
+ Assert . Equal ( 0 , testHook . AfterCallCount ) ;
467
+ Assert . Equal ( 1 , testHook . ErrorCallCount ) ;
468
+ Assert . Equal ( 1 , testHook . FinallyCallCount ) ;
469
+ }
470
+
436
471
[ Fact ]
437
472
public async Task Cancellation_Token_Added_Is_Passed_To_Provider ( )
438
473
{
@@ -454,6 +489,7 @@ public async Task Cancellation_Token_Added_Is_Passed_To_Provider()
454
489
{
455
490
await Task . Delay ( 10 ) ; // artificially delay until cancelled
456
491
}
492
+
457
493
return new ResolutionDetails < string > ( flagName , defaultString , ErrorType . None , cancelledReason ) ;
458
494
} ) ;
459
495
featureProviderMock . GetMetadata ( ) . Returns ( new Metadata ( fixture . Create < string > ( ) ) ) ;
0 commit comments