/******************************************************************************* * 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.chat.channels.container; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.io.File; import java.io.IOException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.junit.After; import org.junit.Before; import org.junit.Test; import de.tobiyas.racesandclasses.generate.plugin.GenerateRaces; import de.tobiyas.racesandclasses.util.chat.ChannelLevel; import de.tobiyas.util.config.YAMLConfigExtended; import de.tobiyas.utils.tests.generate.server.GenerateBukkitServer; public abstract class AbstractChannelContainerTest { protected ChannelContainer sut; protected String neededPW = ""; protected String channelName = "test"; protected String addingPlayer = "addMe"; protected String notAddedPlayer = "meNoWant"; protected String offlinePlayer = "offline"; @Before public void generateTestEnvironmente() throws ChannelInvalidException{ GenerateBukkitServer.generateServer(); GenerateRaces.generateRaces(); GenerateBukkitServer.generatePlayerOnServer(addingPlayer); GenerateBukkitServer.generatePlayerOnServer(notAddedPlayer); sut = generateSut(); } protected abstract ChannelContainer generateSut() throws ChannelInvalidException; @After public void tearDown(){ GenerateBukkitServer.dropServer(); GenerateRaces.dropMock(); } @Test public void add_Player_to_container_adds_player(){ sut.addPlayerToChannel(addingPlayer, neededPW, false); assertTrue(sut.isMember(addingPlayer)); } @Test public void removing_player_removes_player(){ sut.addPlayerToChannel(addingPlayer, neededPW, false); assertTrue(sut.isMember(addingPlayer)); sut.removePlayerFromChannel(addingPlayer, false); assertFalse(sut.isMember(addingPlayer)); } @Test public void adding_already_added_player_returns_false(){ sut.addPlayerToChannel(addingPlayer, neededPW, false); assertTrue(sut.isMember(addingPlayer)); sut.addPlayerToChannel(addingPlayer, neededPW, false); Player playerMock = Bukkit.getPlayer(addingPlayer); verify(playerMock, times(1)).sendMessage(anyString()); } @Test public void banned_player_can_not_join(){ sut.addPlayerToChannel(addingPlayer, neededPW, false); sut.banAndRemovePlayer(addingPlayer, 1337); assertTrue(sut.isBanned(addingPlayer)); assertFalse(sut.isMember(addingPlayer)); sut.addPlayerToChannel(addingPlayer, neededPW, false); assertFalse(sut.isMember(addingPlayer)); Player mockPlayer = Bukkit.getPlayer(addingPlayer); verify(mockPlayer, times(1)).sendMessage(anyString()); sut.unbanPlayer(addingPlayer); assertFalse(sut.isBanned(addingPlayer)); sut.addPlayerToChannel(addingPlayer, neededPW, false); assertTrue(sut.isMember(addingPlayer)); } @Test public void muting_player_mutes_player(){ sut.addPlayerToChannel(addingPlayer, neededPW, false); sut.mutePlayer(addingPlayer, 1337); assertTrue(sut.isMuted(addingPlayer)); sut.unmutePlayer(addingPlayer); assertFalse(sut.isMuted(addingPlayer)); } @Test public void setting_channelAdmin_works(){ assertEquals("", sut.getAdmin()); sut.addPlayerToChannel(addingPlayer, neededPW, false); sut.setAdmin(addingPlayer); assertEquals(addingPlayer, sut.getAdmin()); } @Test //This test needs to be overriden for Password related tests public void setting_password_works(){ String password = "123"; sut.setPassword(password); //This needs to be different for Password related Tests assertEquals(neededPW, sut.getPassword()); } @Test public void saving_channel_works() throws IOException{ File tempFile = File.createTempFile("channelContainerTemp", ".yml"); try{ YAMLConfigExtended config = new YAMLConfigExtended(tempFile).load(); if(!config.getValidLoad()){ fail("Config could not be loaded correct."); } sut.saveChannel(config); String channelPre = "channel." + sut.getChannelLevel().name() + "." + sut.getChannelName(); assertTrue(config.isConfigurationSection(channelPre)); assertTrue(config.isConfigurationSection(channelPre + ".banned")); //TODO check why this fails assertTrue(config.isConfigurationSection(channelPre + ".muted")); //TODO check why this fails assertEquals("�f[", config.getString(channelPre + ".prefix")); assertEquals("�f]", config.getString(channelPre + ".suffix")); assertEquals("", config.getString(channelPre + ".channelColor")); assertEquals("[]", config.getString(channelPre + ".members")); assertEquals("", config.getString(channelPre + ".channelFormat")); assertEquals(neededPW, config.getString(channelPre + ".channelPassword")); assertEquals("", config.getString(channelPre + ".channelAdmin")); assertTrue(config.getBoolean(channelPre + ".saveLoad")); }finally{ tempFile.delete(); } } @Test public void editing_channel_works() throws IOException{ sut.setAdmin(addingPlayer); Player player = Bukkit.getPlayer(addingPlayer); sut.editChannel(player, "format", "123"); sut.editChannel(player, "color", "123"); sut.editChannel(player, "prefix", "123"); sut.editChannel(player, "suffix", "123"); sut.editChannel(player, "password", neededPW); sut.editChannel(player, "format", "123"); sut.editChannel(player, "invalied", "123"); //easiest way to check the stats File tempFile = File.createTempFile("channelContainerTemp", ".yml"); try{ YAMLConfigExtended config = new YAMLConfigExtended(tempFile).load(); if(!config.getValidLoad()){ fail("Config could not be loaded correct."); } sut.saveChannel(config); String channelPre = "channel." + sut.getChannelLevel().name() + "." + sut.getChannelName(); assertTrue(config.isConfigurationSection(channelPre)); assertTrue(config.isConfigurationSection(channelPre + ".banned")); //TODO check why this fails assertTrue(config.isConfigurationSection(channelPre + ".muted")); //TODO check why this fails assertEquals("123", config.getString(channelPre + ".prefix")); assertEquals("123", config.getString(channelPre + ".suffix")); assertEquals("123", config.getString(channelPre + ".channelColor")); assertEquals("[addMe]", config.getString(channelPre + ".members")); assertEquals("123", config.getString(channelPre + ".channelFormat")); assertEquals("addMe", config.getString(channelPre + ".channelAdmin")); assertTrue(config.getBoolean(channelPre + ".saveLoad")); }finally{ tempFile.delete(); } } @Test public void test_player_post_info(){ sut.setAdmin(addingPlayer); Player player = Bukkit.getPlayer(addingPlayer); sut.postInfo(player); verify(player, times(8)).sendMessage(anyString()); } @Test public void loading_from_yaml_file_works() throws IOException, ChannelInvalidException{ //easiest way to check the stats File tempFile = File.createTempFile("channelContainerTemp", ".yml"); try{ YAMLConfigExtended config = new YAMLConfigExtended(tempFile).load(); if(!config.getValidLoad()){ fail("Config could not be loaded correct."); } String channelName = "test123"; ChannelLevel level = sut.getChannelLevel(); String channelPre = "channel." + level + "." + channelName; config.createSection(channelPre); config.createSection(channelPre + ".banned"); config.createSection(channelPre + ".muted"); config.set(channelPre + ".prefix", "123"); config.set(channelPre + ".suffix", "123"); config.set(channelPre + ".channelColor", "123"); config.set(channelPre + ".members", "[addMe]"); config.set(channelPre + ".channelFormat", "123"); config.set(channelPre + ".channelPassword", neededPW); config.set(channelPre + ".channelAdmin", "addMe"); config.set(channelPre + ".saveLoad", true); config.save(); sut = ChannelContainer.constructFromYml(config, channelName, level); //Just test some fields assertEquals(addingPlayer, sut.getAdmin()); assertEquals(neededPW, sut.getPassword()); }finally{ tempFile.delete(); } } }