Skip to content

Commit 84aa0c3

Browse files
committed
Evaluation & config in Android
1 parent 6fd9433 commit 84aa0c3

File tree

5 files changed

+145
-13
lines changed

5 files changed

+145
-13
lines changed

splitio_android/android/src/main/java/io/split/splitio/EvaluationWrapper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,12 @@ interface EvaluationWrapper {
1313
SplitResult getTreatmentWithConfig(String matchingKey, String bucketingKey, String splitName, Map<String, Object> attributes);
1414

1515
Map<String, SplitResult> getTreatmentsWithConfig(String matchingKey, String bucketingKey, List<String> splitNames, Map<String, Object> attributes);
16+
17+
Map<String, String> getTreatmentsByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes);
18+
19+
Map<String, String> getTreatmentsByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes);
20+
21+
Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes);
22+
23+
Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes);
1624
}

splitio_android/android/src/main/java/io/split/splitio/SplitClientConfigHelper.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class SplitClientConfigHelper {
3939
private static final String SYNC_CONFIG = "syncConfig";
4040
private static final String SYNC_CONFIG_NAMES = "syncConfigNames";
4141
private static final String SYNC_CONFIG_PREFIXES = "syncConfigPrefixes";
42+
private static final String SYNC_CONFIG_SETS = "syncConfigFlagSets";
4243
private static final String IMPRESSIONS_MODE = "impressionsMode";
4344
private static final String SYNC_ENABLED = "syncEnabled";
4445
private static final String USER_CONSENT = "userConsent";
@@ -152,14 +153,19 @@ static SplitClientConfig fromMap(@NonNull Map<String, Object> configurationMap,
152153
if (syncConfig != null) {
153154
List<String> names = syncConfig.get(SYNC_CONFIG_NAMES);
154155
List<String> prefixes = syncConfig.get(SYNC_CONFIG_PREFIXES);
156+
List<String> flagSets = syncConfig.get(SYNC_CONFIG_SETS);
155157

156158
SyncConfig.Builder syncConfigBuilder = SyncConfig.builder();
157-
if (names != null && !names.isEmpty()) {
158-
syncConfigBuilder.addSplitFilter(SplitFilter.byName(names));
159-
}
159+
if (flagSets != null && !flagSets.isEmpty()) {
160+
syncConfigBuilder.addSplitFilter(SplitFilter.bySet(flagSets));
161+
} else {
162+
if (names != null && !names.isEmpty()) {
163+
syncConfigBuilder.addSplitFilter(SplitFilter.byName(names));
164+
}
160165

161-
if (prefixes != null && !prefixes.isEmpty()) {
162-
syncConfigBuilder.addSplitFilter(SplitFilter.byPrefix(prefixes));
166+
if (prefixes != null && !prefixes.isEmpty()) {
167+
syncConfigBuilder.addSplitFilter(SplitFilter.byPrefix(prefixes));
168+
}
163169
}
164170

165171
builder.syncConfig(syncConfigBuilder.build());

splitio_android/android/src/main/java/io/split/splitio/SplitWrapperImpl.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,46 @@ public Map<String, SplitResult> getTreatmentsWithConfig(String matchingKey, Stri
127127
return client.getTreatmentsWithConfig(splitNames, attributes);
128128
}
129129

130+
@Override
131+
public Map<String, String> getTreatmentsByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes) {
132+
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
133+
if (client == null) {
134+
return new HashMap<>();
135+
}
136+
137+
return client.getTreatmentsByFlagSet(flagSet, attributes);
138+
}
139+
140+
@Override
141+
public Map<String, String> getTreatmentsByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes) {
142+
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
143+
if (client == null) {
144+
return new HashMap<>();
145+
}
146+
147+
return client.getTreatmentsByFlagSets(flagSets, attributes);
148+
}
149+
150+
@Override
151+
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes) {
152+
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
153+
if (client == null) {
154+
return new HashMap<>();
155+
}
156+
157+
return client.getTreatmentsWithConfigByFlagSet(flagSet, attributes);
158+
}
159+
160+
@Override
161+
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes) {
162+
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
163+
if (client == null) {
164+
return new HashMap<>();
165+
}
166+
167+
return client.getTreatmentsWithConfigByFlagSets(flagSets, attributes);
168+
}
169+
130170
@Override
131171
public boolean setAttribute(String matchingKey, @Nullable String bucketingKey, String attributeName, Object value) {
132172
SplitClient client = getInitializedClient(matchingKey, bucketingKey);

splitio_android/android/src/test/java/io/split/splitio/SplitClientConfigHelperTest.java

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@ public void configValuesAreMappedCorrectly() {
4444
configValues.put("authServiceEndpoint", "sseAuthServiceEndpoint.split.io");
4545
configValues.put("streamingServiceEndpoint", "streamingServiceEndpoint.split.io");
4646
configValues.put("telemetryServiceEndpoint", "telemetryServiceEndpoint.split.io");
47-
Map<String, List<String>> syncConfigMap = new HashMap<>();
48-
syncConfigMap.put("syncConfigNames", Arrays.asList("split1", "split2"));
49-
syncConfigMap.put("syncConfigPrefixes", Arrays.asList("split_", "my_split_"));
50-
configValues.put("syncConfig", syncConfigMap);
5147
configValues.put("impressionsMode", "none");
5248
configValues.put("syncEnabled", false);
5349
configValues.put("userConsent", "declined");
@@ -73,10 +69,6 @@ public void configValuesAreMappedCorrectly() {
7369
assertEquals("sseAuthServiceEndpoint.split.io", splitClientConfig.authServiceUrl());
7470
assertEquals("streamingServiceEndpoint.split.io", splitClientConfig.streamingServiceUrl());
7571
assertEquals("telemetryServiceEndpoint.split.io", splitClientConfig.telemetryEndpoint());
76-
assertEquals(Arrays.asList("split1", "split2"), splitClientConfig.syncConfig().getFilters().get(0).getValues());
77-
assertEquals(SplitFilter.Type.BY_NAME, splitClientConfig.syncConfig().getFilters().get(0).getType());
78-
assertEquals(Arrays.asList("split_", "my_split_"), splitClientConfig.syncConfig().getFilters().get(1).getValues());
79-
assertEquals(SplitFilter.Type.BY_PREFIX, splitClientConfig.syncConfig().getFilters().get(1).getType());
8072
assertEquals(ImpressionsMode.NONE, splitClientConfig.impressionsMode());
8173
assertFalse(splitClientConfig.syncEnabled());
8274
assertEquals(UserConsent.DECLINED, splitClientConfig.userConsent());
@@ -151,4 +143,39 @@ public void impressionsModeValuesAreMappedCorrectly() {
151143
assertEquals(ImpressionsMode.NONE, noneConfig.impressionsMode());
152144
assertEquals(ImpressionsMode.OPTIMIZED, optimizedConfig.impressionsMode());
153145
}
146+
147+
@Test
148+
public void syncConfigWithoutFlagSetsIsMappedCorrectly() {
149+
Map<String, Object> configValues = new HashMap<>();
150+
Map<String, List<String>> syncConfigMap = new HashMap<>();
151+
syncConfigMap.put("syncConfigNames", Arrays.asList("split1", "split2"));
152+
syncConfigMap.put("syncConfigPrefixes", Arrays.asList("split_", "my_split_"));
153+
configValues.put("syncConfig", syncConfigMap);
154+
155+
SplitClientConfig splitClientConfig = SplitClientConfigHelper
156+
.fromMap(configValues, mock(ImpressionListener.class));
157+
158+
assertEquals(2, splitClientConfig.syncConfig().getFilters().size());
159+
assertEquals(Arrays.asList("split1", "split2"), splitClientConfig.syncConfig().getFilters().get(0).getValues());
160+
assertEquals(SplitFilter.Type.BY_NAME, splitClientConfig.syncConfig().getFilters().get(0).getType());
161+
assertEquals(Arrays.asList("split_", "my_split_"), splitClientConfig.syncConfig().getFilters().get(1).getValues());
162+
assertEquals(SplitFilter.Type.BY_PREFIX, splitClientConfig.syncConfig().getFilters().get(1).getType());
163+
}
164+
165+
@Test
166+
public void syncConfigWithFlagSetsIsMappedCorrectly() {
167+
Map<String, Object> configValues = new HashMap<>();
168+
Map<String, List<String>> syncConfigMap = new HashMap<>();
169+
syncConfigMap.put("syncConfigNames", Arrays.asList("split1", "split2"));
170+
syncConfigMap.put("syncConfigPrefixes", Arrays.asList("split_", "my_split_"));
171+
syncConfigMap.put("syncConfigFlagSets", Arrays.asList("set_1", "set_2"));
172+
configValues.put("syncConfig", syncConfigMap);
173+
174+
SplitClientConfig splitClientConfig = SplitClientConfigHelper
175+
.fromMap(configValues, mock(ImpressionListener.class));
176+
177+
assertEquals(1, splitClientConfig.syncConfig().getFilters().size());
178+
assertEquals(Arrays.asList("set_1", "set_2"), splitClientConfig.syncConfig().getFilters().get(0).getValues());
179+
assertEquals(SplitFilter.Type.BY_SET, splitClientConfig.syncConfig().getFilters().get(0).getType());
180+
}
154181
}

splitio_android/android/src/test/java/io/split/splitio/SplitWrapperImplTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Arrays;
1616
import java.util.Collections;
1717
import java.util.HashMap;
18+
import java.util.List;
1819
import java.util.Map;
1920
import java.util.Set;
2021

@@ -100,6 +101,56 @@ public void testGetTreatmentsWithConfig() {
100101
verify(clientMock).getTreatmentsWithConfig(Arrays.asList("split1", "split2"), Collections.singletonMap("age", 50));
101102
}
102103

104+
@Test
105+
public void testGetTreatmentsByFlagSet() {
106+
SplitClient clientMock = mock(SplitClient.class);
107+
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
108+
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);
109+
110+
Map<String, Object> attrs = Collections.singletonMap("age", 50);
111+
mSplitWrapper.getTreatmentsByFlagSet("key", null, "flag-set", attrs);
112+
113+
verify(clientMock).getTreatmentsByFlagSet("flag-set", attrs);
114+
}
115+
116+
@Test
117+
public void testGetTreatmentsByFlagSets() {
118+
SplitClient clientMock = mock(SplitClient.class);
119+
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
120+
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);
121+
122+
Map<String, Object> attrs = Collections.singletonMap("age", 50);
123+
List<String> sets = Arrays.asList("set_1", "set_2");
124+
mSplitWrapper.getTreatmentsByFlagSets("key", null, sets, attrs);
125+
126+
verify(clientMock).getTreatmentsByFlagSets(sets, attrs);
127+
}
128+
129+
@Test
130+
public void testGetTreatmentsWithConfigByFlagSet() {
131+
SplitClient clientMock = mock(SplitClient.class);
132+
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
133+
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);
134+
135+
Map<String, Object> attrs = Collections.singletonMap("age", 50);
136+
mSplitWrapper.getTreatmentsWithConfigByFlagSet("key", null,"set_1", attrs);
137+
138+
verify(clientMock).getTreatmentsWithConfigByFlagSet("set_1", attrs);
139+
}
140+
141+
@Test
142+
public void testGetTreatmentsWithConfigByFlagSets() {
143+
SplitClient clientMock = mock(SplitClient.class);
144+
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
145+
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);
146+
147+
Map<String, Object> attrs = Collections.singletonMap("age", 50);
148+
List<String> sets = Arrays.asList("set_1", "set_2");
149+
mSplitWrapper.getTreatmentsWithConfigByFlagSets("key", null, sets, attrs);
150+
151+
verify(clientMock).getTreatmentsWithConfigByFlagSets(sets, attrs);
152+
}
153+
103154
@Test
104155
public void testTrack() {
105156
SplitClient clientMock = mock(SplitClient.class);

0 commit comments

Comments
 (0)