From 1f2a823f99c085592629d47bc54256d00103885e Mon Sep 17 00:00:00 2001 From: ljacqu Date: Fri, 3 Jun 2016 13:36:33 +0200 Subject: [PATCH] Add tests for PluginHooks - Multiverse interactions --- .../xephi/authme/hooks/PluginHooksTest.java | 103 +++++++++++++++++- 1 file changed, 97 insertions(+), 6 deletions(-) diff --git a/src/test/java/fr/xephi/authme/hooks/PluginHooksTest.java b/src/test/java/fr/xephi/authme/hooks/PluginHooksTest.java index e8475d9cb..eef561443 100644 --- a/src/test/java/fr/xephi/authme/hooks/PluginHooksTest.java +++ b/src/test/java/fr/xephi/authme/hooks/PluginHooksTest.java @@ -2,8 +2,13 @@ package fr.xephi.authme.hooks; import com.earth2me.essentials.Essentials; import com.earth2me.essentials.User; +import com.onarandombox.MultiverseCore.MultiverseCore; +import com.onarandombox.MultiverseCore.api.MVWorldManager; +import com.onarandombox.MultiverseCore.api.MultiverseWorld; import fr.xephi.authme.ReflectionTestUtils; import fr.xephi.authme.TestHelper; +import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -20,6 +25,7 @@ import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; /** @@ -27,6 +33,11 @@ import static org.mockito.Mockito.verify; */ public class PluginHooksTest { + /** The plugin name of Essentials. */ + private static final String ESSENTIALS = "Essentials"; + /** The plugin name of Multiverse-Core. */ + private static final String MULTIVERSE = "Multiverse-Core"; + @BeforeClass public static void setLogger() { TestHelper.setupLogger(); @@ -37,7 +48,7 @@ public class PluginHooksTest { // given PluginManager pluginManager = mock(PluginManager.class); PluginHooks pluginHooks = new PluginHooks(pluginManager); - setPluginAvailable(pluginManager, "Essentials", Essentials.class); + setPluginAvailable(pluginManager, ESSENTIALS, Essentials.class); assertThat(pluginHooks.isEssentialsAvailable(), equalTo(false)); // when @@ -53,7 +64,7 @@ public class PluginHooksTest { public void shouldHookIntoEssentialsAtInitialization() { // given PluginManager pluginManager = mock(PluginManager.class); - setPluginAvailable(pluginManager, "Essentials", Essentials.class); + setPluginAvailable(pluginManager, ESSENTIALS, Essentials.class); // when PluginHooks pluginHooks = new PluginHooks(pluginManager); @@ -62,6 +73,19 @@ public class PluginHooksTest { assertThat(pluginHooks.isEssentialsAvailable(), equalTo(true)); } + @Test + public void shouldHookIntoMultiverseAtInitialization() { + // given + PluginManager pluginManager = mock(PluginManager.class); + setPluginAvailable(pluginManager, MULTIVERSE, MultiverseCore.class); + + // when + PluginHooks pluginHooks = new PluginHooks(pluginManager); + + // then + assertThat(pluginHooks.isMultiverseAvailable(), equalTo(true)); + } + @Test public void shouldReturnEssentialsDataFolder() { // given @@ -71,7 +95,7 @@ public class PluginHooksTest { ReflectionTestUtils.setField(JavaPlugin.class, ess, "dataFolder", essDataFolder); PluginManager pluginManager = mock(PluginManager.class); - setPluginAvailable(pluginManager, "Essentials", ess); + setPluginAvailable(pluginManager, ESSENTIALS, ess); PluginHooks pluginHooks = new PluginHooks(pluginManager); // when @@ -104,7 +128,7 @@ public class PluginHooksTest { given(ess.getUser(player)).willReturn(user); PluginManager pluginManager = mock(PluginManager.class); - setPluginAvailable(pluginManager, "Essentials", ess); + setPluginAvailable(pluginManager, ESSENTIALS, ess); PluginHooks pluginHooks = new PluginHooks(pluginManager); // when @@ -125,17 +149,20 @@ public class PluginHooksTest { } @Test - public void shouldUnhookEssentials() { + public void shouldUnhookEssentialsAndMultiverse() { // given PluginManager pluginManager = mock(PluginManager.class); - setPluginAvailable(pluginManager, "Essentials", Essentials.class); + setPluginAvailable(pluginManager, ESSENTIALS, Essentials.class); + setPluginAvailable(pluginManager, MULTIVERSE, MultiverseCore.class); PluginHooks pluginHooks = new PluginHooks(pluginManager); // when pluginHooks.unhookEssentials(); + pluginHooks.unhookMultiverse(); // then assertThat(pluginHooks.isEssentialsAvailable(), equalTo(false)); + assertThat(pluginHooks.isMultiverseAvailable(), equalTo(false)); } @Test @@ -154,6 +181,70 @@ public class PluginHooksTest { assertThat(pluginHooks.isCombatTagPlusAvailable(), equalTo(false)); } + @Test + public void shouldReturnNullForUnavailableMultiverse() { + // given + PluginManager pluginManager = mock(PluginManager.class); + PluginHooks pluginHooks = new PluginHooks(pluginManager); + World world = mock(World.class); + + // when + Location result = pluginHooks.getMultiverseSpawn(world); + + // then + assertThat(result, nullValue()); + } + + @Test + public void shouldGetMultiverseSpawn() { + // given + Location location = mock(Location.class); + MultiverseWorld multiverseWorld = mock(MultiverseWorld.class); + given(multiverseWorld.getSpawnLocation()).willReturn(location); + + World world = mock(World.class); + MVWorldManager mvWorldManager = mock(MVWorldManager.class); + given(mvWorldManager.isMVWorld(world)).willReturn(true); + given(mvWorldManager.getMVWorld(world)).willReturn(multiverseWorld); + MultiverseCore multiverse = mock(MultiverseCore.class); + given(multiverse.getMVWorldManager()).willReturn(mvWorldManager); + + PluginManager pluginManager = mock(PluginManager.class); + setPluginAvailable(pluginManager, MULTIVERSE, multiverse); + PluginHooks pluginHooks = new PluginHooks(pluginManager); + + // when + Location spawn = pluginHooks.getMultiverseSpawn(world); + + // then + assertThat(spawn, equalTo(location)); + verify(mvWorldManager).isMVWorld(world); + verify(mvWorldManager).getMVWorld(world); + verify(multiverseWorld).getSpawnLocation(); + } + + @Test + public void shouldReturnNullForNonMvWorld() { + // given + World world = mock(World.class); + MVWorldManager mvWorldManager = mock(MVWorldManager.class); + given(mvWorldManager.isMVWorld(world)).willReturn(false); + + PluginManager pluginManager = mock(PluginManager.class); + MultiverseCore multiverse = mock(MultiverseCore.class); + setPluginAvailable(pluginManager, MULTIVERSE, multiverse); + given(multiverse.getMVWorldManager()).willReturn(mvWorldManager); + PluginHooks pluginHooks = new PluginHooks(pluginManager); + + // when + Location spawn = pluginHooks.getMultiverseSpawn(world); + + // then + assertThat(spawn, nullValue()); + verify(mvWorldManager).isMVWorld(world); + verify(mvWorldManager, never()).getMVWorld(world); + } + private static void setPluginAvailable(PluginManager managerMock, String pluginName, Class pluginClass) { setPluginAvailable(managerMock, pluginName, mock(pluginClass));