Skip to content

fix(ats): convert graphQL query for fetchQualifiedSegments with vuid #504

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,10 @@ public void identifyUser(@Nullable String vuid, @Nullable String userId) {
identifiers.put(ODPUserKey.VUID.getKeyString(), vuid);
}
if (userId != null) {
if (isVuid(userId)) {
identifiers.put(ODPUserKey.VUID.getKeyString(), userId);
if (ODPManager.isVuid(userId)) {
identifiers.put(ODPUserKey.VUID.getKeyString(), userId);
} else {
identifiers.put(ODPUserKey.FS_USER_ID.getKeyString(), userId);
identifiers.put(ODPUserKey.FS_USER_ID.getKeyString(), userId);
}
}
ODPEvent event = new ODPEvent("fullstack", "identified", identifiers, null);
Expand Down Expand Up @@ -153,10 +153,6 @@ protected Map<String, String> augmentCommonIdentifiers(Map<String, String> sourc
return identifiers;
}

private boolean isVuid(String userId) {
return userId.startsWith("vuid_");
}

private void processEvent(ODPEvent event) {
if (!isRunning) {
logger.warn("Failed to Process ODP Event. ODPEventManager is not running");
Expand Down
4 changes: 4 additions & 0 deletions core-api/src/main/java/com/optimizely/ab/odp/ODPManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ public void close() {
eventManager.stop();
}

public static boolean isVuid(String userId) {
return userId.startsWith("vuid_");
}

public static Builder builder() {
return new Builder();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,15 @@ public ODPSegmentManager(ODPApiManager apiManager, Integer cacheSize, Integer ca
this.segmentsCache = new DefaultLRUCache<>(cacheSize, cacheTimeoutSeconds);
}

public List<String> getQualifiedSegments(String fsUserId) {
return getQualifiedSegments(ODPUserKey.FS_USER_ID, fsUserId, Collections.emptyList());
}
public List<String> getQualifiedSegments(String fsUserId, List<ODPSegmentOption> options) {
return getQualifiedSegments(ODPUserKey.FS_USER_ID, fsUserId, options);
public List<String> getQualifiedSegments(String userId) {
return getQualifiedSegments(userId, Collections.emptyList());
}
public List<String> getQualifiedSegments(String userId, List<ODPSegmentOption> options) {
if (ODPManager.isVuid(userId)) {
return getQualifiedSegments(ODPUserKey.VUID, userId, options);
} else {
return getQualifiedSegments(ODPUserKey.FS_USER_ID, userId, options);
}
}

public List<String> getQualifiedSegments(ODPUserKey userKey, String userValue) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,64 @@ public void prepareCorrectPayloadForIdentifyUser() throws InterruptedException {
}
}

@Test
public void identifyUserWithVuidAndUserId() throws InterruptedException {
ODPEventManager eventManager = spy(new ODPEventManager(mockApiManager));
ArgumentCaptor<ODPEvent> captor = ArgumentCaptor.forClass(ODPEvent.class);

eventManager.identifyUser("vuid_123", "test-user");
verify(eventManager, times(1)).sendEvent(captor.capture());

ODPEvent event = captor.getValue();
Map<String, String> identifiers = event.getIdentifiers();
assertEquals(identifiers.size(), 2);
assertEquals(identifiers.get("vuid"), "vuid_123");
assertEquals(identifiers.get("fs_user_id"), "test-user");
}

@Test
public void identifyUserWithVuidOnly() throws InterruptedException {
ODPEventManager eventManager = spy(new ODPEventManager(mockApiManager));
ArgumentCaptor<ODPEvent> captor = ArgumentCaptor.forClass(ODPEvent.class);

eventManager.identifyUser("vuid_123", null);
verify(eventManager, times(1)).sendEvent(captor.capture());

ODPEvent event = captor.getValue();
Map<String, String> identifiers = event.getIdentifiers();
assertEquals(identifiers.size(), 1);
assertEquals(identifiers.get("vuid"), "vuid_123");
}

@Test
public void identifyUserWithUserIdOnly() throws InterruptedException {
ODPEventManager eventManager = spy(new ODPEventManager(mockApiManager));
ArgumentCaptor<ODPEvent> captor = ArgumentCaptor.forClass(ODPEvent.class);

eventManager.identifyUser(null, "test-user");
verify(eventManager, times(1)).sendEvent(captor.capture());

ODPEvent event = captor.getValue();
Map<String, String> identifiers = event.getIdentifiers();
assertEquals(identifiers.size(), 1);
assertEquals(identifiers.get("fs_user_id"), "test-user");
}

@Test
public void identifyUserWithVuidAsUserId() throws InterruptedException {
ODPEventManager eventManager = spy(new ODPEventManager(mockApiManager));
ArgumentCaptor<ODPEvent> captor = ArgumentCaptor.forClass(ODPEvent.class);

eventManager.identifyUser(null, "vuid_123");
verify(eventManager, times(1)).sendEvent(captor.capture());

ODPEvent event = captor.getValue();
Map<String, String> identifiers = event.getIdentifiers();
assertEquals(identifiers.size(), 1);
// SDK will convert userId to vuid when userId has a valid vuid format.
assertEquals(identifiers.get("vuid"), "vuid_123");
}

@Test
public void applyUpdatedODPConfigWhenAvailable() throws InterruptedException {
Mockito.reset(mockApiManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,12 @@ public void shouldGetSegmentManager() {
odpManager = ODPManager.builder().withApiManager(mockApiManager).build();
assertNotNull(odpManager.getSegmentManager());
}

@Test
public void isVuid() {
assertTrue(ODPManager.isVuid("vuid_123"));
assertFalse(ODPManager.isVuid("vuid123"));
assertFalse(ODPManager.isVuid("any_123"));
assertFalse(ODPManager.isVuid(""));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -398,4 +398,20 @@ public void noSegmentsInProjectAsync() throws InterruptedException {

logbackVerifier.expectMessage(Level.DEBUG, "No Segments are used in the project, Not Fetching segments. Returning empty list");
}

@Test
public void getQualifiedSegmentsWithUserId() {
ODPSegmentManager segmentManager = spy(new ODPSegmentManager(mockApiManager, mockCache));
segmentManager.getQualifiedSegments("test-user");
verify(segmentManager).getQualifiedSegments(ODPUserKey.FS_USER_ID, "test-user", Collections.emptyList());
}

@Test
public void getQualifiedSegmentsWithVuid() {
ODPSegmentManager segmentManager = spy(new ODPSegmentManager(mockApiManager, mockCache));
segmentManager.getQualifiedSegments("vuid_123");
// SDK will convert userId to vuid when userId has a valid vuid format.
verify(segmentManager).getQualifiedSegments(ODPUserKey.VUID, "vuid_123", Collections.emptyList());
}

}