99import org .junit .jupiter .api .Test ;
1010
1111import static org .mockito .Mockito .*;
12+
13+ import org .awaitility .Awaitility ;
14+
1215import static org .junit .jupiter .api .Assertions .*;
1316
1417public class ProviderTest {
@@ -31,19 +34,24 @@ public void itCanDoABooleanEvaluation() {
3134 EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
3235
3336 when (mockedLdClient .boolVariationDetail ("the-key" , LDContext .create ("user-key" ), false ))
34- .thenReturn (EvaluationDetail .fromValue (true , 12 , EvaluationReason .fallthrough ()));
37+ .thenReturn (EvaluationDetail .fromValue (true , 12 , EvaluationReason .fallthrough ()));
3538
3639 OpenFeatureAPI .getInstance ().setProvider (ldProvider );
3740
41+ Awaitility .await ().forever ().until (() -> OpenFeatureAPI
42+ .getInstance ()
43+ .getClient ()
44+ .getBooleanValue ("the-key" , false , evaluationContext ));
45+
3846 assertTrue (OpenFeatureAPI
39- .getInstance ()
40- .getClient ()
41- .getBooleanValue ("the-key" , false , evaluationContext ));
47+ .getInstance ()
48+ .getClient ()
49+ .getBooleanValue ("the-key" , false , evaluationContext ));
4250
4351 FlagEvaluationDetails <Boolean > detailed = OpenFeatureAPI
44- .getInstance ()
45- .getClient ()
46- .getBooleanDetails ("the-key" , false , evaluationContext );
52+ .getInstance ()
53+ .getClient ()
54+ .getBooleanDetails ("the-key" , false , evaluationContext );
4755
4856 assertEquals (true , detailed .getValue ());
4957 assertEquals ("12" , detailed .getVariant ());
@@ -55,20 +63,25 @@ public void itCanDoAStringEvaluation() {
5563 EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
5664
5765 when (mockedLdClient .stringVariationDetail ("the-key" , LDContext .create ("user-key" ), "default" ))
58- .thenReturn (EvaluationDetail
59- .fromValue ("evaluated" , 17 , EvaluationReason .off ()));
66+ .thenReturn (EvaluationDetail
67+ .fromValue ("evaluated" , 17 , EvaluationReason .off ()));
6068
6169 OpenFeatureAPI .getInstance ().setProvider (ldProvider );
6270
71+ Awaitility .await ().forever ().until (() -> OpenFeatureAPI
72+ .getInstance ()
73+ .getClient ()
74+ .getStringValue ("the-key" , "default" , evaluationContext ).equals ("evaluated" ));
75+
6376 assertEquals ("evaluated" , OpenFeatureAPI
64- .getInstance ()
65- .getClient ()
66- .getStringValue ("the-key" , "default" , evaluationContext ));
77+ .getInstance ()
78+ .getClient ()
79+ .getStringValue ("the-key" , "default" , evaluationContext ));
6780
6881 FlagEvaluationDetails <String > detailed = OpenFeatureAPI
69- .getInstance ()
70- .getClient ()
71- .getStringDetails ("the-key" , "default" , evaluationContext );
82+ .getInstance ()
83+ .getClient ()
84+ .getStringDetails ("the-key" , "default" , evaluationContext );
7285
7386 assertEquals ("evaluated" , detailed .getValue ());
7487 assertEquals ("17" , detailed .getVariant ());
@@ -80,18 +93,24 @@ public void itCanDoADoubleEvaluation() {
8093 EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
8194
8295 when (mockedLdClient .doubleVariationDetail ("the-key" , LDContext .create ("user-key" ), 0.0 ))
83- .thenReturn (EvaluationDetail .fromValue (1.0 , 42 , EvaluationReason .targetMatch ()));
96+ .thenReturn (EvaluationDetail .fromValue (1.0 , 42 , EvaluationReason .targetMatch ()));
8497
8598 OpenFeatureAPI .getInstance ().setProvider (ldProvider );
99+
100+ Awaitility .await ().forever ().until (() -> OpenFeatureAPI
101+ .getInstance ()
102+ .getClient ()
103+ .getDoubleValue ("the-key" , 0.0 , evaluationContext ) != 0.0 );
104+
86105 assertEquals (1.0 , OpenFeatureAPI
87- .getInstance ()
88- .getClient ()
89- .getDoubleValue ("the-key" , 0.0 , evaluationContext ), 0.00001 );
106+ .getInstance ()
107+ .getClient ()
108+ .getDoubleValue ("the-key" , 0.0 , evaluationContext ), 0.00001 );
90109
91110 FlagEvaluationDetails <Double > detailed = OpenFeatureAPI
92- .getInstance ()
93- .getClient ()
94- .getDoubleDetails ("the-key" , 0.0 , evaluationContext );
111+ .getInstance ()
112+ .getClient ()
113+ .getDoubleDetails ("the-key" , 0.0 , evaluationContext );
95114
96115 assertEquals (1.0 , detailed .getValue (), 0.00001 );
97116 assertEquals ("42" , detailed .getVariant ());
@@ -122,8 +141,82 @@ public void itCanDoAValueEvaluation() {
122141 .getObjectDetails ("the-key" , new Value (), evaluationContext );
123142
124143 assertEquals ("aValue" , detailed .getValue ().asStructure ().getValue ("aKey" ).asString ());
125-
126144 assertEquals ("84" , detailed .getVariant ());
127145 assertEquals ("TARGETING_MATCH" , detailed .getReason ());
128146 }
147+
148+ @ Test
149+ public void itCanTrackNoTrackingEventDetails () {
150+ EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
151+ EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter (null );
152+
153+ OpenFeatureAPI .getInstance ().setProvider (ldProvider );
154+
155+ OpenFeatureAPI
156+ .getInstance ()
157+ .getClient ().track ("metric-key" , evaluationContext );
158+
159+ verify (mockedLdClient ).track (
160+ "metric-key" ,
161+ evaluationContextConverter .toLdContext (evaluationContext ));
162+ }
163+
164+ @ Test
165+ public void itCanTrackEmptyTrackingEventDetails () {
166+ EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
167+ EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter (null );
168+
169+ TrackingEventDetails trackingEventDetails = new MutableTrackingEventDetails (null );
170+
171+ OpenFeatureAPI .getInstance ().setProvider (ldProvider );
172+
173+ OpenFeatureAPI
174+ .getInstance ()
175+ .getClient ().track ("metric-key" , evaluationContext , trackingEventDetails );
176+
177+ verify (mockedLdClient ).track (
178+ "metric-key" ,
179+ evaluationContextConverter .toLdContext (evaluationContext ));
180+ }
181+
182+ @ Test
183+ public void itCanTrackTrackingEventDetailsWithNoValue () {
184+ EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
185+ EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter (null );
186+ ValueConverter valueConverter = new ValueConverter (null );
187+
188+ TrackingEventDetails trackingEventDetails = new MutableTrackingEventDetails (null ).add ("currency" , "USD" );
189+
190+ OpenFeatureAPI .getInstance ().setProvider (ldProvider );
191+
192+ OpenFeatureAPI
193+ .getInstance ()
194+ .getClient ().track ("metric-key" , evaluationContext , trackingEventDetails );
195+
196+ verify (mockedLdClient ).trackData (
197+ "metric-key" ,
198+ evaluationContextConverter .toLdContext (evaluationContext ),
199+ valueConverter .toLdValue (new Value (trackingEventDetails )));
200+ }
201+
202+ @ Test
203+ public void itCanTrackFullTrackingEventDetails () {
204+ EvaluationContext evaluationContext = new ImmutableContext ("user-key" );
205+ EvaluationContextConverter evaluationContextConverter = new EvaluationContextConverter (null );
206+ ValueConverter valueConverter = new ValueConverter (null );
207+
208+ TrackingEventDetails trackingEventDetails = new MutableTrackingEventDetails (99.77 ).add ("currency" , "USD" );
209+
210+ OpenFeatureAPI .getInstance ().setProvider (ldProvider );
211+
212+ OpenFeatureAPI
213+ .getInstance ()
214+ .getClient ().track ("metric-key" , evaluationContext , trackingEventDetails );
215+
216+ verify (mockedLdClient ).trackMetric (
217+ "metric-key" ,
218+ evaluationContextConverter .toLdContext (evaluationContext ),
219+ valueConverter .toLdValue (new Value (trackingEventDetails )),
220+ 99.77 );
221+ }
129222}
0 commit comments