Skip to content

Commit f5528d5

Browse files
[FSSDK-9493] fix: Added check in AsyncGetQualifiedSegments to check if userID is fsuserid or vuid (#527)
* Added check in AsyncGetQualifiedSegments to check if userID is fsuserid or vuid * Update unit test and added additional test to verify that proper userKey is getting passed given vuid and userid --------- Co-authored-by: NomanShoaib <m.nomanshoaib09@gmail.com>
1 parent c507649 commit f5528d5

File tree

2 files changed

+105
-4
lines changed

2 files changed

+105
-4
lines changed

core-api/src/main/java/com/optimizely/ab/odp/ODPSegmentManager.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,16 @@ public void getQualifiedSegments(ODPUserKey userKey, String userValue, ODPSegmen
110110
getQualifiedSegments(userKey, userValue, callback, Collections.emptyList());
111111
}
112112

113-
public void getQualifiedSegments(String fsUserId, ODPSegmentFetchCallback callback, List<ODPSegmentOption> segmentOptions) {
114-
getQualifiedSegments(ODPUserKey.FS_USER_ID, fsUserId, callback, segmentOptions);
113+
public void getQualifiedSegments(String userId, ODPSegmentFetchCallback callback, List<ODPSegmentOption> options) {
114+
if (ODPManager.isVuid(userId)) {
115+
getQualifiedSegments(ODPUserKey.VUID, userId, callback, options);
116+
} else {
117+
getQualifiedSegments(ODPUserKey.FS_USER_ID, userId, callback, options);
118+
}
115119
}
116120

117-
public void getQualifiedSegments(String fsUserId, ODPSegmentFetchCallback callback) {
118-
getQualifiedSegments(ODPUserKey.FS_USER_ID, fsUserId, callback, Collections.emptyList());
121+
public void getQualifiedSegments(String userId, ODPSegmentFetchCallback callback) {
122+
getQualifiedSegments(userId, callback, Collections.emptyList());
119123
}
120124

121125
private String getCacheKey(String userKey, String userValue) {

core-api/src/test/java/com/optimizely/ab/OptimizelyUserContextTest.java

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy