[AB-163] fixing printing all possible feature modes in case an unknown one was provided for enableMode/disableMode

This commit is contained in:
Sheldan
2021-09-10 00:21:30 +02:00
parent db856f2647
commit 0646efe33d
7 changed files with 31 additions and 15 deletions

View File

@@ -45,7 +45,7 @@ public class DisableMode extends AbstractConditionableCommand {
String featureName = (String) commandContext.getParameters().getParameters().get(0);
String modeName = (String) commandContext.getParameters().getParameters().get(1);
FeatureDefinition featureDefinition = featureConfigService.getFeatureEnum(featureName);
FeatureMode featureMode = featureModeService.getFeatureModeForKey(modeName);
FeatureMode featureMode = featureModeService.getFeatureModeForKey(featureName, modeName);
AServer server = serverManagementService.loadServer(commandContext.getGuild());
featureModeService.disableFeatureModeForFeature(featureDefinition, server, featureMode);
return CommandResult.fromSuccess();

View File

@@ -45,7 +45,7 @@ public class EnableMode extends AbstractConditionableCommand {
String featureName = (String) commandContext.getParameters().getParameters().get(0);
String modeName = (String) commandContext.getParameters().getParameters().get(1);
FeatureDefinition featureDefinition = featureConfigService.getFeatureEnum(featureName);
FeatureMode featureMode = featureModeService.getFeatureModeForKey(modeName);
FeatureMode featureMode = featureModeService.getFeatureModeForKey(featureName, modeName);
AServer server = serverManagementService.loadServer(commandContext.getGuild().getIdLong());
featureModeService.enableFeatureModeForFeature(featureDefinition, server, featureMode);
return CommandResult.fromSuccess();

View File

@@ -18,6 +18,7 @@ import net.dv8tion.jda.api.entities.Guild;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -46,6 +47,8 @@ public class FeatureModeServiceBean implements FeatureModeService {
@Autowired
private ServerManagementService serverManagementService;
private HashMap<String, List<String>> featureModes = new HashMap<>();
@Override
public void enableFeatureModeForFeature(FeatureDefinition featureDefinition, AServer server, FeatureMode mode) {
setOrCreateFeatureMode(featureDefinition, server, mode, true);
@@ -107,19 +110,23 @@ public class FeatureModeServiceBean implements FeatureModeService {
}
@Override
public FeatureMode getFeatureModeForKey(String key) {
return getAllAvailableFeatureModes().stream().filter(mode -> mode.getKey().equalsIgnoreCase(key)).findAny().orElseThrow(() -> new FeatureModeNotFoundException(key, getFeatureModesAsStrings()));
public FeatureMode getFeatureModeForKey(String featureKey, String featureModeKey) {
return getAllAvailableFeatureModes()
.stream()
.filter(mode -> mode.getKey().equalsIgnoreCase(featureModeKey))
.findAny()
.orElseThrow(() -> new FeatureModeNotFoundException(featureModeKey, getFeatureModesAsStrings(featureKey)));
}
@Override
public List<FeatureMode> getAllAvailableFeatureModes() {
List<FeatureMode> featureModes = new ArrayList<>();
featureConfigService.getAllFeatureConfigs().forEach(featureConfig -> featureModes.addAll(featureConfig.getAvailableModes()));
return featureModes;
List<FeatureMode> fullFeatureModes = new ArrayList<>();
featureConfigService.getAllFeatureConfigs().forEach(featureConfig -> fullFeatureModes.addAll(featureConfig.getAvailableModes()));
return fullFeatureModes;
}
private List<String> getFeatureModesAsStrings() {
return getAllAvailableFeatureModes().stream().map(FeatureMode::getKey).collect(Collectors.toList());
private List<String> getFeatureModesAsStrings(String featureKey) {
return featureModes.get(featureKey);
}
@Override
@@ -199,4 +206,13 @@ public class FeatureModeServiceBean implements FeatureModeService {
}
@PostConstruct
public void postConstruct() {
featureConfigService.getAllFeatureConfigs().forEach(featureConfig -> {
List<String> modes = new ArrayList<>();
featureConfig.getAvailableModes().forEach(featureMode -> modes.add(featureMode.getKey()));
featureModes.put(featureConfig.getFeature().getKey(), modes);
});
}
}

View File

@@ -46,7 +46,7 @@ public class DisableFeatureModeTest {
FeatureDefinition featureDefinition = Mockito.mock(FeatureDefinition.class);
when(featureConfigService.getFeatureEnum(featureName)).thenReturn(featureDefinition);
FeatureMode featureMode = Mockito.mock(FeatureMode.class);
when(featureModeService.getFeatureModeForKey(modeName)).thenReturn(featureMode);
when(featureModeService.getFeatureModeForKey(featureName, modeName)).thenReturn(featureMode);
CommandContext context = CommandTestUtilities.getWithParameters(Arrays.asList(featureName, modeName));
AServer server = Mockito.mock(AServer.class);
when(serverManagementService.loadServer(context.getGuild())).thenReturn(server);
@@ -70,7 +70,7 @@ public class DisableFeatureModeTest {
String modeName = "mode";
FeatureDefinition featureDefinition = Mockito.mock(FeatureDefinition.class);
when(featureConfigService.getFeatureEnum(featureName)).thenReturn(featureDefinition);
when(featureModeService.getFeatureModeForKey(modeName)).thenThrow(new FeatureModeNotFoundException(modeName, new ArrayList<>()));
when(featureModeService.getFeatureModeForKey(featureName, modeName)).thenThrow(new FeatureModeNotFoundException(modeName, new ArrayList<>()));
CommandContext context = CommandTestUtilities.getWithParameters(Arrays.asList(featureName, modeName));
testUnit.execute(context);
}

View File

@@ -49,7 +49,7 @@ public class EnableFeatureModeTest {
FeatureDefinition featureDefinition = Mockito.mock(FeatureDefinition.class);
when(featureConfigService.getFeatureEnum(featureName)).thenReturn(featureDefinition);
FeatureMode featureMode = Mockito.mock(FeatureMode.class);
when(featureModeService.getFeatureModeForKey(modeName)).thenReturn(featureMode);
when(featureModeService.getFeatureModeForKey(featureName, modeName)).thenReturn(featureMode);
CommandContext context = CommandTestUtilities.getWithParameters(Arrays.asList(featureName, modeName));
AServer server = Mockito.mock(AServer.class);
when(context.getGuild().getIdLong()).thenReturn(SERVER_ID);
@@ -74,7 +74,7 @@ public class EnableFeatureModeTest {
String modeName = "mode";
FeatureDefinition featureDefinition = Mockito.mock(FeatureDefinition.class);
when(featureConfigService.getFeatureEnum(featureName)).thenReturn(featureDefinition);
when(featureModeService.getFeatureModeForKey(modeName)).thenThrow(new FeatureModeNotFoundException(modeName, new ArrayList<>()));
when(featureModeService.getFeatureModeForKey(featureName, modeName)).thenThrow(new FeatureModeNotFoundException(modeName, new ArrayList<>()));
CommandContext context = CommandTestUtilities.getWithParameters(Arrays.asList(featureName, modeName));
testUnit.execute(context);
}

View File

@@ -158,7 +158,7 @@ public class FeatureModeServiceBeanTest {
FeatureMode featureMode2 = Mockito.mock(FeatureMode.class);
when(featureConfig1.getAvailableModes()).thenReturn(Arrays.asList(featureMode, featureMode2));
when(featureConfigService.getAllFeatureConfigs()).thenReturn(Arrays.asList(featureConfig1));
FeatureMode featureModeForKey = testUnit.getFeatureModeForKey(FEATURE_MODE);
FeatureMode featureModeForKey = testUnit.getFeatureModeForKey(FEATURE_NAME, FEATURE_MODE);
Assert.assertEquals(featureMode, featureModeForKey);
}

View File

@@ -19,7 +19,7 @@ public interface FeatureModeService {
boolean featureModeActive(FeatureDefinition featureDefinition, Long serverId, FeatureMode mode);
boolean featureModeActive(FeatureDefinition featureDefinition, Guild guild, FeatureMode mode);
void validateActiveFeatureMode(Long serverId, FeatureDefinition featureDefinition, FeatureMode mode);
FeatureMode getFeatureModeForKey(String key);
FeatureMode getFeatureModeForKey(String feature, String modeKey);
List<FeatureMode> getAllAvailableFeatureModes();
List<FeatureModeDisplay> getEffectiveFeatureModes(AServer server);
List<FeatureModeDisplay> getEffectiveFeatureModes(AServer server, AFeature feature);