@@ -1723,6 +1723,103 @@ public void fetchQualifiedSegmentsAsync() throws InterruptedException {
17231723 assertEquals (Arrays .asList ("segment1" , "segment2" ), userContext .getQualifiedSegments ());
17241724 }
17251725
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+
17261823 @ Test
17271824 public void fetchQualifiedSegmentsAsyncError () throws InterruptedException {
17281825 Optimizely optimizely = Optimizely .builder ()
0 commit comments