@@ -145,7 +145,28 @@ public OptimizelyTest(String validDatafile, String noAudienceDatafile) throws Co
145145 }
146146
147147 @ Test
148- public void testClose () throws IOException {
148+ public void testClose () throws Exception {
149+ // Check for AutoCloseable
150+ EventHandler mockAutoCloseableEventHandler = mock (
151+ EventHandler .class ,
152+ withSettings ().extraInterfaces (AutoCloseable .class )
153+ );
154+ ProjectConfigManager mockAutoCloseableProjectConfigManager = mock (
155+ ProjectConfigManager .class ,
156+ withSettings ().extraInterfaces (AutoCloseable .class )
157+ );
158+
159+ Optimizely optimizely = Optimizely .builder ()
160+ .withEventHandler (mockAutoCloseableEventHandler )
161+ .withConfigManager (mockAutoCloseableProjectConfigManager )
162+ .build ();
163+
164+ optimizely .close ();
165+
166+ verify ((AutoCloseable ) mockAutoCloseableEventHandler ).close ();
167+ verify ((AutoCloseable ) mockAutoCloseableProjectConfigManager ).close ();
168+
169+ // Check for Closeable
149170 EventHandler mockCloseableEventHandler = mock (
150171 EventHandler .class ,
151172 withSettings ().extraInterfaces (Closeable .class )
@@ -155,7 +176,7 @@ public void testClose() throws IOException {
155176 withSettings ().extraInterfaces (Closeable .class )
156177 );
157178
158- Optimizely optimizely = Optimizely .builder ()
179+ optimizely = Optimizely .builder ()
159180 .withEventHandler (mockCloseableEventHandler )
160181 .withConfigManager (mockCloseableProjectConfigManager )
161182 .build ();
@@ -167,44 +188,44 @@ public void testClose() throws IOException {
167188 }
168189
169190 @ Test
170- public void testCloseConfigManagerThrowsException () throws IOException {
171- EventHandler mockCloseableEventHandler = mock (
191+ public void testCloseConfigManagerThrowsException () throws Exception {
192+ EventHandler mockAutoCloseableEventHandler = mock (
172193 EventHandler .class ,
173- withSettings ().extraInterfaces (Closeable .class )
194+ withSettings ().extraInterfaces (AutoCloseable .class )
174195 );
175- ProjectConfigManager mockCloseableProjectConfigManager = mock (
196+ ProjectConfigManager mockAutoCloseableProjectConfigManager = mock (
176197 ProjectConfigManager .class ,
177- withSettings ().extraInterfaces (Closeable .class )
198+ withSettings ().extraInterfaces (AutoCloseable .class )
178199 );
179200
180201 Optimizely optimizely = Optimizely .builder ()
181- .withEventHandler (mockCloseableEventHandler )
182- .withConfigManager (mockCloseableProjectConfigManager )
202+ .withEventHandler (mockAutoCloseableEventHandler )
203+ .withConfigManager (mockAutoCloseableProjectConfigManager )
183204 .build ();
184205
185- doThrow (new IOException ()).when ((Closeable ) mockCloseableProjectConfigManager ).close ();
186- logbackVerifier .expectMessage (Level .WARN , "Unexpected exception on trying to close " + mockCloseableProjectConfigManager + "." );
206+ doThrow (new IOException ()).when ((AutoCloseable ) mockAutoCloseableProjectConfigManager ).close ();
207+ logbackVerifier .expectMessage (Level .WARN , "Unexpected exception on trying to close " + mockAutoCloseableProjectConfigManager + "." );
187208 optimizely .close ();
188209 }
189210
190211 @ Test
191- public void testCloseEventHandlerThrowsException () throws IOException {
192- EventHandler mockCloseableEventHandler = mock (
212+ public void testCloseEventHandlerThrowsException () throws Exception {
213+ EventHandler mockAutoCloseableEventHandler = mock (
193214 EventHandler .class ,
194- withSettings ().extraInterfaces (Closeable .class )
215+ withSettings ().extraInterfaces (AutoCloseable .class )
195216 );
196- ProjectConfigManager mockCloseableProjectConfigManager = mock (
217+ ProjectConfigManager mockAutoCloseableProjectConfigManager = mock (
197218 ProjectConfigManager .class ,
198- withSettings ().extraInterfaces (Closeable .class )
219+ withSettings ().extraInterfaces (AutoCloseable .class )
199220 );
200221
201222 Optimizely optimizely = Optimizely .builder ()
202- .withEventHandler (mockCloseableEventHandler )
203- .withConfigManager (mockCloseableProjectConfigManager )
223+ .withEventHandler (mockAutoCloseableEventHandler )
224+ .withConfigManager (mockAutoCloseableProjectConfigManager )
204225 .build ();
205226
206- doThrow (new IOException ()).when ((Closeable ) mockCloseableEventHandler ).close ();
207- logbackVerifier .expectMessage (Level .WARN , "Unexpected exception on trying to close " + mockCloseableEventHandler + "." );
227+ doThrow (new IOException ()).when ((AutoCloseable ) mockAutoCloseableEventHandler ).close ();
228+ logbackVerifier .expectMessage (Level .WARN , "Unexpected exception on trying to close " + mockAutoCloseableEventHandler + "." );
208229 optimizely .close ();
209230 }
210231
@@ -2861,9 +2882,9 @@ public void getEnabledFeaturesWithListenerMultipleFeatureEnabled() throws Except
28612882
28622883 /**
28632884 * Verify {@link Optimizely#getEnabledFeatures(String, Map)} calls into
2864- * {@link Optimizely#isFeatureEnabled(String, String, Map) } for each featureFlag sending
2885+ * {@link DecisionService#getVariationForFeature } for each featureFlag sending
28652886 * userId and emptyMap and Mocked {@link Optimizely#isFeatureEnabled(String, String, Map)}
2866- * to return false so {@link Optimizely#getEnabledFeatures(String, Map)} will
2887+ * to return feature disabled so {@link Optimizely#getEnabledFeatures(String, Map)} will
28672888 * return empty List of FeatureFlags and no notification listener will get called.
28682889 */
28692890 @ Test
@@ -2873,13 +2894,16 @@ public void getEnabledFeaturesWithNoFeatureEnabled() throws Exception {
28732894 isListenerCalled = false ;
28742895 Optimizely spyOptimizely = spy (Optimizely .builder (validDatafile , mockEventHandler )
28752896 .withConfig (validProjectConfig )
2897+ .withDecisionService (mockDecisionService )
28762898 .build ());
2877- doReturn (false ).when (spyOptimizely ).isFeatureEnabled (
2878- any (String .class ),
2879- eq (genericUserId ),
2880- eq (Collections .<String , String >emptyMap ())
2881- );
28822899
2900+ FeatureDecision featureDecision = new FeatureDecision (null , null , FeatureDecision .DecisionSource .ROLLOUT );
2901+ doReturn (featureDecision ).when (mockDecisionService ).getVariationForFeature (
2902+ any (FeatureFlag .class ),
2903+ anyString (),
2904+ anyMapOf (String .class , String .class ),
2905+ any (ProjectConfig .class )
2906+ );
28832907 int notificationId = spyOptimizely .addDecisionNotificationHandler ( decisionNotification -> { });
28842908
28852909 ArrayList <String > featureFlags = (ArrayList <String >) spyOptimizely .getEnabledFeatures (genericUserId ,
@@ -4839,23 +4863,27 @@ public void getEnabledFeatureWithNullUserID() throws ConfigParseException {
48394863
48404864 /**
48414865 * Verify {@link Optimizely#getEnabledFeatures(String, Map)} calls into
4842- * {@link Optimizely#isFeatureEnabled(String, String, Map)} for each featureFlag sending
4843- * userId and emptyMap and Mocked {@link Optimizely#isFeatureEnabled(String, String, Map)}
4844- * to return false so {@link Optimizely#getEnabledFeatures(String, Map)} will
4866+ * {@link DecisionService#getVariationForFeature} to return feature
4867+ * disabled so {@link Optimizely#getEnabledFeatures(String, Map)} will
48454868 * return empty List of FeatureFlags.
48464869 */
48474870 @ Test
4848- public void getEnabledFeatureWithMockIsFeatureEnabledToReturnFalse () throws ConfigParseException {
4871+ public void getEnabledFeatureWithMockDecisionService () throws ConfigParseException {
48494872 assumeTrue (datafileVersion >= Integer .parseInt (ProjectConfig .Version .V4 .toString ()));
48504873
48514874 Optimizely spyOptimizely = spy (Optimizely .builder (validDatafile , mockEventHandler )
48524875 .withConfig (validProjectConfig )
4876+ .withDecisionService (mockDecisionService )
48534877 .build ());
4854- doReturn (false ).when (spyOptimizely ).isFeatureEnabled (
4855- any (String .class ),
4856- eq (genericUserId ),
4857- eq (Collections .<String , String >emptyMap ())
4878+
4879+ FeatureDecision featureDecision = new FeatureDecision (null , null , FeatureDecision .DecisionSource .ROLLOUT );
4880+ doReturn (featureDecision ).when (mockDecisionService ).getVariationForFeature (
4881+ any (FeatureFlag .class ),
4882+ anyString (),
4883+ anyMapOf (String .class , String .class ),
4884+ any (ProjectConfig .class )
48584885 );
4886+
48594887 ArrayList <String > featureFlags = (ArrayList <String >) spyOptimizely .getEnabledFeatures (genericUserId ,
48604888 Collections .<String , String >emptyMap ());
48614889 assertTrue (featureFlags .isEmpty ());
0 commit comments