Skip to content
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
2 changes: 1 addition & 1 deletion core-api/src/main/java/com/optimizely/ab/Optimizely.java
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,7 @@ public List<String> getEnabledFeatures(@Nonnull String userId,@Nonnull Map<Strin
if(isFeatureEnabled(featureKey, userId, attributes))
enabledFeaturesList.add(featureKey);
}

Collections.sort(enabledFeaturesList);
return enabledFeaturesList;
}

Expand Down
31 changes: 31 additions & 0 deletions core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import ch.qos.logback.classic.Level;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Ordering;
import com.optimizely.ab.bucketing.Bucketer;
import com.optimizely.ab.bucketing.DecisionService;
import com.optimizely.ab.bucketing.FeatureDecision;
Expand Down Expand Up @@ -3633,6 +3634,36 @@ public void getEnabledFeatureWithValidUserId() throws ConfigParseException{

}

/**
* Verify {@link Optimizely#getEnabledFeatures(String, Map)} calls into
* {@link Optimizely#isFeatureEnabled(String, String, Map)} for each featureFlag
* return sorted List of FeatureFlags
* Also checks that the orignal list directly from projectConfig is unsorted
*/
@Test
public void getEnabledFeatureCheckingListIsSorted() throws ConfigParseException{
assumeTrue(datafileVersion >= Integer.parseInt(ProjectConfig.Version.V4.toString()));

Optimizely spyOptimizely = spy(Optimizely.builder(validDatafile, mockEventHandler)
.withConfig(validProjectConfig)
.build());
ArrayList<String> featureFlagsSortedList = (ArrayList<String>) spyOptimizely.getEnabledFeatures(genericUserId,
new HashMap<String, String>());
assertFalse(featureFlagsSortedList.isEmpty());

//To get Unsorted list directly from project config
List<String> unSortedFeaturesListFromProjectConfig = new ArrayList<String>();
for (FeatureFlag featureFlag : spyOptimizely.projectConfig.getFeatureFlags()){
String featureKey = featureFlag.getKey();
unSortedFeaturesListFromProjectConfig.add(featureKey);
}

//unSortedFeaturesListFromProjectConfig will retain only the elements which are also contained in featureFlagsSortedList.
unSortedFeaturesListFromProjectConfig.retainAll(featureFlagsSortedList);
assertFalse(Ordering.natural().isOrdered(unSortedFeaturesListFromProjectConfig));

assertTrue(Ordering.natural().isOrdered(featureFlagsSortedList));
}

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