Fix #1493 Extract handling of message file paths to a separate class with constants
This commit is contained in:
@@ -5,6 +5,7 @@ import ch.jalu.configme.resource.YamlFileReader;
|
||||
import fr.xephi.authme.TestHelper;
|
||||
import fr.xephi.authme.command.CommandDescription;
|
||||
import fr.xephi.authme.command.CommandInitializer;
|
||||
import fr.xephi.authme.message.MessagePathHelper;
|
||||
import org.bukkit.configuration.MemorySection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
@@ -25,7 +26,8 @@ import static org.junit.Assert.assertThat;
|
||||
*/
|
||||
public class HelpMessagesConsistencyTest {
|
||||
|
||||
private static final File DEFAULT_MESSAGES_FILE = TestHelper.getJarFile("/messages/help_en.yml");
|
||||
private static final File DEFAULT_MESSAGES_FILE =
|
||||
TestHelper.getJarFile("/" + MessagePathHelper.createHelpMessageFilePath(MessagePathHelper.DEFAULT_LANGUAGE));
|
||||
|
||||
@Test
|
||||
public void shouldHaveIdenticalTexts() {
|
||||
|
||||
@@ -7,6 +7,7 @@ import fr.xephi.authme.command.CommandDescription;
|
||||
import fr.xephi.authme.command.TestCommandsUtil;
|
||||
import fr.xephi.authme.message.AbstractMessageFileHandler;
|
||||
import fr.xephi.authme.message.HelpMessagesFileHandler;
|
||||
import fr.xephi.authme.message.MessagePathHelper;
|
||||
import fr.xephi.authme.permission.DefaultPermission;
|
||||
import fr.xephi.authme.settings.Settings;
|
||||
import fr.xephi.authme.settings.properties.PluginSettings;
|
||||
@@ -32,7 +33,7 @@ import static org.mockito.Mockito.mock;
|
||||
*/
|
||||
public class HelpMessagesServiceTest {
|
||||
|
||||
private static final String TEST_FILE = "/fr/xephi/authme/command/help/help_test.yml";
|
||||
private static final String TEST_FILE = TestHelper.PROJECT_ROOT + "command/help/help_test.yml";
|
||||
private static final Collection<CommandDescription> COMMANDS = TestCommandsUtil.generateCommands();
|
||||
|
||||
private HelpMessagesService helpMessagesService;
|
||||
@@ -42,10 +43,10 @@ public class HelpMessagesServiceTest {
|
||||
private File dataFolder;
|
||||
|
||||
@Before
|
||||
public void initializeHandler() throws IOException, InstantiationException, IllegalAccessException {
|
||||
public void initializeHandler() throws IOException {
|
||||
dataFolder = temporaryFolder.newFolder();
|
||||
new File(dataFolder, "messages").mkdirs();
|
||||
File messagesFile = new File(dataFolder, "messages/help_test.yml");
|
||||
File messagesFile = new File(dataFolder, MessagePathHelper.createHelpMessageFilePath("test"));
|
||||
Files.copy(TestHelper.getJarFile(TEST_FILE), messagesFile);
|
||||
|
||||
HelpMessagesFileHandler helpMessagesFileHandler = createMessagesFileHandler();
|
||||
@@ -146,7 +147,7 @@ public class HelpMessagesServiceTest {
|
||||
assertThat(description, equalTo(command.getDescription()));
|
||||
}
|
||||
|
||||
private HelpMessagesFileHandler createMessagesFileHandler() throws IllegalAccessException, InstantiationException {
|
||||
private HelpMessagesFileHandler createMessagesFileHandler() {
|
||||
Settings settings = mock(Settings.class);
|
||||
given(settings.getProperty(PluginSettings.MESSAGES_LANGUAGE)).willReturn("test");
|
||||
|
||||
|
||||
+3
-1
@@ -26,6 +26,8 @@ import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
import static fr.xephi.authme.TestHelper.PROJECT_ROOT;
|
||||
import static fr.xephi.authme.TestHelper.TEST_RESOURCES_FOLDER;
|
||||
import static fr.xephi.authme.data.limbo.LimboPlayerMatchers.hasLocation;
|
||||
import static fr.xephi.authme.data.limbo.LimboPlayerMatchers.isLimbo;
|
||||
import static java.util.UUID.fromString;
|
||||
@@ -96,7 +98,7 @@ public class DistributedFilesPersistenceHandlerTest {
|
||||
playerDataFolder = new File(dataFolder, "playerdata");
|
||||
playerDataFolder.mkdir();
|
||||
|
||||
File limboFilesFolder = new File("src/test/resources/fr/xephi/authme/data/limbo");
|
||||
File limboFilesFolder = new File(TEST_RESOURCES_FOLDER + PROJECT_ROOT + "data/limbo");
|
||||
for (File file : limboFilesFolder.listFiles()) {
|
||||
File from = new File(playerDataFolder, file.getName());
|
||||
Files.copy(file, from);
|
||||
|
||||
@@ -13,9 +13,9 @@ import org.junit.Test;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static fr.xephi.authme.message.MessagePathHelper.MESSAGES_FOLDER;
|
||||
import static org.hamcrest.Matchers.both;
|
||||
import static org.hamcrest.Matchers.emptyString;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
@@ -28,20 +28,17 @@ import static org.junit.Assert.assertThat;
|
||||
*/
|
||||
public class HelpMessageConsistencyTest {
|
||||
|
||||
private static final String MESSAGES_FOLDER = "/messages";
|
||||
private static final Pattern HELP_MESSAGES_FILE = Pattern.compile("help_[a-z]+\\.yml");
|
||||
|
||||
private List<File> helpFiles;
|
||||
|
||||
@Before
|
||||
public void findHelpMessagesFiles() {
|
||||
File folder = TestHelper.getJarFile(MESSAGES_FOLDER);
|
||||
File folder = TestHelper.getJarFile("/" + MESSAGES_FOLDER);
|
||||
File[] files = folder.listFiles();
|
||||
if (files == null || files.length == 0) {
|
||||
throw new IllegalStateException("Could not get files from '" + MESSAGES_FOLDER + "'");
|
||||
}
|
||||
helpFiles = Arrays.stream(files)
|
||||
.filter(file -> HELP_MESSAGES_FILE.matcher(file.getName()).matches())
|
||||
.filter(file -> MessagePathHelper.isHelpFile(file.getName()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static fr.xephi.authme.message.MessagePathHelper.MESSAGES_FOLDER;
|
||||
import static org.junit.Assert.fail;
|
||||
import static tools.utils.FileIoUtils.listFilesOrThrow;
|
||||
|
||||
@@ -27,12 +27,6 @@ import static tools.utils.FileIoUtils.listFilesOrThrow;
|
||||
@RunWith(Parameterized.class)
|
||||
public class MessageFilePlaceholderTest {
|
||||
|
||||
/** Path in the resources folder where the message files are located. */
|
||||
private static final String MESSAGES_FOLDER = "/messages/";
|
||||
|
||||
/** Pattern for detecting messages files. */
|
||||
private static final Pattern IS_MESSAGES_FILE = Pattern.compile("messages_.*?\\.yml");
|
||||
|
||||
/** Defines exclusions: a (key, tag) pair in this map will not be checked in the test. */
|
||||
private static final Multimap<MessageKey, String> EXCLUSIONS = ImmutableMultimap.<MessageKey, String>builder()
|
||||
.put(MessageKey.INCORRECT_RECOVERY_CODE, "%count")
|
||||
@@ -80,10 +74,10 @@ public class MessageFilePlaceholderTest {
|
||||
|
||||
@Parameterized.Parameters(name = "{1}")
|
||||
public static List<Object[]> buildParams() {
|
||||
File folder = TestHelper.getJarFile(MESSAGES_FOLDER);
|
||||
File folder = TestHelper.getJarFile("/" + MESSAGES_FOLDER);
|
||||
|
||||
List<Object[]> messageFiles = Arrays.stream(listFilesOrThrow(folder))
|
||||
.filter(file -> IS_MESSAGES_FILE.matcher(file.getName()).matches())
|
||||
.filter(file -> MessagePathHelper.isMessagesFile(file.getName()))
|
||||
.map(file -> new Object[]{file, file.getName()})
|
||||
.collect(Collectors.toList());
|
||||
if (messageFiles.isEmpty()) {
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package fr.xephi.authme.message;
|
||||
|
||||
import fr.xephi.authme.settings.properties.PluginSettings;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.nullValue;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link MessagePathHelper}.
|
||||
*/
|
||||
public class MessagePathHelperTest {
|
||||
|
||||
@Test
|
||||
public void shouldHaveLanguageInSyncWithConfigurations() {
|
||||
// given / when / then
|
||||
assertThat(MessagePathHelper.DEFAULT_LANGUAGE, equalTo(PluginSettings.MESSAGES_LANGUAGE.getDefaultValue()));
|
||||
assertThat(MessagePathHelper.DEFAULT_MESSAGES_FILE, equalTo(MessagePathHelper.createMessageFilePath(MessagePathHelper.DEFAULT_LANGUAGE)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldBuildTextFilePaths() {
|
||||
// given / when / then
|
||||
assertThat(MessagePathHelper.createMessageFilePath("qq"), equalTo(MessagePathHelper.MESSAGES_FOLDER + "messages_qq.yml"));
|
||||
assertThat(MessagePathHelper.createHelpMessageFilePath("qq"), equalTo(MessagePathHelper.MESSAGES_FOLDER + "help_qq.yml"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldRecognizeIfIsMessagesFile() {
|
||||
// given / when / then
|
||||
assertThat(MessagePathHelper.isMessagesFile("messages_nl.yml"), equalTo(true));
|
||||
assertThat(MessagePathHelper.isMessagesFile("messages_testtest.yml"), equalTo(true));
|
||||
|
||||
assertThat(MessagePathHelper.isMessagesFile("messages/messages_fr.yml"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isMessagesFile("Messages_fr.yml"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isMessagesFile("otherfile.txt"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isMessagesFile("messages_de.txt"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isMessagesFile(""), equalTo(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLanguageForMessagesFile() {
|
||||
// given / when / then
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages_nl.yml"), equalTo("nl"));
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages_testtest.yml"), equalTo("testtest"));
|
||||
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages/messages_fr.yml"), nullValue());
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("Messages_fr.yml"), nullValue());
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("otherfile.txt"), nullValue());
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages_de.txt"), nullValue());
|
||||
assertThat(MessagePathHelper.getLanguageIfIsMessagesFile(""), nullValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldRecognizeIfIsHelpFile() {
|
||||
// given / when / then
|
||||
assertThat(MessagePathHelper.isHelpFile("help_nl.yml"), equalTo(true));
|
||||
assertThat(MessagePathHelper.isHelpFile("help_testtest.yml"), equalTo(true));
|
||||
|
||||
assertThat(MessagePathHelper.isHelpFile("messages/help_fr.yml"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isHelpFile("Help_fr.yml"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isHelpFile("otherfile.txt"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isHelpFile("help_de.txt"), equalTo(false));
|
||||
assertThat(MessagePathHelper.isHelpFile(""), equalTo(false));
|
||||
}
|
||||
}
|
||||
@@ -19,11 +19,11 @@ import static org.junit.Assert.fail;
|
||||
*/
|
||||
public class MessagesFileConsistencyTest {
|
||||
|
||||
private static final String MESSAGES_FILE = "/messages/messages_en.yml";
|
||||
private static final String MESSAGES_FILE = MessagePathHelper.DEFAULT_MESSAGES_FILE;
|
||||
|
||||
@Test
|
||||
public void shouldHaveAllMessages() {
|
||||
File file = TestHelper.getJarFile(MESSAGES_FILE);
|
||||
File file = TestHelper.getJarFile("/" + MESSAGES_FILE);
|
||||
PropertyReader reader = new YamlFileReader(file);
|
||||
List<String> errors = new ArrayList<>();
|
||||
for (MessageKey messageKey : MessageKey.values()) {
|
||||
|
||||
@@ -44,7 +44,8 @@ import static org.mockito.hamcrest.MockitoHamcrest.argThat;
|
||||
*/
|
||||
public class MessagesIntegrationTest {
|
||||
|
||||
private static final String YML_TEST_FILE = TestHelper.PROJECT_ROOT + "message/messages_test.yml";
|
||||
private static final String TEST_MESSAGES_LOCAL_PATH = "message/messages_test.yml";
|
||||
private static final String YML_TEST_FILE = TestHelper.PROJECT_ROOT + TEST_MESSAGES_LOCAL_PATH;
|
||||
private Messages messages;
|
||||
private MessagesFileHandler messagesFileHandler;
|
||||
|
||||
@@ -68,8 +69,8 @@ public class MessagesIntegrationTest {
|
||||
@Before
|
||||
public void setUpMessages() throws IOException {
|
||||
dataFolder = temporaryFolder.newFolder();
|
||||
File testFile = new File(dataFolder, "messages/messages_test.yml");
|
||||
new File(dataFolder, "messages").mkdirs();
|
||||
File testFile = new File(dataFolder, MessagePathHelper.createMessageFilePath("test"));
|
||||
new File(dataFolder, MessagePathHelper.MESSAGES_FOLDER).mkdirs();
|
||||
FileUtils.create(testFile);
|
||||
Files.copy(TestHelper.getJarFile(YML_TEST_FILE), testFile);
|
||||
|
||||
@@ -276,8 +277,8 @@ public class MessagesIntegrationTest {
|
||||
public void shouldFormatDurationObjects() throws IOException {
|
||||
// given
|
||||
// Use the JAR's messages_en.yml file for this, so copy to the file we're using and reload the file handler
|
||||
File testFile = new File(dataFolder, "messages/messages_test.yml");
|
||||
Files.copy(TestHelper.getJarFile("/messages/messages_en.yml"), testFile);
|
||||
File testFile = new File(dataFolder, MessagePathHelper.createMessageFilePath("test"));
|
||||
Files.copy(TestHelper.getJarFile("/" + MessagePathHelper.DEFAULT_MESSAGES_FILE), testFile);
|
||||
messagesFileHandler.reload();
|
||||
|
||||
Map<Duration, String> expectedTexts = ImmutableMap.<Duration, String>builder()
|
||||
|
||||
@@ -11,10 +11,10 @@ import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static fr.xephi.authme.message.MessagePathHelper.MESSAGES_FOLDER;
|
||||
import static org.junit.Assert.fail;
|
||||
import static tools.utils.FileIoUtils.listFilesOrThrow;
|
||||
|
||||
@@ -23,52 +23,50 @@ import static tools.utils.FileIoUtils.listFilesOrThrow;
|
||||
*/
|
||||
public class YamlTextFileCheckerTest {
|
||||
|
||||
/** Path in the resources folder where the message files are located. */
|
||||
private static final String MESSAGES_FOLDER = "/messages/";
|
||||
/** Contains all files of the MESSAGES_FOLDER. */
|
||||
private static List<File> messageFiles;
|
||||
private static File[] messageFiles;
|
||||
|
||||
@BeforeClass
|
||||
public static void loadMessagesFiles() {
|
||||
File folder = TestHelper.getJarFile(MESSAGES_FOLDER);
|
||||
messageFiles = Arrays.asList(listFilesOrThrow(folder));
|
||||
File folder = TestHelper.getJarFile("/" + MESSAGES_FOLDER);
|
||||
messageFiles = listFilesOrThrow(folder);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllMessagesYmlFiles() {
|
||||
checkFiles(
|
||||
Pattern.compile("messages_\\w+\\.yml"),
|
||||
MessagePathHelper::isMessagesFile,
|
||||
MessageKey.LOGIN_MESSAGE.getKey());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllHelpYmlFiles() {
|
||||
checkFiles(
|
||||
Pattern.compile("help_\\w+\\.yml"),
|
||||
MessagePathHelper::isHelpFile,
|
||||
HelpSection.ALTERNATIVES.getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks all files in the messages folder that match the given pattern.
|
||||
*
|
||||
* @param pattern the pattern the file name needs to match
|
||||
* @param isRelevantFilePredicate predicate determining which files should be tested
|
||||
* @param mandatoryKey key present in all matched files
|
||||
*/
|
||||
private void checkFiles(Pattern pattern, String mandatoryKey) {
|
||||
private void checkFiles(Predicate<String> isRelevantFilePredicate, String mandatoryKey) {
|
||||
List<String> errors = new ArrayList<>();
|
||||
|
||||
boolean hasMatch = false;
|
||||
for (File file : messageFiles) {
|
||||
if (pattern.matcher(file.getName()).matches()) {
|
||||
if (isRelevantFilePredicate.test(file.getName())) {
|
||||
checkFile(file, mandatoryKey, errors);
|
||||
hasMatch = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!errors.isEmpty()) {
|
||||
fail("Errors while checking files matching '" + pattern + "':\n-" + String.join("\n-", errors));
|
||||
fail("Errors while checking files\n-" + String.join("\n-", errors));
|
||||
} else if (!hasMatch) {
|
||||
fail("Could not find any files satisfying pattern '" + pattern + "'");
|
||||
fail("Could not find any files matching criteria");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_MESSAGES_FILE;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
@@ -40,7 +41,7 @@ public class MessageUpdaterTest {
|
||||
@Test
|
||||
public void shouldNotUpdateDefaultFile() throws IOException {
|
||||
// given
|
||||
String messagesFilePath = "messages/messages_en.yml";
|
||||
String messagesFilePath = DEFAULT_MESSAGES_FILE;
|
||||
File messagesFile = temporaryFolder.newFile();
|
||||
Files.copy(TestHelper.getJarFile("/" + messagesFilePath), messagesFile);
|
||||
long modifiedDate = messagesFile.lastModified();
|
||||
@@ -60,7 +61,7 @@ public class MessageUpdaterTest {
|
||||
Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/messages_test.yml"), messagesFile);
|
||||
|
||||
// when
|
||||
boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "does-not-exist", "messages/messages_en.yml");
|
||||
boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "does-not-exist", DEFAULT_MESSAGES_FILE);
|
||||
|
||||
// then
|
||||
assertThat(wasChanged, equalTo(true));
|
||||
@@ -80,7 +81,7 @@ public class MessageUpdaterTest {
|
||||
Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/messages_en_old.yml"), messagesFile);
|
||||
|
||||
// when
|
||||
boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "messages/messages_en.yml", "messages/messages_en.yml");
|
||||
boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, DEFAULT_MESSAGES_FILE, DEFAULT_MESSAGES_FILE);
|
||||
|
||||
// then
|
||||
assertThat(wasChanged, equalTo(true));
|
||||
@@ -106,7 +107,7 @@ public class MessageUpdaterTest {
|
||||
Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/messages_test2.yml"), messagesFile);
|
||||
|
||||
// when
|
||||
boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "messages/messages_en.yml", "messages/messages_en.yml");
|
||||
boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, DEFAULT_MESSAGES_FILE, DEFAULT_MESSAGES_FILE);
|
||||
|
||||
// then
|
||||
assertThat(wasChanged, equalTo(true));
|
||||
|
||||
Reference in New Issue
Block a user