bentobox/src/test/java/world/bentobox/bentobox/hooks/MythicMobsHookTest.java

166 lines
5.1 KiB
Java

package world.bentobox.bentobox.hooks;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Optional;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import io.lumine.mythic.api.mobs.MythicMob;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.core.mobs.ActiveMob;
import io.lumine.mythic.core.mobs.MobExecutor;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity.MythicMobRecord;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ BentoBox.class, Bukkit.class, MythicBukkit.class })
public class MythicMobsHookTest {
@Mock
private BentoBox plugin;
@Mock
private PluginManager pim;
@Mock
private Plugin mythicMobs;
@Mock
private Location location;
@Mock
private World world;
// DUT
MythicMobsHook hook;
@Mock
private MythicBukkit mythicBukkit;
@Mock
private MobExecutor mm;
@Mock
private MythicMob mythicMob;
@Mock
private ActiveMob activeMob;
@Mock
private Entity entity;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
// Set up plugin
plugin = mock(BentoBox.class);
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
// Bukkit
PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS);
when(Bukkit.getPluginManager()).thenReturn(pim);
when(pim.getPlugin("MythicMobs")).thenReturn(mythicMobs);
// Location
when(world.getName()).thenReturn("bskyblock");
when(location.getWorld()).thenReturn(world);
// Entity
when(entity.getUniqueId()).thenReturn(UUID.randomUUID());
// MythicMobs
PowerMockito.mockStatic(MythicBukkit.class, Mockito.RETURNS_MOCKS);
when(MythicBukkit.inst()).thenReturn(mythicBukkit);
when(mythicBukkit.getMobManager()).thenReturn(mm);
when(mm.getMythicMob(anyString())).thenReturn(Optional.of(mythicMob));
when(activeMob.getDisplayName()).thenReturn("Minion");
when(activeMob.getMobType()).thenReturn("GIANT");
when(activeMob.getStance()).thenReturn("default");
when(activeMob.getLevel()).thenReturn(2.5D);
when(activeMob.getPower()).thenReturn(33.2F);
when(mm.getActiveMob(any())).thenReturn(Optional.of(activeMob));
hook = new MythicMobsHook();
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
}
/**
* Test method for {@link world.bentobox.bentobox.hooks.MythicMobsHook#hook()}.
*/
@Test
public void testHook() {
assertTrue(hook.hook());
}
/**
* Test method for {@link world.bentobox.bentobox.hooks.MythicMobsHook#getFailureCause()}.
*/
@Test
public void testGetFailureCause() {
assertNull(hook.getFailureCause());
}
/**
* Test method for {@link world.bentobox.bentobox.hooks.MythicMobsHook#MythicMobsHook()}.
*/
@Test
public void testMythicMobsHook() {
assertNotNull(hook);
assertEquals(Material.CREEPER_HEAD, hook.getIcon());
}
/**
* Test method for {@link world.bentobox.bentobox.hooks.MythicMobsHook#isMythicMob(org.bukkit.entity.Entity)}.
*/
@Test
public void testIsMythicMob() {
assertFalse(hook.isMythicMob(entity));
}
/**
* Test method for {@link world.bentobox.bentobox.hooks.MythicMobsHook#getMythicMob(org.bukkit.entity.Entity)}.
*/
@Test
public void testGetMythicMob() {
MythicMobRecord mmr = hook.getMythicMob(entity);
assertEquals("GIANT", mmr.type());
assertEquals("Minion", mmr.displayName());
assertEquals("default", mmr.stance());
assertEquals(2.5D, mmr.level(), 0D);
assertEquals(33.2F, mmr.power(), 0F);
}
/**
* Test method for {@link world.bentobox.bentobox.hooks.MythicMobsHook#spawnMythicMob(world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity.MythicMobRecord, org.bukkit.Location)}.
*/
@Test
public void testSpawnMythicMob() {
MythicMobRecord mmr = hook.getMythicMob(entity);
assertTrue(hook.spawnMythicMob(mmr, location));
verify(mm).getMythicMob("GIANT");
}
}