mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-10 22:01:00 +01:00
Extracted TestSettings utility
This commit is contained in:
parent
d402b1c832
commit
6292ef5f4d
@ -16,19 +16,16 @@
|
||||
*/
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plan.exceptions.EnableException;
|
||||
import com.djrapitops.plan.settings.ConfigSettingKeyTest;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.WebserverSettings;
|
||||
import com.djrapitops.plan.settings.config.paths.key.Setting;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import utilities.RandomData;
|
||||
import utilities.TestSettings;
|
||||
import utilities.mocks.BukkitMockComponent;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
@ -51,7 +48,7 @@ class BukkitSystemTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void bukkitSystemEnables() throws EnableException {
|
||||
void bukkitSystemEnables() {
|
||||
try {
|
||||
system.enable();
|
||||
assertTrue(system.isEnabled());
|
||||
@ -61,13 +58,12 @@ class BukkitSystemTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void bukkitSystemHasDefaultConfigValuesAfterEnable() throws EnableException, IllegalAccessException {
|
||||
void bukkitSystemHasDefaultConfigValuesAfterEnable() throws IllegalAccessException {
|
||||
try {
|
||||
system.enable();
|
||||
PlanConfig config = system.getConfigSystem().getConfig();
|
||||
|
||||
Collection<Setting> serverSettings = ConfigSettingKeyTest.getServerSettings();
|
||||
ConfigSettingKeyTest.assertValidDefaultValuesForAllSettings(config, serverSettings);
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, TestSettings.getServerSettings());
|
||||
} finally {
|
||||
system.disable();
|
||||
}
|
||||
|
@ -17,35 +17,25 @@
|
||||
package com.djrapitops.plan.settings;
|
||||
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.*;
|
||||
import com.djrapitops.plan.settings.config.paths.key.Setting;
|
||||
import com.djrapitops.plugin.logging.console.TestPluginLogger;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import utilities.FieldFetcher;
|
||||
import utilities.TestResources;
|
||||
import utilities.TestSettings;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* Test to check that configs contain all values required to run the plugin.
|
||||
* <p>
|
||||
* TODO Move public utility methods to an utility to make this class package private
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class ConfigSettingKeyTest {
|
||||
class ConfigSettingKeyTest {
|
||||
|
||||
public static Path temporaryFolder;
|
||||
|
||||
@ -54,82 +44,18 @@ public class ConfigSettingKeyTest {
|
||||
temporaryFolder = tempDir;
|
||||
}
|
||||
|
||||
public static void assertValidDefaultValuesForAllSettings(PlanConfig config, Iterable<Setting> settings) {
|
||||
List<String> fails = new ArrayList<>();
|
||||
for (Setting<?> setting : settings) {
|
||||
checkSettingForFailures(config, setting).ifPresent(fails::add);
|
||||
}
|
||||
assertTrue(fails.isEmpty(), fails::toString);
|
||||
}
|
||||
|
||||
private static Optional<String> checkSettingForFailures(PlanConfig config, Setting<?> setting) {
|
||||
try {
|
||||
if (!config.contains(setting.getPath())) {
|
||||
return Optional.of("Did not contain " + setting.getPath());
|
||||
} else {
|
||||
config.get(setting);
|
||||
return Optional.empty();
|
||||
}
|
||||
} catch (IllegalStateException validationFailed) {
|
||||
return Optional.of(validationFailed.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static Collection<Setting> getServerSettings() throws IllegalAccessException {
|
||||
List<Setting> settings = new ArrayList<>();
|
||||
for (Class settingKeyClass : new Class[]{
|
||||
DatabaseSettings.class,
|
||||
DataGatheringSettings.class,
|
||||
DisplaySettings.class,
|
||||
ExportSettings.class,
|
||||
FormatSettings.class,
|
||||
PluginSettings.class,
|
||||
TimeSettings.class,
|
||||
WebserverSettings.class
|
||||
}) {
|
||||
settings.addAll(FieldFetcher.getPublicStaticFields(settingKeyClass, Setting.class));
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
public static Collection<Setting> getProxySettings() throws IllegalAccessException {
|
||||
List<Setting> settings = new ArrayList<>();
|
||||
for (Class settingKeyClass : new Class[]{
|
||||
DatabaseSettings.class,
|
||||
DisplaySettings.class,
|
||||
ExportSettings.class,
|
||||
FormatSettings.class,
|
||||
PluginSettings.class,
|
||||
ProxySettings.class,
|
||||
TimeSettings.class,
|
||||
WebserverSettings.class
|
||||
}) {
|
||||
settings.addAll(FieldFetcher.getPublicStaticFields(settingKeyClass, Setting.class));
|
||||
}
|
||||
// Server settings contained in the key classes, remove
|
||||
settings.remove(PluginSettings.SERVER_NAME);
|
||||
settings.remove(PluginSettings.PROXY_COPY_CONFIG);
|
||||
settings.remove(DatabaseSettings.TYPE);
|
||||
settings.remove(DisplaySettings.WORLD_ALIASES);
|
||||
settings.remove(DatabaseSettings.H2_USER);
|
||||
settings.remove(DatabaseSettings.H2_PASS);
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("config.yml has valid default values")
|
||||
void serverConfigHasValidDefaultValues() throws IOException, IllegalAccessException {
|
||||
PlanConfig planConfig = createConfig("config.yml");
|
||||
Collection<Setting> settings = getServerSettings();
|
||||
assertValidDefaultValuesForAllSettings(planConfig, settings);
|
||||
PlanConfig config = createConfig("config.yml");
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, TestSettings.getServerSettings());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("bungeeconfig.yml has valid default values")
|
||||
void proxyConfigHasValidDefaultValues() throws IOException, IllegalAccessException {
|
||||
PlanConfig planConfig = createConfig("bungeeconfig.yml");
|
||||
Collection<Setting> settings = getProxySettings();
|
||||
assertValidDefaultValuesForAllSettings(planConfig, settings);
|
||||
PlanConfig config = createConfig("bungeeconfig.yml");
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, TestSettings.getProxySettings());
|
||||
}
|
||||
|
||||
private PlanConfig createConfig(String copyDefaultSettingsFrom) throws IOException {
|
||||
|
@ -16,10 +16,8 @@
|
||||
*/
|
||||
package com.djrapitops.plan.settings.config.changes;
|
||||
|
||||
import com.djrapitops.plan.settings.ConfigSettingKeyTest;
|
||||
import com.djrapitops.plan.settings.config.ConfigReader;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.key.Setting;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.console.TestPluginLogger;
|
||||
@ -29,6 +27,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import org.mockito.Mockito;
|
||||
import utilities.TestResources;
|
||||
import utilities.TestSettings;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -36,7 +35,6 @@ import java.net.URISyntaxException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
@ -87,77 +85,75 @@ class ConfigUpdaterTest {
|
||||
|
||||
@Test
|
||||
void serverConfigIsPatchedCorrectly() throws IOException, IllegalAccessException {
|
||||
Path config = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldConfig.toPath(), config, StandardCopyOption.REPLACE_EXISTING);
|
||||
Path configPath = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldConfig.toPath(), configPath, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
PlanConfig planConfig = new PlanConfig(config.toFile(), null, null, new TestPluginLogger());
|
||||
PlanConfig config = new PlanConfig(configPath.toFile(), null, null, new TestPluginLogger());
|
||||
|
||||
UNDER_TEST.applyConfigUpdate(planConfig);
|
||||
UNDER_TEST.applyConfigUpdate(config);
|
||||
|
||||
// Ensure that added settings are present
|
||||
copyMissingFrom(planConfig, newConfig);
|
||||
copyMissingFrom(config, newConfig);
|
||||
|
||||
Collection<Setting> settings = ConfigSettingKeyTest.getServerSettings();
|
||||
ConfigSettingKeyTest.assertValidDefaultValuesForAllSettings(planConfig, settings);
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, TestSettings.getServerSettings());
|
||||
}
|
||||
|
||||
@Test
|
||||
void proxyConfigIsPatchedCorrectly() throws IOException, IllegalAccessException {
|
||||
Path config = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldBungeeConfig.toPath(), config, StandardCopyOption.REPLACE_EXISTING);
|
||||
Path configPath = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldBungeeConfig.toPath(), configPath, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
PlanConfig planConfig = new PlanConfig(config.toFile(), null, null, new TestPluginLogger());
|
||||
PlanConfig config = new PlanConfig(configPath.toFile(), null, null, new TestPluginLogger());
|
||||
|
||||
UNDER_TEST.applyConfigUpdate(planConfig);
|
||||
UNDER_TEST.applyConfigUpdate(config);
|
||||
|
||||
// Ensure that added settings are present
|
||||
copyMissingFrom(planConfig, newBungeeConfig);
|
||||
copyMissingFrom(config, newBungeeConfig);
|
||||
|
||||
Collection<Setting> settings = ConfigSettingKeyTest.getProxySettings();
|
||||
ConfigSettingKeyTest.assertValidDefaultValuesForAllSettings(planConfig, settings);
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, TestSettings.getProxySettings());
|
||||
}
|
||||
|
||||
private void copyMissingFrom(PlanConfig planConfig, Path newBungeeConfig) throws IOException {
|
||||
private void copyMissingFrom(PlanConfig config, Path newBungeeConfig) throws IOException {
|
||||
try (ConfigReader reader = new ConfigReader(newBungeeConfig)) {
|
||||
planConfig.copyMissing(reader.read());
|
||||
config.copyMissing(reader.read());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void serverMoveChangesDoNotLeaveNewEmptyValues() throws IOException {
|
||||
Path config = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldConfig.toPath(), config, StandardCopyOption.REPLACE_EXISTING);
|
||||
Path configPath = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldConfig.toPath(), configPath, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
PlanConfig planConfig = new PlanConfig(config.toFile(), null, null, new TestPluginLogger());
|
||||
PlanConfig config = new PlanConfig(configPath.toFile(), null, null, new TestPluginLogger());
|
||||
|
||||
ConfigChange[] changes = UNDER_TEST.configEnhancementPatch();
|
||||
assertMoveChangesAreAppliedProperly(planConfig, changes);
|
||||
assertMoveChangesAreAppliedProperly(config, changes);
|
||||
}
|
||||
|
||||
@Test
|
||||
void proxyMoveChangesDoNotLeaveNewEmptyValues() throws IOException {
|
||||
Path config = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldBungeeConfig.toPath(), config, StandardCopyOption.REPLACE_EXISTING);
|
||||
Path configPath = tempDir.resolve("oldconfig.yml");
|
||||
Files.copy(oldBungeeConfig.toPath(), configPath, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
PlanConfig planConfig = new PlanConfig(config.toFile(), null, null, new TestPluginLogger());
|
||||
PlanConfig config = new PlanConfig(configPath.toFile(), null, null, new TestPluginLogger());
|
||||
|
||||
ConfigChange[] changes = UNDER_TEST.configEnhancementPatch();
|
||||
assertMoveChangesAreAppliedProperly(planConfig, changes);
|
||||
assertMoveChangesAreAppliedProperly(config, changes);
|
||||
}
|
||||
|
||||
private void assertMoveChangesAreAppliedProperly(PlanConfig planConfig, ConfigChange[] changes) {
|
||||
private void assertMoveChangesAreAppliedProperly(PlanConfig config, ConfigChange[] changes) {
|
||||
for (ConfigChange change : changes) {
|
||||
if (change.hasBeenApplied(planConfig)) {
|
||||
if (change.hasBeenApplied(config)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (change instanceof ConfigChange.Moved) {
|
||||
ConfigChange.Moved move = (ConfigChange.Moved) change;
|
||||
String expected = planConfig.getString(move.oldPath);
|
||||
String expected = config.getString(move.oldPath);
|
||||
|
||||
move.apply(planConfig);
|
||||
move.apply(config);
|
||||
|
||||
assertEquals(expected, planConfig.getString(move.newPath));
|
||||
assertEquals(expected, config.getString(move.newPath));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
95
Plan/common/src/test/java/utilities/TestSettings.java
Normal file
95
Plan/common/src/test/java/utilities/TestSettings.java
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package utilities;
|
||||
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.*;
|
||||
import com.djrapitops.plan.settings.config.paths.key.Setting;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* Utility for testing that configs contain all appropriate values.
|
||||
*/
|
||||
public class TestSettings {
|
||||
public static void assertValidDefaultValuesForAllSettings(PlanConfig config, Iterable<Setting> settings) {
|
||||
List<String> fails = new ArrayList<>();
|
||||
for (Setting<?> setting : settings) {
|
||||
checkSettingForFailures(config, setting).ifPresent(fails::add);
|
||||
}
|
||||
assertTrue(fails.isEmpty(), fails::toString);
|
||||
}
|
||||
|
||||
private static Optional<String> checkSettingForFailures(PlanConfig config, Setting<?> setting) {
|
||||
try {
|
||||
if (!config.contains(setting.getPath())) {
|
||||
return Optional.of("Did not contain " + setting.getPath());
|
||||
} else {
|
||||
config.get(setting);
|
||||
return Optional.empty();
|
||||
}
|
||||
} catch (IllegalStateException validationFailed) {
|
||||
return Optional.of(validationFailed.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static Collection<Setting> getServerSettings() throws IllegalAccessException {
|
||||
List<Setting> settings = new ArrayList<>();
|
||||
for (Class settingKeyClass : new Class[]{
|
||||
DatabaseSettings.class,
|
||||
DataGatheringSettings.class,
|
||||
DisplaySettings.class,
|
||||
ExportSettings.class,
|
||||
FormatSettings.class,
|
||||
PluginSettings.class,
|
||||
TimeSettings.class,
|
||||
WebserverSettings.class
|
||||
}) {
|
||||
settings.addAll(FieldFetcher.getPublicStaticFields(settingKeyClass, Setting.class));
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
public static Collection<Setting> getProxySettings() throws IllegalAccessException {
|
||||
List<Setting> settings = new ArrayList<>();
|
||||
for (Class settingKeyClass : new Class[]{
|
||||
DatabaseSettings.class,
|
||||
DisplaySettings.class,
|
||||
ExportSettings.class,
|
||||
FormatSettings.class,
|
||||
PluginSettings.class,
|
||||
ProxySettings.class,
|
||||
TimeSettings.class,
|
||||
WebserverSettings.class
|
||||
}) {
|
||||
settings.addAll(FieldFetcher.getPublicStaticFields(settingKeyClass, Setting.class));
|
||||
}
|
||||
// Server settings contained in the key classes, remove
|
||||
settings.remove(PluginSettings.SERVER_NAME);
|
||||
settings.remove(PluginSettings.PROXY_COPY_CONFIG);
|
||||
settings.remove(DatabaseSettings.TYPE);
|
||||
settings.remove(DisplaySettings.WORLD_ALIASES);
|
||||
settings.remove(DatabaseSettings.H2_USER);
|
||||
settings.remove(DatabaseSettings.H2_PASS);
|
||||
return settings;
|
||||
}
|
||||
}
|
@ -17,7 +17,6 @@
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plan.exceptions.EnableException;
|
||||
import com.djrapitops.plan.settings.ConfigSettingKeyTest;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.WebserverSettings;
|
||||
import com.djrapitops.plan.settings.config.paths.key.Setting;
|
||||
@ -25,6 +24,7 @@ import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import utilities.RandomData;
|
||||
import utilities.TestSettings;
|
||||
import utilities.mocks.NukkitMockComponent;
|
||||
|
||||
import java.nio.file.Path;
|
||||
@ -65,8 +65,8 @@ class NukkitSystemTest {
|
||||
system.enable();
|
||||
PlanConfig config = system.getConfigSystem().getConfig();
|
||||
|
||||
Collection<Setting> serverSettings = ConfigSettingKeyTest.getServerSettings();
|
||||
ConfigSettingKeyTest.assertValidDefaultValuesForAllSettings(config, serverSettings);
|
||||
Collection<Setting> serverSettings = TestSettings.getServerSettings();
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, serverSettings);
|
||||
} finally {
|
||||
system.disable();
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plan.exceptions.EnableException;
|
||||
import com.djrapitops.plan.settings.ConfigSettingKeyTest;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.WebserverSettings;
|
||||
import com.djrapitops.plan.settings.config.paths.key.Setting;
|
||||
@ -25,6 +24,7 @@ import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import utilities.RandomData;
|
||||
import utilities.TestSettings;
|
||||
import utilities.mocks.SpongeMockComponent;
|
||||
|
||||
import java.nio.file.Path;
|
||||
@ -67,8 +67,8 @@ class SpongeSystemTest {
|
||||
system.enable();
|
||||
PlanConfig config = system.getConfigSystem().getConfig();
|
||||
|
||||
Collection<Setting> serverSettings = ConfigSettingKeyTest.getServerSettings();
|
||||
ConfigSettingKeyTest.assertValidDefaultValuesForAllSettings(config, serverSettings);
|
||||
Collection<Setting> serverSettings = TestSettings.getServerSettings();
|
||||
TestSettings.assertValidDefaultValuesForAllSettings(config, serverSettings);
|
||||
} finally {
|
||||
system.disable();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user