@@ -1723,6 +1723,103 @@ public void fetchQualifiedSegmentsAsync() throws InterruptedException {
1723
1723
assertEquals (Arrays .asList ("segment1" , "segment2" ), userContext .getQualifiedSegments ());
1724
1724
}
1725
1725
1726
+ @ Test
1727
+ public void fetchQualifiedSegmentsAsyncWithVUID () throws InterruptedException {
1728
+ ODPEventManager mockODPEventManager = mock (ODPEventManager .class );
1729
+ ODPApiManager mockAPIManager = mock (ODPApiManager .class );
1730
+ ODPSegmentManager mockODPSegmentManager = spy (new ODPSegmentManager (mockAPIManager ));
1731
+ ODPManager mockODPManager = mock (ODPManager .class );
1732
+
1733
+ doAnswer (
1734
+ invocation -> {
1735
+ ODPSegmentManager .ODPSegmentFetchCallback callback = invocation .getArgumentAt (2 , ODPSegmentManager .ODPSegmentFetchCallback .class );
1736
+ callback .onCompleted (Arrays .asList ("segment1" , "segment2" ));
1737
+ return null ;
1738
+ }
1739
+ ).when (mockODPSegmentManager ).getQualifiedSegments (any (), eq ("vuid_f6db3d60ba3a493d8e41bc995bb" ), (ODPSegmentManager .ODPSegmentFetchCallback ) any (), any ());
1740
+ Mockito .when (mockODPManager .getEventManager ()).thenReturn (mockODPEventManager );
1741
+ Mockito .when (mockODPManager .getSegmentManager ()).thenReturn (mockODPSegmentManager );
1742
+
1743
+ Optimizely optimizely = Optimizely .builder ()
1744
+ .withDatafile (datafile )
1745
+ .withEventProcessor (new ForwardingEventProcessor (eventHandler , null ))
1746
+ .withODPManager (mockODPManager )
1747
+ .build ();
1748
+
1749
+ OptimizelyUserContext userContext = optimizely .createUserContext ("vuid_f6db3d60ba3a493d8e41bc995bb" );
1750
+
1751
+ CountDownLatch countDownLatch = new CountDownLatch (1 );
1752
+ userContext .fetchQualifiedSegments ((Boolean isFetchSuccessful ) -> {
1753
+ assertTrue (isFetchSuccessful );
1754
+ countDownLatch .countDown ();
1755
+ });
1756
+
1757
+ countDownLatch .await ();
1758
+ verify (mockODPSegmentManager ).getQualifiedSegments (eq (ODPUserKey .VUID ), eq ("vuid_f6db3d60ba3a493d8e41bc995bb" ), any (ODPSegmentManager .ODPSegmentFetchCallback .class ), eq (Collections .emptyList ()));
1759
+ assertEquals (Arrays .asList ("segment1" , "segment2" ), userContext .getQualifiedSegments ());
1760
+
1761
+ // reset qualified segments
1762
+ userContext .setQualifiedSegments (Collections .emptyList ());
1763
+ CountDownLatch countDownLatch2 = new CountDownLatch (1 );
1764
+ userContext .fetchQualifiedSegments ((Boolean isFetchSuccessful ) -> {
1765
+ assertTrue (isFetchSuccessful );
1766
+ countDownLatch2 .countDown ();
1767
+ }, Collections .singletonList (ODPSegmentOption .RESET_CACHE ));
1768
+
1769
+ countDownLatch2 .await ();
1770
+ verify (mockODPSegmentManager ).getQualifiedSegments (eq (ODPUserKey .VUID ) ,eq ("vuid_f6db3d60ba3a493d8e41bc995bb" ), any (ODPSegmentManager .ODPSegmentFetchCallback .class ), eq (Collections .singletonList (ODPSegmentOption .RESET_CACHE )));
1771
+ assertEquals (Arrays .asList ("segment1" , "segment2" ), userContext .getQualifiedSegments ());
1772
+ }
1773
+
1774
+
1775
+ @ Test
1776
+ public void fetchQualifiedSegmentsAsyncWithUserID () throws InterruptedException {
1777
+ ODPEventManager mockODPEventManager = mock (ODPEventManager .class );
1778
+ ODPApiManager mockAPIManager = mock (ODPApiManager .class );
1779
+ ODPSegmentManager mockODPSegmentManager = spy (new ODPSegmentManager (mockAPIManager ));
1780
+ ODPManager mockODPManager = mock (ODPManager .class );
1781
+
1782
+ doAnswer (
1783
+ invocation -> {
1784
+ ODPSegmentManager .ODPSegmentFetchCallback callback = invocation .getArgumentAt (2 , ODPSegmentManager .ODPSegmentFetchCallback .class );
1785
+ callback .onCompleted (Arrays .asList ("segment1" , "segment2" ));
1786
+ return null ;
1787
+ }
1788
+ ).when (mockODPSegmentManager ).getQualifiedSegments (any (), eq ("f6db3d60ba3a493d8e41bc995bb" ), (ODPSegmentManager .ODPSegmentFetchCallback ) any (), any ());
1789
+ Mockito .when (mockODPManager .getEventManager ()).thenReturn (mockODPEventManager );
1790
+ Mockito .when (mockODPManager .getSegmentManager ()).thenReturn (mockODPSegmentManager );
1791
+
1792
+ Optimizely optimizely = Optimizely .builder ()
1793
+ .withDatafile (datafile )
1794
+ .withEventProcessor (new ForwardingEventProcessor (eventHandler , null ))
1795
+ .withODPManager (mockODPManager )
1796
+ .build ();
1797
+
1798
+ OptimizelyUserContext userContext = optimizely .createUserContext ("f6db3d60ba3a493d8e41bc995bb" );
1799
+
1800
+ CountDownLatch countDownLatch = new CountDownLatch (1 );
1801
+ userContext .fetchQualifiedSegments ((Boolean isFetchSuccessful ) -> {
1802
+ assertTrue (isFetchSuccessful );
1803
+ countDownLatch .countDown ();
1804
+ });
1805
+
1806
+ countDownLatch .await ();
1807
+ verify (mockODPSegmentManager ).getQualifiedSegments (eq (ODPUserKey .FS_USER_ID ), eq ("f6db3d60ba3a493d8e41bc995bb" ), any (ODPSegmentManager .ODPSegmentFetchCallback .class ), eq (Collections .emptyList ()));
1808
+ assertEquals (Arrays .asList ("segment1" , "segment2" ), userContext .getQualifiedSegments ());
1809
+
1810
+ // reset qualified segments
1811
+ userContext .setQualifiedSegments (Collections .emptyList ());
1812
+ CountDownLatch countDownLatch2 = new CountDownLatch (1 );
1813
+ userContext .fetchQualifiedSegments ((Boolean isFetchSuccessful ) -> {
1814
+ assertTrue (isFetchSuccessful );
1815
+ countDownLatch2 .countDown ();
1816
+ }, Collections .singletonList (ODPSegmentOption .RESET_CACHE ));
1817
+
1818
+ countDownLatch2 .await ();
1819
+ verify (mockODPSegmentManager ).getQualifiedSegments (eq (ODPUserKey .FS_USER_ID ) ,eq ("f6db3d60ba3a493d8e41bc995bb" ), any (ODPSegmentManager .ODPSegmentFetchCallback .class ), eq (Collections .singletonList (ODPSegmentOption .RESET_CACHE )));
1820
+ assertEquals (Arrays .asList ("segment1" , "segment2" ), userContext .getQualifiedSegments ());
1821
+ }
1822
+
1726
1823
@ Test
1727
1824
public void fetchQualifiedSegmentsAsyncError () throws InterruptedException {
1728
1825
Optimizely optimizely = Optimizely .builder ()
0 commit comments