From 0646efe33dc8b5c54dbde39cf04239e3e2331948 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Fri, 10 Sep 2021 00:21:30 +0200 Subject: [PATCH] [AB-163] fixing printing all possible feature modes in case an unknown one was provided for enableMode/disableMode --- .../commands/config/features/DisableMode.java | 2 +- .../commands/config/features/EnableMode.java | 2 +- .../core/service/FeatureModeServiceBean.java | 30 ++++++++++++++----- .../features/DisableFeatureModeTest.java | 4 +-- .../features/EnableFeatureModeTest.java | 4 +-- .../service/FeatureModeServiceBeanTest.java | 2 +- .../core/service/FeatureModeService.java | 2 +- 7 files changed, 31 insertions(+), 15 deletions(-) diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisableMode.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisableMode.java index 91a623e2f..5657e07b6 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisableMode.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisableMode.java @@ -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(); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/EnableMode.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/EnableMode.java index 6f07cb8fe..58c542bf2 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/EnableMode.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/EnableMode.java @@ -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(); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBean.java index aa6477b05..805bf35a6 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBean.java @@ -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> 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 getAllAvailableFeatureModes() { - List featureModes = new ArrayList<>(); - featureConfigService.getAllFeatureConfigs().forEach(featureConfig -> featureModes.addAll(featureConfig.getAvailableModes())); - return featureModes; + List fullFeatureModes = new ArrayList<>(); + featureConfigService.getAllFeatureConfigs().forEach(featureConfig -> fullFeatureModes.addAll(featureConfig.getAvailableModes())); + return fullFeatureModes; } - private List getFeatureModesAsStrings() { - return getAllAvailableFeatureModes().stream().map(FeatureMode::getKey).collect(Collectors.toList()); + private List 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 modes = new ArrayList<>(); + featureConfig.getAvailableModes().forEach(featureMode -> modes.add(featureMode.getKey())); + featureModes.put(featureConfig.getFeature().getKey(), modes); + }); + } + } diff --git a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/DisableFeatureModeTest.java b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/DisableFeatureModeTest.java index 9d72d80f1..2394716b3 100644 --- a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/DisableFeatureModeTest.java +++ b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/DisableFeatureModeTest.java @@ -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); } diff --git a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/EnableFeatureModeTest.java b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/EnableFeatureModeTest.java index 0e0b0f1bb..42dc67d35 100644 --- a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/EnableFeatureModeTest.java +++ b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/commands/config/features/EnableFeatureModeTest.java @@ -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); } diff --git a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBeanTest.java b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBeanTest.java index 2dad00e49..fca0879ed 100644 --- a/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBeanTest.java +++ b/abstracto-application/core/core-impl/src/test/java/dev/sheldan/abstracto/core/service/FeatureModeServiceBeanTest.java @@ -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); } diff --git a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeService.java b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeService.java index 0ea985fe6..c8b3ceb26 100644 --- a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeService.java +++ b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/service/FeatureModeService.java @@ -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 getAllAvailableFeatureModes(); List getEffectiveFeatureModes(AServer server); List getEffectiveFeatureModes(AServer server, AFeature feature);