/******************************************************************************* * Copyright 2014 Tobias Welther * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package de.tobiyas.racesandclasses.configuration.member.file; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.math.BigInteger; import java.security.SecureRandom; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import de.tobiyas.racesandclasses.generate.plugin.GenerateRaces; import de.tobiyas.utils.tests.generate.server.GenerateBukkitServer; public class MemberConfigTest { private String playerName = "playerUUID"; private MemberConfig sut; @Before public void init(){ GenerateBukkitServer.generateServer(); GenerateRaces.generateRaces(); playerName = StringGenerator.nextRandomString(120); sut = MemberConfig.createMemberConfig(playerName); } @After public void teardown(){ GenerateRaces.dropMock(); GenerateBukkitServer.dropServer(); } @Test public void constructor_sets_values_correct(){ assertEquals(playerName, sut.getPlayerUUID()); } @Test public void set_for_predefined_values_works(){ String newChannel = "Test"; assertTrue(sut.changeAttribute(MemberConfig.chatChannel, newChannel)); assertEquals(newChannel, sut.getCurrentChannel()); boolean newCooldownInform = false; assertTrue(sut.changeAttribute(MemberConfig.cooldownInformation, newCooldownInform)); assertEquals(newCooldownInform, sut.getInformCooldownReady()); int newDisplayInterval = 42; assertTrue(sut.changeAttribute(MemberConfig.displayInterval, newDisplayInterval)); assertEquals(newDisplayInterval, sut.getLifeDisplayInterval()); boolean newLifeDisplayEnable = true; assertTrue(sut.changeAttribute(MemberConfig.lifeDisplayEnable, newLifeDisplayEnable)); assertEquals(newLifeDisplayEnable, sut.getEnableLifeDisplay()); } @Test public void set_wrong_format_for_predefined_values_does_not_work(){ int newChannel = 42; assertFalse(sut.changeAttribute(MemberConfig.chatChannel, newChannel)); assertEquals("Global", sut.getCurrentChannel()); String newCooldownInform = "incorrect"; assertFalse(sut.changeAttribute(MemberConfig.cooldownInformation, newCooldownInform)); assertEquals(true, sut.getInformCooldownReady()); String newDisplayInterval = "incorrect"; assertFalse(sut.changeAttribute(MemberConfig.displayInterval, newDisplayInterval)); assertEquals(60, sut.getLifeDisplayInterval()); String newLifeDisplayEnable = "incorrect"; assertFalse(sut.changeAttribute(MemberConfig.lifeDisplayEnable, newLifeDisplayEnable)); assertEquals(false, sut.getEnableLifeDisplay()); } @Test public void change_unknown_operation_does_not_work(){ assertFalse(sut.changeAttribute("invalid", false)); } @Test public void getValue_works(){ assertEquals(sut.getCurrentChannel(), sut.getValueDisplayName(MemberConfig.chatChannel)); assertEquals(sut.getCurrentChannel(), sut.getValueOfPath("channelsCurrent")); } @Test public void getValue_on_non_existing_givs_null(){ assertNull(sut.getValueDisplayName("invalid")); assertNull(sut.getValueOfPath("invalid")); } @Test public void get_supported_values(){ List<String> supportedValues = sut.getSupportetAttributes(false); assertTrue(supportedValues.size() >= 4); assertTrue(supportedValues.contains(MemberConfig.chatChannel)); assertTrue(supportedValues.contains(MemberConfig.cooldownInformation)); assertTrue(supportedValues.contains(MemberConfig.displayInterval)); assertTrue(supportedValues.contains(MemberConfig.lifeDisplayEnable)); } @Test public void get_default_config(){ Map<String, Object> config = sut.getCurrentConfig(false); assertEquals("Global", config.get(MemberConfig.chatChannel)); assertEquals(true, config.get(MemberConfig.cooldownInformation)); assertEquals(60, config.get(MemberConfig.displayInterval)); assertEquals(false, config.get(MemberConfig.lifeDisplayEnable)); } @Test public void set_invisible_config_is_overall_invisible(){ String path = "path"; String displayName = "invis"; Object value = true; Object defaultValue = false; boolean visible = false; sut.addOption(path, displayName, value, defaultValue, visible); Map<String, Object> config = sut.getCurrentConfig(false); List<String> supportedValues = sut.getSupportetAttributes(false); assertFalse(config.containsKey(displayName)); assertFalse(supportedValues.contains(displayName)); config = sut.getCurrentConfig(true); supportedValues = sut.getSupportetAttributes(true); assertTrue(config.containsKey(displayName)); assertTrue(supportedValues.contains(displayName)); } @Test public void adding_invalid_options_does_not_work(){ String path = "path"; String displayName = "displayName"; Object value = true; Object defaultValue = false; boolean visible = false; //path already exists assertFalse(sut.addOption("channelsCurrent", displayName, value, defaultValue, visible)); //displayName already exists assertFalse(sut.addOption(path, MemberConfig.chatChannel, value, defaultValue, visible)); //Unknown Value assertFalse(sut.addOption(path, displayName, new LinkedList<String>(), defaultValue, visible)); } @Test public void setting_value_correct_works(){ String newValue = "Hallo"; assertTrue(sut.setValue(MemberConfig.chatChannel, newValue)); assertEquals(newValue, sut.getValueDisplayName(MemberConfig.chatChannel)); } @Test public void setting_value_incorect_returns_false(){ boolean newValue = false; Object valueBefore = sut.getValueDisplayName(MemberConfig.chatChannel); assertFalse(sut.setValue(MemberConfig.chatChannel, newValue)); assertEquals(valueBefore, sut.getValueDisplayName(MemberConfig.chatChannel)); } @Test public void setting_unknown_value_does_not_work(){ assertFalse(sut.setValue("invalid", false)); } @Ignore @Test public void loading_works_with_custom_operations() throws InterruptedException{ String path = "pathabcde"; String displayName = "displayNameabcde"; Object value = true; Object defaultValue = false; boolean visible = true; sut.addOption(path, displayName, value, defaultValue, visible); sut.save(); Thread.sleep(20); sut = MemberConfig.createMemberConfig(playerName); assertTrue(sut.containsValue(displayName)); assertEquals(value, sut.getValueDisplayName(displayName)); } public static class StringGenerator{ private static SecureRandom random = new SecureRandom(); /** * Generates a new String with a genetorLength = length. * WARING: length != String length. * * @param length * @return */ public static String nextRandomString(int length){ return new BigInteger(length, random).toString(32); } } }