2
2
3
3
import java .util .*;
4
4
5
+ import dev .openfeature .javasdk .fixtures .HookFixtures ;
5
6
import org .junit .jupiter .api .*;
6
- import org .slf4j .LoggerFactory ;
7
+ import org .junit .jupiter .params .ParameterizedTest ;
8
+ import org .junit .jupiter .params .provider .EnumSource ;
7
9
8
10
import static org .assertj .core .api .Assertions .assertThat ;
9
11
import static org .mockito .Mockito .*;
10
12
11
- class HookSupportTest {
13
+ class HookSupportTest implements HookFixtures {
12
14
13
15
@ Test
14
16
@ DisplayName ("should merge EvaluationContexts on before hooks correctly" )
15
17
void shouldMergeEvaluationContextsOnBeforeHooksCorrectly () {
16
18
var baseContext = new EvaluationContext ();
17
19
baseContext .addStringAttribute ("baseKey" , "baseValue" );
18
20
var hookContext = new HookContext <>("flagKey" , FlagValueType .STRING , "defaultValue" , baseContext , () -> "client" , () -> "provider" );
19
- var hook1 = stringHookMock ();
20
- var hook2 = stringHookMock ();
21
+ var hook1 = mockStringHook ();
22
+ var hook2 = mockStringHook ();
21
23
when (hook1 .before (any (), any ())).thenReturn (Optional .of (evaluationContextWithValue ("bla" , "blubber" )));
22
24
when (hook2 .before (any (), any ())).thenReturn (Optional .of (evaluationContextWithValue ("foo" , "bar" )));
23
-
24
- var hookSupport = new HookSupport (LoggerFactory .getLogger ("test" ));
25
+ var hookSupport = new HookSupport ();
25
26
26
27
var result = hookSupport .beforeHooks (FlagValueType .STRING , hookContext , List .of (hook1 , hook2 ), Map .of ());
27
28
@@ -30,14 +31,45 @@ void shouldMergeEvaluationContextsOnBeforeHooksCorrectly() {
30
31
assertThat (result .getStringAttribute ("baseKey" )).isEqualTo ("baseValue" );
31
32
}
32
33
34
+ @ ParameterizedTest
35
+ @ EnumSource (value = FlagValueType .class )
36
+ @ DisplayName ("should always call generic hook" )
37
+ void shouldAlwaysCallGenericHook (FlagValueType flagValueType ) {
38
+ var genericHook = mockGenericHook ();
39
+ var hookSupport = new HookSupport ();
40
+ var baseContext = new EvaluationContext ();
41
+ var hookContext = new HookContext <>("flagKey" , flagValueType , createDefaultValue (flagValueType ), baseContext , () -> "client" , () -> "provider" );
42
+
43
+ hookSupport .beforeHooks (flagValueType , hookContext , List .of (genericHook ), Map .of ());
44
+ hookSupport .afterHooks (flagValueType , hookContext , FlagEvaluationDetails .builder ().build (), List .of (genericHook ), Map .of ());
45
+ hookSupport .afterAllHooks (flagValueType , hookContext , List .of (genericHook ), Map .of ());
46
+ hookSupport .errorHooks (flagValueType , hookContext , new IllegalStateException ("All fine, just a test" ), List .of (genericHook ), Map .of ());
47
+
48
+ verify (genericHook ).before (any (), any ());
49
+ verify (genericHook ).after (any (), any (), any ());
50
+ verify (genericHook ).finallyAfter (any (), any ());
51
+ verify (genericHook ).error (any (), any (), any ());
52
+ }
53
+
54
+ private Object createDefaultValue (FlagValueType flagValueType ) {
55
+ switch (flagValueType ) {
56
+ case INTEGER :
57
+ return 1 ;
58
+ case BOOLEAN :
59
+ return true ;
60
+ case STRING :
61
+ return "defaultValue" ;
62
+ case OBJECT :
63
+ return "object" ;
64
+ default :
65
+ throw new IllegalArgumentException ();
66
+ }
67
+ }
68
+
33
69
private EvaluationContext evaluationContextWithValue (String key , String value ) {
34
70
var result = new EvaluationContext ();
35
71
result .addStringAttribute (key , value );
36
72
return result ;
37
73
}
38
74
39
- private StringHook stringHookMock () {
40
- return spy (StringHook .class );
41
- }
42
-
43
75
}
0 commit comments