mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2024-11-27 20:57:35 +01:00
Create test for HelpTranslationGenerator
This commit is contained in:
parent
8127d70058
commit
b687c68d46
@ -0,0 +1,186 @@
|
|||||||
|
package fr.xephi.authme.service;
|
||||||
|
|
||||||
|
import ch.jalu.injector.testing.BeforeInjecting;
|
||||||
|
import ch.jalu.injector.testing.DelayedInjectionRunner;
|
||||||
|
import ch.jalu.injector.testing.InjectDelayed;
|
||||||
|
import com.google.common.io.Files;
|
||||||
|
import fr.xephi.authme.TestHelper;
|
||||||
|
import fr.xephi.authme.command.CommandInitializer;
|
||||||
|
import fr.xephi.authme.command.help.HelpMessage;
|
||||||
|
import fr.xephi.authme.command.help.HelpMessagesService;
|
||||||
|
import fr.xephi.authme.command.help.HelpSection;
|
||||||
|
import fr.xephi.authme.initialization.DataFolder;
|
||||||
|
import fr.xephi.authme.message.MessageFileHandlerProvider;
|
||||||
|
import fr.xephi.authme.settings.Settings;
|
||||||
|
import fr.xephi.authme.settings.properties.PluginSettings;
|
||||||
|
import org.bukkit.configuration.MemorySection;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.containsString;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.nullValue;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
import static org.mockito.BDDMockito.given;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration test for {@link HelpTranslationGenerator}.
|
||||||
|
*/
|
||||||
|
@RunWith(DelayedInjectionRunner.class)
|
||||||
|
public class HelpTranslationGeneratorIntegrationTest {
|
||||||
|
|
||||||
|
@InjectDelayed
|
||||||
|
private HelpTranslationGenerator helpTranslationGenerator;
|
||||||
|
@InjectDelayed
|
||||||
|
private HelpMessagesService helpMessagesService;
|
||||||
|
@InjectDelayed
|
||||||
|
private MessageFileHandlerProvider messageFileHandlerProvider;
|
||||||
|
@InjectDelayed
|
||||||
|
private CommandInitializer commandInitializer;
|
||||||
|
|
||||||
|
@DataFolder
|
||||||
|
private File dataFolder;
|
||||||
|
private File helpMessagesFile;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private Settings settings;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setUpLogger() {
|
||||||
|
TestHelper.setupLogger();
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeInjecting
|
||||||
|
public void setUpClasses() throws IOException {
|
||||||
|
dataFolder = temporaryFolder.newFolder();
|
||||||
|
File messagesFolder = new File(dataFolder, "messages");
|
||||||
|
messagesFolder.mkdir();
|
||||||
|
helpMessagesFile = new File(messagesFolder, "help_test.yml");
|
||||||
|
Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/help_test.yml"), helpMessagesFile);
|
||||||
|
given(settings.getProperty(PluginSettings.MESSAGES_LANGUAGE)).willReturn("test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldUpdateCurrentHelpFile() throws IOException {
|
||||||
|
// given / when
|
||||||
|
helpTranslationGenerator.updateHelpFile();
|
||||||
|
|
||||||
|
// then
|
||||||
|
FileConfiguration configuration = YamlConfiguration.loadConfiguration(helpMessagesFile);
|
||||||
|
checkCommonEntries(configuration);
|
||||||
|
checkSections(configuration);
|
||||||
|
checkCommands(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkCommonEntries(FileConfiguration configuration) {
|
||||||
|
// Entries that were already present
|
||||||
|
assertThat(configuration.getString(HelpMessage.HEADER.getKey()), equalTo("My custom help header"));
|
||||||
|
assertThat(configuration.getString(HelpMessage.OPTIONAL.getKey()), equalTo("t-opt"));
|
||||||
|
assertThat(configuration.getString("common.defaultPermissions.notAllowed"), equalTo("t-noperm"));
|
||||||
|
assertThat(configuration.getString("common.defaultPermissions.allowed"), equalTo("t-allperm"));
|
||||||
|
|
||||||
|
// Entries that were added from the default
|
||||||
|
assertThat(configuration.getString(HelpMessage.DEFAULT.getKey()), equalTo("Default"));
|
||||||
|
assertThat(configuration.getString("common.defaultPermissions.opOnly"), equalTo("OP's only"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkSections(FileConfiguration configuration) {
|
||||||
|
// Entries that were already present
|
||||||
|
assertThat(configuration.getString(HelpSection.COMMAND.getKey()), equalTo("my command translation"));
|
||||||
|
assertThat(configuration.getString(HelpSection.SHORT_DESCRIPTION.getKey()), equalTo(""));
|
||||||
|
assertThat(configuration.getString(HelpSection.CHILDREN.getKey()), equalTo(""));
|
||||||
|
|
||||||
|
// Entries that were added from the default
|
||||||
|
assertThat(configuration.getString(HelpSection.DETAILED_DESCRIPTION.getKey()), equalTo("Detailed description"));
|
||||||
|
assertThat(configuration.getString(HelpSection.ARGUMENTS.getKey()), equalTo("Arguments"));
|
||||||
|
assertThat(configuration.getString(HelpSection.COMMAND.getKey()), equalTo("my command translation"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkCommands(FileConfiguration configuration) {
|
||||||
|
// Check /authme and /authme register entries: full text was available
|
||||||
|
checkDescription(configuration.get("commands.authme"), "test auth desc", "test auth long desc");
|
||||||
|
checkDescription(configuration.get("commands.authme.register"), "test reg desc", "test reg long desc");
|
||||||
|
checkArgs(configuration.get("commands.authme.register"),
|
||||||
|
arg("test reg arg1", "test reg arg1 text"), arg("test reg arg2", "test reg arg2 text"));
|
||||||
|
|
||||||
|
// Check /unregister: only had detailed description
|
||||||
|
checkDescription(configuration.get("commands.authme.unregister"), "Unregister a player", "Detailed description for unregister.");
|
||||||
|
|
||||||
|
// Check /email add
|
||||||
|
checkDescription(configuration.get("commands.email.add"), "email add desc", "email add long desc");
|
||||||
|
checkArgs(configuration.get("commands.email.add"),
|
||||||
|
arg("add arg1", "add arg1 text"), arg("add arg2", "add arg2 text"));
|
||||||
|
|
||||||
|
// Check /login
|
||||||
|
checkDescription(configuration.get("commands.login"), "Login command", "/login detailed desc.");
|
||||||
|
checkArgs(configuration.get("commands.login"), arg("loginArg", "Login password"));
|
||||||
|
|
||||||
|
// Check /unregister
|
||||||
|
checkDescription(configuration.get("commands.unregister"), "unreg_desc", "unreg_detail_desc");
|
||||||
|
checkArgs(configuration.get("commands.unregister"), arg("unreg_arg_label", "unreg_arg_desc"));
|
||||||
|
|
||||||
|
// Check /changepassword: had tons of invalid stuff, just expect it to be taken from defaults
|
||||||
|
checkDescription(configuration.get("commands.changepassword"), "[a list, instead of text]", "1337");
|
||||||
|
assertThat(configuration.get("commands.changepassword.arg1.label"), equalTo("true"));
|
||||||
|
assertThat(configuration.get("commands.changepassword.arg1.description"), equalTo("[]"));
|
||||||
|
// We have a whole object as arg2.label, for which the toString() is generated. Not very useful, so just test a portion...
|
||||||
|
assertThat((String) configuration.get("commands.changepassword.arg2.label"), containsString("MemorySection"));
|
||||||
|
assertThat(configuration.get("commands.changepassword.arg2.description"), equalTo("New password"));
|
||||||
|
assertThat(configuration.get("commands.changepassword.arg3"), nullValue());
|
||||||
|
|
||||||
|
// Check /captcha, with empty arg text
|
||||||
|
checkArgs(configuration.get("commands.captcha"), arg("", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkDescription(Object memorySection, String description, String detailedDescription) {
|
||||||
|
if (memorySection instanceof MemorySection) {
|
||||||
|
MemorySection memSection = (MemorySection) memorySection;
|
||||||
|
assertThat(memSection.getString("description"), equalTo(description));
|
||||||
|
assertThat(memSection.getString("detailedDescription"), equalTo(detailedDescription));
|
||||||
|
} else {
|
||||||
|
fail("Expected MemorySection, got '" + memorySection + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkArgs(Object memorySection, Argument... arguments) {
|
||||||
|
if (memorySection instanceof MemorySection) {
|
||||||
|
MemorySection memSection = (MemorySection) memorySection;
|
||||||
|
int i = 1;
|
||||||
|
for (Argument arg : arguments) {
|
||||||
|
assertThat(memSection.getString("arg" + i + ".label"), equalTo(arg.label));
|
||||||
|
assertThat(memSection.getString("arg" + i + ".description"), equalTo(arg.description));
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
assertThat(memSection.get("arg" + i), nullValue());
|
||||||
|
} else {
|
||||||
|
fail("Expected MemorySection, got '" + memorySection + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Argument arg(String label, String description) {
|
||||||
|
return new Argument(label, description);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class Argument {
|
||||||
|
final String label;
|
||||||
|
final String description;
|
||||||
|
|
||||||
|
Argument(String label, String description) {
|
||||||
|
this.label = label;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
109
src/test/resources/fr/xephi/authme/message/help_test.yml
Normal file
109
src/test/resources/fr/xephi/authme/message/help_test.yml
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
common:
|
||||||
|
header: 'My custom help header'
|
||||||
|
optional: t-opt
|
||||||
|
result: t-res
|
||||||
|
defaultPermissions:
|
||||||
|
notAllowed: t-noperm
|
||||||
|
allowed: t-allperm
|
||||||
|
|
||||||
|
section:
|
||||||
|
command: my command translation
|
||||||
|
description: '' # <-- empty! Must be kept
|
||||||
|
children: ''
|
||||||
|
|
||||||
|
commands:
|
||||||
|
# Full command entries
|
||||||
|
authme:
|
||||||
|
description: test auth desc
|
||||||
|
detailedDescription: test auth long desc
|
||||||
|
authme.register:
|
||||||
|
description: test reg desc
|
||||||
|
detailedDescription: test reg long desc
|
||||||
|
arg1:
|
||||||
|
label: test reg arg1
|
||||||
|
description: test reg arg1 text
|
||||||
|
arg2:
|
||||||
|
label: test reg arg2
|
||||||
|
description: test reg arg2 text
|
||||||
|
|
||||||
|
# Command with only one property specified
|
||||||
|
authme.unregister:
|
||||||
|
detailedDescription: Detailed description for unregister.
|
||||||
|
|
||||||
|
# Command with only one argument present
|
||||||
|
authme.password:
|
||||||
|
arg2:
|
||||||
|
label: pwd
|
||||||
|
description: New password
|
||||||
|
|
||||||
|
# Subcommand without an entry for the parent (email)
|
||||||
|
email.add:
|
||||||
|
description: email add desc
|
||||||
|
detailedDescription: email add long desc
|
||||||
|
arg1:
|
||||||
|
label: add arg1
|
||||||
|
description: add arg1 text
|
||||||
|
arg2:
|
||||||
|
label: add arg2
|
||||||
|
description: add arg2 text
|
||||||
|
|
||||||
|
# Unknown subcommand
|
||||||
|
email.doesNotExist:
|
||||||
|
description: Command that doesn't exist
|
||||||
|
detailedDescription: Command that doesn't exist
|
||||||
|
arg1:
|
||||||
|
label: arg1
|
||||||
|
description: Command that doesn't exist
|
||||||
|
arg2:
|
||||||
|
label: arg2
|
||||||
|
description: Command that doesn't exist
|
||||||
|
|
||||||
|
# Command with unknown properties
|
||||||
|
login:
|
||||||
|
unknownProperty: This does not exist
|
||||||
|
detailedDescription: /login detailed desc.
|
||||||
|
arg1:
|
||||||
|
label: loginArg
|
||||||
|
nonExistent: does not exist
|
||||||
|
someProp:
|
||||||
|
label: '''someProp'' does not exist'
|
||||||
|
description: idk
|
||||||
|
|
||||||
|
# Command that is not present at all
|
||||||
|
#logout:
|
||||||
|
# description: Logout command
|
||||||
|
# detailedDescription: Command to logout using AuthMeReloaded.
|
||||||
|
|
||||||
|
# Entry with too many args
|
||||||
|
unregister:
|
||||||
|
description: unreg_desc
|
||||||
|
detailedDescription: unreg_detail_desc
|
||||||
|
arg1:
|
||||||
|
label: unreg_arg_label
|
||||||
|
description: unreg_arg_desc
|
||||||
|
arg2:
|
||||||
|
label: This argument does not exist.
|
||||||
|
description: argument does not exist
|
||||||
|
|
||||||
|
# Entry with invalid data types
|
||||||
|
changepassword:
|
||||||
|
description:
|
||||||
|
- a list
|
||||||
|
- instead of text
|
||||||
|
detailedDescription: 1337
|
||||||
|
arg1:
|
||||||
|
label: true
|
||||||
|
description: []
|
||||||
|
arg2:
|
||||||
|
label:
|
||||||
|
unexpected: 5
|
||||||
|
object: 4
|
||||||
|
description: null
|
||||||
|
|
||||||
|
# Entry with empty texts! These need to be preserved
|
||||||
|
captcha:
|
||||||
|
description: Captcha command
|
||||||
|
detailedDescription: 'Captcha detail'
|
||||||
|
arg1:
|
||||||
|
label: ''
|
||||||
|
description: ''
|
Loading…
Reference in New Issue
Block a user