Skip to content

Commit cde9777

Browse files
mnoman09mikeproeng37
authored andcommitted
Sorted enabledFeaturesList and added its unit test (#173)
1 parent c43046f commit cde9777

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

core-api/src/main/java/com/optimizely/ab/Optimizely.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ public List<String> getEnabledFeatures(@Nonnull String userId,@Nonnull Map<Strin
609609
if(isFeatureEnabled(featureKey, userId, attributes))
610610
enabledFeaturesList.add(featureKey);
611611
}
612-
612+
Collections.sort(enabledFeaturesList);
613613
return enabledFeaturesList;
614614
}
615615

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

+31
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import ch.qos.logback.classic.Level;
1919
import com.google.common.collect.ImmutableMap;
20+
import com.google.common.collect.Ordering;
2021
import com.optimizely.ab.bucketing.Bucketer;
2122
import com.optimizely.ab.bucketing.DecisionService;
2223
import com.optimizely.ab.bucketing.FeatureDecision;
@@ -3633,6 +3634,36 @@ public void getEnabledFeatureWithValidUserId() throws ConfigParseException{
36333634

36343635
}
36353636

3637+
/**
3638+
* Verify {@link Optimizely#getEnabledFeatures(String, Map)} calls into
3639+
* {@link Optimizely#isFeatureEnabled(String, String, Map)} for each featureFlag
3640+
* return sorted List of FeatureFlags
3641+
* Also checks that the orignal list directly from projectConfig is unsorted
3642+
*/
3643+
@Test
3644+
public void getEnabledFeatureCheckingListIsSorted() throws ConfigParseException{
3645+
assumeTrue(datafileVersion >= Integer.parseInt(ProjectConfig.Version.V4.toString()));
3646+
3647+
Optimizely spyOptimizely = spy(Optimizely.builder(validDatafile, mockEventHandler)
3648+
.withConfig(validProjectConfig)
3649+
.build());
3650+
ArrayList<String> featureFlagsSortedList = (ArrayList<String>) spyOptimizely.getEnabledFeatures(genericUserId,
3651+
new HashMap<String, String>());
3652+
assertFalse(featureFlagsSortedList.isEmpty());
3653+
3654+
//To get Unsorted list directly from project config
3655+
List<String> unSortedFeaturesListFromProjectConfig = new ArrayList<String>();
3656+
for (FeatureFlag featureFlag : spyOptimizely.projectConfig.getFeatureFlags()){
3657+
String featureKey = featureFlag.getKey();
3658+
unSortedFeaturesListFromProjectConfig.add(featureKey);
3659+
}
3660+
3661+
//unSortedFeaturesListFromProjectConfig will retain only the elements which are also contained in featureFlagsSortedList.
3662+
unSortedFeaturesListFromProjectConfig.retainAll(featureFlagsSortedList);
3663+
assertFalse(Ordering.natural().isOrdered(unSortedFeaturesListFromProjectConfig));
3664+
3665+
assertTrue(Ordering.natural().isOrdered(featureFlagsSortedList));
3666+
}
36363667

36373668
/**
36383669
* Verify {@link Optimizely#getEnabledFeatures(String, Map)} calls into

0 commit comments

Comments
 (0)