package com.constellio.sdk.tests;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.internal.AssumptionViolatedException;
import com.constellio.data.utils.dev.Toggle;
import com.constellio.data.utils.dev.Toggle.AvailableToggle;
public class ToggleTestFeature {
Map<String, String> sdkProperties;
private static List<AvailableToggle> enabledToggles = null;
public ToggleTestFeature(Map<String, String> sdkProperties) {
this.sdkProperties = sdkProperties;
if (enabledToggles == null) {
String togglePropertyValue = sdkProperties.get("toggles");
loadToggles(togglePropertyValue);
}
for (AvailableToggle toggle : enabledToggles) {
toggle.enable();
}
}
private static void loadToggles(String togglePropertyValue) {
enabledToggles = new ArrayList<>();
if ("all".equalsIgnoreCase(togglePropertyValue)) {
enabledToggles = Toggle.getAllAvailable();
} else if (togglePropertyValue != null) {
for (String enabledToggleId : togglePropertyValue.split(",")) {
AvailableToggle enabledToggle = Toggle.getToggle(enabledToggleId);
if (enabledToggle != null) {
enabledToggles.add(enabledToggle);
}
}
}
}
public ToggleCondition onlyWhen(AvailableToggle toggle) {
ToggleCondition toggleCondition = new ToggleCondition();
toggleCondition.toggle = toggle;
return toggleCondition;
}
public static class ToggleCondition {
AvailableToggle toggle;
public void isEnabled() {
if (!toggle.isEnabled()) {
throw new AssumptionViolatedException("Test is skipped because of disabled toggles");
}
}
}
}