bentobox/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java

1614 lines
60 KiB
Java
Raw Normal View History

package world.bentobox.bentobox.managers;
2018-03-12 01:21:15 +01:00
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;
2019-08-05 06:44:46 +02:00
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
2019-08-05 06:44:46 +02:00
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
2018-03-12 01:21:15 +01:00
import org.bukkit.Bukkit;
2019-05-27 02:35:19 +02:00
import org.bukkit.Chunk;
2018-03-12 01:21:15 +01:00
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Cow;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.PufferFish;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Slime;
import org.bukkit.entity.Wither;
import org.bukkit.entity.Zombie;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.PluginManager;
import org.bukkit.scheduler.BukkitScheduler;
import org.junit.After;
import org.junit.Before;
2018-03-12 01:21:15 +01:00
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
2018-03-12 01:21:15 +01:00
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;
import io.papermc.lib.PaperLib;
import io.papermc.lib.environments.CraftBukkitEnvironment;
import io.papermc.lib.environments.Environment;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.Settings;
import world.bentobox.bentobox.api.configuration.WorldSettings;
import world.bentobox.bentobox.api.events.island.IslandDeleteEvent;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.Database;
Database transition (#662) - JSON is now the default database type - JSON database files are now pretty-printed - It is now possible to migrate from a database type to another through the use of a command and specific transition database types - It is recommended to move from YAML to JSON. = Commits breakdown = * Proposal to make JSON the default database and retire YAML. * Make JSON file format easier to read. * Fix tests. * Adds a hybrid Yaml2Json database type. This database always tries to use JSON if it is available. If a YAML file is found, it will be loaded and replaced with a JSON file. * Move to generic database transition code * Better comments * Adds transitional database options so admins can choose. Adds Yaml2MySQL option and changes config.yml to add instructions. * Enables full database migration between databases. Adds /bbox migrate command. Adds a number of transition databases. DB starts transition when the server boots up and will migrate organically. The admin can force an immediate update using the bbox migrate command. This operation requires an API breaking change: Addons that use the Config API must now implement ConfigObject in their config class instead of DataObject. This is to differentiate YAML config classes from YAML database classes. If a class is already implements WorldSettings (GameModeAddons), then no change is required because WorldSettings implements ConfigObject now. If an old addon is used that does not implement ConfigObject, BentoBox will not load. * Added null check to YAML deletion * Removed the 2YAML transition dbs because YAML is deprecated. YAML does not support some data structures so conversion could corrupt data. * Fixed some javadoc and added missing DatabaseType#JSON2MARIADB * Renamed package database/transitiondb to database/transition
2019-05-08 21:15:22 +02:00
import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType;
import world.bentobox.bentobox.database.objects.Island;
import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup;
import world.bentobox.bentobox.lists.Flags;
import world.bentobox.bentobox.managers.island.IslandCache;
import world.bentobox.bentobox.util.Util;
2018-03-12 01:21:15 +01:00
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class, Location.class })
public class IslandsManagerTest extends AbstractCommonSetup {
2018-03-12 01:21:15 +01:00
@Mock
private BentoBox plugin;
private UUID uuid;
@Mock
private User user;
@Mock
private PlayersManager pm;
@Mock
private Player player;
@Mock
private World world;
@Mock
private Block space1;
@Mock
private Block ground;
@Mock
private Block space2;
@Mock
private Location location;
@Mock
private IslandWorldManager iwm;
@Mock
private IslandDeletionManager deletionManager;
@Mock
private IslandChunkDeletionManager chunkDeletionManager;
@Mock
private IslandCache islandCache;
private Optional<Island> optionalIsland;
@Mock
private Island island;
@Mock
private PluginManager pim;
// Database
Database<Island> db;
@Mock
private Zombie zombie;
@Mock
private Slime slime;
@Mock
private Cow cow;
@Mock
private Wither wither;
@Mock
private Creeper creeper;
@Mock
private PufferFish pufferfish;
@Mock
private Skeleton skelly;
private Material sign;
private Material wallSign;
private Environment env;
// Class under test
IslandsManager im;
@Override
@SuppressWarnings("unchecked")
@Before
public void setUp() throws Exception {
super.setUp();
// Clear any lingering database
tearDown();
// Set up plugin
plugin = mock(BentoBox.class);
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
// island world mgr
when(world.getName()).thenReturn("world");
when(world.getEnvironment()).thenReturn(World.Environment.NORMAL);
when(iwm.inWorld(any(World.class))).thenReturn(true);
when(iwm.inWorld(any(Location.class))).thenReturn(true);
when(plugin.getIWM()).thenReturn(iwm);
// Settings
Settings s = mock(Settings.class);
when(plugin.getSettings()).thenReturn(s);
when(s.getDatabaseType()).thenReturn(DatabaseType.JSON);
// World
when(world.getEnvironment()).thenReturn(World.Environment.NORMAL);
// Command manager
CommandsManager cm = mock(CommandsManager.class);
when(plugin.getCommandsManager()).thenReturn(cm);
// Player
when(user.isOp()).thenReturn(false);
uuid = UUID.randomUUID();
when(user.getUniqueId()).thenReturn(uuid);
when(user.getPlayer()).thenReturn(player);
User.setPlugin(plugin);
// Set up user already
when(player.getUniqueId()).thenReturn(uuid);
User.getInstance(player);
// Locales
LocalesManager lm = mock(LocalesManager.class);
when(plugin.getLocalesManager()).thenReturn(lm);
when(lm.get(any(), any())).thenReturn("mock translation");
// Placeholders
PlaceholdersManager placeholdersManager = mock(PlaceholdersManager.class);
when(plugin.getPlaceholdersManager()).thenReturn(placeholdersManager);
when(placeholdersManager.replacePlaceholders(any(), any())).thenReturn("mock translation");
// Player's manager
when(plugin.getPlayers()).thenReturn(pm);
// Scheduler
BukkitScheduler sch = mock(BukkitScheduler.class);
PowerMockito.mockStatic(Bukkit.class);
when(Bukkit.getScheduler()).thenReturn(sch);
// version
when(Bukkit.getVersion())
.thenReturn("Paper version git-Paper-225 (MC: 1.14.4) (Implementing API version 1.14.4-R0.1-SNAPSHOT)");
// Standard location
when(location.getWorld()).thenReturn(world);
when(location.getBlock()).thenReturn(space1);
when(location.getWorld()).thenReturn(world);
when(location.clone()).thenReturn(location);
Chunk chunk = mock(Chunk.class);
when(location.getChunk()).thenReturn(chunk);
when(space1.getRelative(BlockFace.DOWN)).thenReturn(ground);
when(space1.getRelative(BlockFace.UP)).thenReturn(space2);
// A safe spot
when(ground.getType()).thenReturn(Material.STONE);
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.AIR);
// Neutral BlockState
BlockState blockState = mock(BlockState.class);
when(ground.getState()).thenReturn(blockState);
BlockData bd = mock(BlockData.class);
when(blockState.getBlockData()).thenReturn(bd);
// Online players
// Return a set of online players
when(Bukkit.getOnlinePlayers()).then((Answer<Set<Player>>) invocation -> new HashSet<>());
// Worlds
when(plugin.getIWM()).thenReturn(iwm);
// Default is player is in the world
when(iwm.inWorld(any(World.class))).thenReturn(true);
when(iwm.inWorld(any(Location.class))).thenReturn(true);
// Worlds translate to world
PowerMockito.mockStatic(Util.class);
when(Util.getWorld(any())).thenReturn(world);
// Island
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers()).thenReturn(null); // default
when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null); // default
when(island.getCenter()).thenReturn(location);
when(island.getProtectionCenter()).thenReturn(location);
// Mock island cache
when(islandCache.getIslandAt(any(Location.class))).thenReturn(island);
when(islandCache.get(any(), any())).thenReturn(island);
optionalIsland = Optional.ofNullable(island);
when(islandCache.getIslands(world, uuid)).thenReturn(List.of(island));
// User location
when(user.getLocation()).thenReturn(location);
// Plugin Manager for events
when(Bukkit.getPluginManager()).thenReturn(pim);
// Addon
when(iwm.getAddon(any())).thenReturn(Optional.empty());
// Cover hostile entities
when(Util.isHostileEntity(any())).thenCallRealMethod();
// Set up island entities
WorldSettings ws = mock(WorldSettings.class);
when(iwm.getWorldSettings(eq(world))).thenReturn(ws);
Map<String, Boolean> worldFlags = new HashMap<>();
when(ws.getWorldFlags()).thenReturn(worldFlags);
Flags.REMOVE_MOBS.setSetting(world, true);
// Default whitelist
Set<EntityType> whitelist = new HashSet<>();
whitelist.add(EntityType.ENDERMAN);
whitelist.add(EntityType.WITHER);
whitelist.add(EntityType.ZOMBIE_VILLAGER);
when(iwm.getRemoveMobsWhitelist(any())).thenReturn(whitelist);
// Monsters and animals
when(zombie.getLocation()).thenReturn(location);
when(zombie.getType()).thenReturn(EntityType.ZOMBIE);
when(zombie.getRemoveWhenFarAway()).thenReturn(true);
when(slime.getLocation()).thenReturn(location);
when(slime.getType()).thenReturn(EntityType.SLIME);
when(slime.getRemoveWhenFarAway()).thenReturn(true);
when(cow.getLocation()).thenReturn(location);
when(cow.getType()).thenReturn(EntityType.COW);
when(wither.getType()).thenReturn(EntityType.WITHER);
when(wither.getRemoveWhenFarAway()).thenReturn(true);
when(creeper.getType()).thenReturn(EntityType.CREEPER);
when(creeper.getRemoveWhenFarAway()).thenReturn(true);
when(pufferfish.getType()).thenReturn(EntityType.PUFFERFISH);
// Named monster
when(skelly.getType()).thenReturn(EntityType.SKELETON);
when(skelly.getCustomName()).thenReturn("Skelly");
when(skelly.getRemoveWhenFarAway()).thenReturn(true);
Collection<Entity> collection = new ArrayList<>();
collection.add(player);
collection.add(zombie);
collection.add(cow);
collection.add(slime);
collection.add(wither);
collection.add(creeper);
collection.add(pufferfish);
collection.add(skelly);
when(world.getNearbyEntities(any(Location.class), Mockito.anyDouble(), Mockito.anyDouble(),
Mockito.anyDouble())).thenReturn(collection);
// Deletion Manager
when(deletionManager.getIslandChunkDeletionManager()).thenReturn(chunkDeletionManager);
when(plugin.getIslandDeletionManager()).thenReturn(deletionManager);
// database must be mocked here
db = mock(Database.class);
// Signs
sign = Material.BIRCH_SIGN;
wallSign = Material.ACACIA_WALL_SIGN;
// PaperLib
env = new CraftBukkitEnvironment();
PaperLib.setCustomEnvironment(env);
// Util strip spaces
when(Util.stripSpaceAfterColorCodes(anyString())).thenCallRealMethod();
// Class under test
im = new IslandsManager(plugin);
// Set cache
// im.setIslandCache(islandCache);
}
@Override
@After
public void tearDown() throws Exception {
super.tearDown();
Mockito.framework().clearInlineMocks();
deleteAll(new File("database"));
deleteAll(new File("database_backup"));
}
private void deleteAll(File file) throws IOException {
if (file.exists()) {
Files.walk(file.toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
}
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testIsSafeLocationSafe() {
assertTrue(im.isSafeLocation(location));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testIsSafeLocationNullWorld() {
when(location.getWorld()).thenReturn(null);
2021-02-28 17:10:18 +01:00
assertFalse(im.isSafeLocation(location));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testIsSafeLocationNonSolidGround() {
when(ground.getType()).thenReturn(Material.WATER);
2021-02-28 17:10:18 +01:00
assertFalse(im.isSafeLocation(location));
}
2018-03-12 01:21:15 +01:00
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testIsSafeLocationSubmerged() {
when(ground.getType()).thenReturn(Material.STONE);
when(space1.getType()).thenReturn(Material.WATER);
when(space2.getType()).thenReturn(Material.WATER);
2021-02-28 17:10:18 +01:00
assertFalse(im.isSafeLocation(location));
}
2018-03-12 01:21:15 +01:00
@SuppressWarnings("deprecation")
@Test
public void testCheckIfSafeTrapdoor() {
for (Material d : Material.values()) {
if (d.name().contains("DOOR")) {
for (Material s : Material.values()) {
if (s.name().contains("_SIGN") && !s.isLegacy()) {
assertFalse("Fail " + d.name() + " " + s.name(), im.checkIfSafe(world, d, s, Material.AIR));
}
}
}
}
}
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testIsSafeLocationPortals() {
when(ground.getType()).thenReturn(Material.STONE);
when(space1.getType()).thenReturn(Material.AIR);
2018-08-01 11:21:29 +02:00
when(space2.getType()).thenReturn(Material.NETHER_PORTAL);
2021-02-28 17:10:18 +01:00
assertTrue(im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.STONE);
when(space1.getType()).thenReturn(Material.AIR);
2018-08-01 11:21:29 +02:00
when(space2.getType()).thenReturn(Material.END_PORTAL);
assertFalse(im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.STONE);
2018-08-01 11:21:29 +02:00
when(space1.getType()).thenReturn(Material.NETHER_PORTAL);
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertTrue(im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.STONE);
2018-08-01 11:21:29 +02:00
when(space1.getType()).thenReturn(Material.END_PORTAL);
when(space2.getType()).thenReturn(Material.AIR);
assertFalse(im.isSafeLocation(location));
2018-08-01 11:21:29 +02:00
when(ground.getType()).thenReturn(Material.NETHER_PORTAL);
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertFalse(im.isSafeLocation(location));
2018-08-01 11:21:29 +02:00
when(ground.getType()).thenReturn(Material.END_PORTAL);
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertFalse(im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.END_GATEWAY);
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.AIR);
assertFalse(im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.STONE);
when(space1.getType()).thenReturn(Material.END_GATEWAY);
when(space2.getType()).thenReturn(Material.AIR);
assertFalse(im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.STONE);
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.END_GATEWAY);
assertFalse(im.isSafeLocation(location));
}
2018-03-12 01:21:15 +01:00
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testIsSafeLocationLava() {
when(ground.getType()).thenReturn(Material.LAVA);
2018-03-12 01:21:15 +01:00
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertFalse("In lava", im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.AIR);
when(space1.getType()).thenReturn(Material.LAVA);
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertFalse("In lava", im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.AIR);
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.LAVA);
2021-02-28 17:10:18 +01:00
assertFalse("In lava", im.isSafeLocation(location));
}
2018-03-12 01:21:15 +01:00
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testTrapDoor() {
2018-08-01 11:21:29 +02:00
when(ground.getType()).thenReturn(Material.OAK_TRAPDOOR);
2021-02-28 17:10:18 +01:00
assertFalse("Open trapdoor", im.isSafeLocation(location));
when(ground.getType()).thenReturn(Material.IRON_TRAPDOOR);
2021-02-28 17:10:18 +01:00
assertFalse("Open iron trapdoor", im.isSafeLocation(location));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testBadBlocks() {
// Fences
when(ground.getType()).thenReturn(Material.SPRUCE_FENCE);
assertFalse("Fence :" + Material.SPRUCE_FENCE.toString(), im.isSafeLocation(location));
// Signs
sign = Material.BIRCH_SIGN;
when(ground.getType()).thenReturn(sign);
2021-02-28 17:10:18 +01:00
assertFalse("Sign", im.isSafeLocation(location));
wallSign = Material.ACACIA_WALL_SIGN;
when(ground.getType()).thenReturn(wallSign);
2021-02-28 17:10:18 +01:00
assertFalse("Sign", im.isSafeLocation(location));
// Bad Blocks
2018-08-01 11:21:29 +02:00
Material[] badMats = {Material.CACTUS, Material.OAK_BOAT};
Arrays.asList(badMats).forEach(m -> {
when(ground.getType()).thenReturn(m);
2021-02-28 17:10:18 +01:00
assertFalse("Bad mat :" + m.toString(), im.isSafeLocation(location));
});
}
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
*/
@Test
public void testSolidBlocks() {
when(space1.getType()).thenReturn(Material.STONE);
2021-02-28 17:10:18 +01:00
assertFalse("Solid", im.isSafeLocation(location));
2018-03-12 01:21:15 +01:00
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(Material.STONE);
2021-02-28 17:10:18 +01:00
assertFalse("Solid", im.isSafeLocation(location));
2018-03-12 01:21:15 +01:00
when(space1.getType()).thenReturn(wallSign);
2018-03-12 01:21:15 +01:00
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertTrue("Wall sign 1", im.isSafeLocation(location));
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(wallSign);
2021-02-28 17:10:18 +01:00
assertTrue("Wall sign 2", im.isSafeLocation(location));
when(space1.getType()).thenReturn(sign);
when(space2.getType()).thenReturn(Material.AIR);
2021-02-28 17:10:18 +01:00
assertTrue("Wall sign 1", im.isSafeLocation(location));
when(space1.getType()).thenReturn(Material.AIR);
when(space2.getType()).thenReturn(sign);
2021-02-28 17:10:18 +01:00
assertTrue("Wall sign 2", im.isSafeLocation(location));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#createIsland(org.bukkit.Location)}.
*/
@Test
public void testCreateIslandLocation() {
Island island = im.createIsland(location);
assertNotNull(island);
assertEquals(island.getCenter().getWorld(), location.getWorld());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#createIsland(org.bukkit.Location, java.util.UUID)}.
*/
@Test
public void testCreateIslandLocationUUID() {
UUID owner = UUID.randomUUID();
Island island = im.createIsland(location, owner);
assertNotNull(island);
assertEquals(island.getCenter().getWorld(), location.getWorld());
assertEquals(owner, island.getOwner());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#deleteIsland(world.bentobox.bentobox.database.objects.Island, boolean)}.
*/
@Test
public void testDeleteIslandIslandBooleanNoBlockRemoval() {
UUID owner = UUID.randomUUID();
Island island = im.createIsland(location, owner);
im.deleteIsland(island, false, owner);
assertNull(island.getOwner());
verify(pim).callEvent(any(IslandDeleteEvent.class));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#deleteIsland(world.bentobox.bentobox.database.objects.Island, boolean)}.
*/
@Test
public void testDeleteIslandIslandBooleanRemoveBlocks() {
verify(pim, never()).callEvent(any());
UUID owner = UUID.randomUUID();
Island island = im.createIsland(location, owner);
im.deleteIsland(island, true, owner);
assertNull(island.getOwner());
verify(pim).callEvent(any(IslandDeleteEvent.class));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getIslandCount()}.
*/
@Test
public void testGetCount() {
assertEquals(0, im.getIslandCount());
im.createIsland(location, UUID.randomUUID());
assertEquals(1, im.getIslandCount());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getIsland(World, User)}
*/
@Test
public void testGetIslandWorldUser() {
Island island = im.createIsland(location, user.getUniqueId());
assertEquals(island, im.getIsland(world, user));
assertNull(im.getIsland(world, (User) null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getIsland(World, UUID)}.
*/
@Test
public void testGetIsland() {
UUID owner = UUID.randomUUID();
Island island = im.createIsland(location, owner);
assertEquals(island, im.getIsland(world, owner));
assertNull(im.getIsland(world, UUID.randomUUID()));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getIslandAt(org.bukkit.Location)}.
*/
@Test
public void testGetIslandAtLocation() throws Exception {
im.setIslandCache(islandCache);
// In world, correct island
assertEquals(optionalIsland, im.getIslandAt(location));
// in world, wrong island
when(islandCache.getIslandAt(any(Location.class))).thenReturn(null);
assertEquals(Optional.empty(), im.getIslandAt(new Location(world, 100000, 120, -100000)));
// not in world
when(iwm.inWorld(any(World.class))).thenReturn(false);
when(iwm.inWorld(any(Location.class))).thenReturn(false);
assertEquals(Optional.empty(), im.getIslandAt(new Location(world, 100000, 120, -100000)));
assertEquals(Optional.empty(), im.getIslandAt(location));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getIslandLocation(World, UUID)}.
*/
@Test
public void testGetIslandLocation() {
Island i = im.createIsland(location, uuid);
assertEquals(world, im.getIslandLocation(world, uuid).getWorld());
assertEquals(i.getProtectionCenter(), im.getIslandLocation(world, uuid));
assertNull(im.getIslandLocation(world, UUID.randomUUID()));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getLast(World)}.
*/
@Test
public void testGetLast() {
im.setLast(location);
assertEquals(location, im.getLast(world));
assertNull(im.getLast(null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMembers(World, UUID)}.
*/
@Test
public void testGetMembers() {
// Mock island cache
Set<UUID> members = new HashSet<>();
members.add(UUID.randomUUID());
members.add(UUID.randomUUID());
members.add(UUID.randomUUID());
/*
* when(islandCache.getMembers(any(), any(),
* Mockito.anyInt())).thenReturn(members); im.setIslandCache(islandCache);
* assertEquals(members, im.getMembers(world, UUID.randomUUID()));
*/
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getProtectedIslandAt(org.bukkit.Location)}.
*/
@Test
public void testGetProtectedIslandAt() {
// Mock island cache
Island is = mock(Island.class);
when(islandCache.getIslandAt(any(Location.class))).thenReturn(is);
// In world
im.setIslandCache(islandCache);
Optional<Island> optionalIsland = Optional.ofNullable(is);
// In world, correct island
when(is.onIsland(any())).thenReturn(true);
assertEquals(optionalIsland, im.getProtectedIslandAt(location));
// Not in protected space
when(is.onIsland(any())).thenReturn(false);
assertEquals(Optional.empty(), im.getProtectedIslandAt(location));
im.setSpawn(is);
// In world, correct island
when(is.onIsland(any())).thenReturn(true);
assertEquals(optionalIsland, im.getProtectedIslandAt(location));
// Not in protected space
when(is.onIsland(any())).thenReturn(false);
assertEquals(Optional.empty(), im.getProtectedIslandAt(location));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getSafeHomeLocation(World, User, int)}.
*/
/*
* @Test public void testGetSafeHomeLocation() { im.setIslandCache(islandCache);
* when(island.getHome(any())).thenReturn(location);
* when(iwm.inWorld(eq(world))).thenReturn(true); assertEquals(location,
* im.getSafeHomeLocation(world, user, ""));
*
* // Change location so that it is not safe // TODO }
*/
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getSafeHomeLocation(World, User, int)}.
* Ensures that the method returns {@code null} if the world is not an island
* world.
*/
/*
* @Test public void testGetSafeHomeLocationWorldNotIslandWorld() {
* when(iwm.inWorld(world)).thenReturn(false);
* assertNull(im.getSafeHomeLocation(world, user, "")); }
*/
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getSafeHomeLocation(World, User, int)}.
*/
/*
* @Test public void testGetSafeHomeLocationNoIsland() {
* assertNull(im.getSafeHomeLocation(world, user, ""));
* verify(plugin).logWarning(eq("null player has no island in world world!")); }
*/
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getSpawnPoint(World)}.
*/
@Test
public void testGetSpawnPoint() {
assertNull(im.getSpawnPoint(world));
// Create a spawn island for this world
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Make a spawn position on the island
when(island.getSpawnPoint(any())).thenReturn(location);
// Set the spawn island
im.setSpawn(island);
assertEquals(location, im.getSpawnPoint(world));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#isAtSpawn(org.bukkit.Location)}.
*/
@Test
public void testIsAtSpawn() {
assertFalse(im.isAtSpawn(location));
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
when(island.onIsland(any())).thenReturn(true);
im.setSpawn(island);
assertTrue(im.isAtSpawn(location));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#isOwner(World, UUID)}.
*/
/*
* @Test public void testIsOwner() { // Mock island cache Island is =
* mock(Island.class);
*
* when(islandCache.getIslandAt(any())).thenReturn(is);
*
*
* im.setIslandCache(islandCache);
*
* assertFalse(im.isOwner(world, null));
*
* when(islandCache.hasIsland(any(), any())).thenReturn(false);
* assertFalse(im.isOwner(world, UUID.randomUUID()));
*
* when(islandCache.hasIsland(any(), any())).thenReturn(true);
* when(islandCache.get(any(), any(UUID.class))).thenReturn(is); UUID owner =
* UUID.randomUUID(); when(is.getOwner()).thenReturn(owner); UUID notOwner =
* UUID.randomUUID(); while (owner.equals(notOwner)) { notOwner =
* UUID.randomUUID(); } assertFalse(im.isOwner(world, notOwner));
* assertTrue(im.isOwner(world, owner)); }
*/
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#load()}.
*/
@Test
public void testLoad() {
//
// im.load();
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#locationIsOnIsland(org.bukkit.entity.Player, org.bukkit.Location)}.
*/
@Test
public void testLocationIsOnIsland() {
// Mock island cache
Island is = mock(Island.class);
when(islandCache.getIslandAt(any(Location.class))).thenReturn(is);
// In world
when(is.onIsland(any())).thenReturn(true);
Builder<UUID> members = new ImmutableSet.Builder<>();
members.add(uuid);
when(is.getMemberSet()).thenReturn(members.build());
when(player.getUniqueId()).thenReturn(uuid);
im.setIslandCache(islandCache);
assertFalse(im.locationIsOnIsland(null, null));
assertTrue(im.locationIsOnIsland(player, location));
// No members
Builder<UUID> mem = new ImmutableSet.Builder<>();
when(is.getMemberSet()).thenReturn(mem.build());
assertFalse(im.locationIsOnIsland(player, location));
// Not on island
when(is.getMemberSet()).thenReturn(members.build());
when(is.onIsland(any())).thenReturn(false);
assertFalse(im.locationIsOnIsland(player, location));
}
/**
* Test method for {@link IslandsManager#userIsOnIsland(World, User)}.
*/
@Test
public void testUserIsOnIsland() {
im.setIslandCache(islandCache);
// ----- CHECK INVALID ARGUMENTS -----
// Null user
assertFalse(im.userIsOnIsland(world, null));
// Null world
assertFalse(im.userIsOnIsland(null, user));
// Both null user and null world
assertFalse(im.userIsOnIsland(null, null));
// User is not a player
when(user.isPlayer()).thenReturn(false);
assertFalse(im.userIsOnIsland(world, user));
// ----- CHECK MEMBERSHIP -----
// We assume there that the User is in the good World.
when(user.getLocation().getWorld()).thenReturn(world);
when(user.isPlayer()).thenReturn(true);
// The method returns true if the user's location is on an island that has them
// as member (rank >= MEMBER)
when(island.onIsland(any())).thenReturn(true);
Map<UUID, Integer> members = new HashMap<>();
when(island.getMembers()).thenReturn(members);
// -- The user is not part of the island --
assertFalse(im.userIsOnIsland(world, user));
// -- The user is the owner of the island --
members.put(user.getUniqueId(), RanksManager.OWNER_RANK);
assertTrue(im.userIsOnIsland(world, user));
// Add some members to see if it still works
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
assertTrue(im.userIsOnIsland(world, user));
// Add some other ranks to see if it still works
members.put(UUID.randomUUID(), RanksManager.BANNED_RANK);
members.put(UUID.randomUUID(), RanksManager.BANNED_RANK);
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
members.put(UUID.randomUUID(), RanksManager.TRUSTED_RANK);
members.put(UUID.randomUUID(), RanksManager.BANNED_RANK);
assertTrue(im.userIsOnIsland(world, user));
// -- The user is a sub-owner on the island --
members.put(user.getUniqueId(), RanksManager.SUB_OWNER_RANK);
assertTrue(im.userIsOnIsland(world, user));
// -- The user is a member on the island --
members.put(user.getUniqueId(), RanksManager.MEMBER_RANK);
assertTrue(im.userIsOnIsland(world, user));
// -- The user is a trusted on the island --
members.put(user.getUniqueId(), RanksManager.TRUSTED_RANK);
assertTrue(im.userIsOnIsland(world, user));
// -- The user is a coop on the island --
members.put(user.getUniqueId(), RanksManager.COOP_RANK);
assertTrue(im.userIsOnIsland(world, user));
// -- The user is a visitor on the island --
members.remove(user.getUniqueId());
assertFalse(im.userIsOnIsland(world, user));
// -- The user is explicitly a visitor on the island --
members.put(user.getUniqueId(), RanksManager.VISITOR_RANK);
assertFalse(im.userIsOnIsland(world, user));
// -- The user is banned from the island --
members.put(user.getUniqueId(), RanksManager.BANNED_RANK);
assertFalse(im.userIsOnIsland(world, user));
// ----- CHECK WORLD -----
// Assertions above succeeded, so let's check that again with the User being a
// MEMBER and being in the wrong world.
when(user.getLocation().getWorld()).thenReturn(mock(World.class));
members.put(user.getUniqueId(), RanksManager.MEMBER_RANK);
assertFalse(im.userIsOnIsland(world, user));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#removePlayer(World, User)}.
*/
@Test
public void testRemovePlayer() {
im.removePlayer(world, uuid);
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#removePlayersFromIsland(world.bentobox.bentobox.database.objects.Island)}.
*/
@Test
public void testRemovePlayersFromIsland() {
Island is = mock(Island.class);
im.removePlayersFromIsland(is);
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#save(Island)}.
*/
@Test
public void testSave() {
// fail("Not yet implemented"); // TODO - warning saving stuff will go on the
// file system
}
/**
* Test method for .
*/
@Test
public void testSetIslandName() {
// fail("Not yet implemented"); // TODO
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#setJoinTeam(world.bentobox.bentobox.database.objects.Island, java.util.UUID)}.
*/
@Test
public void testSetJoinTeam() {
// fail("Not yet implemented"); // TODO
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#setLast(org.bukkit.Location)}.
*/
@Test
public void testSetLast() {
// fail("Not yet implemented"); // TODO
}
/**
* Test method for .
*/
@Test
public void testSetLeaveTeam() {
// fail("Not yet implemented"); // TODO
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#shutdown()}.
*/
@Test
public void testShutdown() {
// Mock island cache
Island is = mock(Island.class);
Collection<Island> collection = new ArrayList<>();
collection.add(is);
when(islandCache.getIslands()).thenReturn(collection);
im.setIslandCache(islandCache);
Map<UUID, Integer> members = new HashMap<>();
when(is.getMembers()).thenReturn(members);
// -- The user is the owner of the island --
members.put(user.getUniqueId(), RanksManager.OWNER_RANK);
// Add some members
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
// Add some coops
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
// Add some trusted
members.put(UUID.randomUUID(), RanksManager.TRUSTED_RANK);
members.put(UUID.randomUUID(), RanksManager.TRUSTED_RANK);
im.shutdown();
assertEquals(10, members.size());
verify(islandCache).clear();
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#clearRank(int, UUID)}.
*/
@Test
public void testClearRank() {
// Mock island cache
Island is = mock(Island.class);
Collection<Island> collection = new ArrayList<>();
collection.add(is);
when(islandCache.getIslands()).thenReturn(collection);
im.setIslandCache(islandCache);
Map<UUID, Integer> members = new HashMap<>();
when(is.getMembers()).thenReturn(members);
// -- The user is the owner of the island --
members.put(user.getUniqueId(), RanksManager.OWNER_RANK);
// Add some members
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
members.put(UUID.randomUUID(), RanksManager.MEMBER_RANK);
// Add some coops
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
members.put(UUID.randomUUID(), RanksManager.COOP_RANK);
// Add some trusted
members.put(UUID.randomUUID(), RanksManager.TRUSTED_RANK);
members.put(UUID.randomUUID(), RanksManager.TRUSTED_RANK);
// Add specific coop
UUID coopUUID = UUID.randomUUID();
members.put(coopUUID, RanksManager.COOP_RANK);
// Clear a random user
im.clearRank(RanksManager.COOP_RANK, UUID.randomUUID());
assertEquals(14, members.size());
im.clearRank(RanksManager.COOP_RANK, coopUUID);
assertEquals(13, members.size());
}
/**
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#clearArea(Location)}.
*/
@Test
public void testClearAreaWrongWorld() {
when(iwm.inWorld(any(Location.class))).thenReturn(false);
im.clearArea(location);
// No entities should be cleared
2019-08-05 06:44:46 +02:00
verify(zombie, never()).remove();
verify(player, never()).remove();
verify(cow, never()).remove();
verify(slime, never()).remove();
verify(wither, never()).remove();
verify(creeper, never()).remove();
verify(pufferfish, never()).remove();
verify(skelly, never()).remove();
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#clearArea(Location)}.
*/
@Test
public void testClearArea() {
im.clearArea(location);
// Only the correct entities should be cleared
verify(zombie).remove();
verify(player, never()).remove();
verify(cow, never()).remove();
verify(slime).remove();
verify(wither, never()).remove();
verify(creeper).remove();
verify(pufferfish, never()).remove();
verify(skelly, never()).remove();
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getIslandById(String)}.
*/
@Test
public void testGetIslandByIdString() {
Island island = mock(Island.class);
String uuid = UUID.randomUUID().toString();
when(islandCache.getIslandById(anyString())).thenReturn(island);
// Test
im.setIslandCache(islandCache);
assertEquals(island, im.getIslandById(uuid).get());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenter() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Island center
when(location.getBlockX()).thenReturn(0);
when(location.getBlockY()).thenReturn(120);
when(location.getBlockZ()).thenReturn(0);
when(island.getCenter()).thenReturn(location);
// Start x,z
when(iwm.getIslandStartX(eq(world))).thenReturn(0);
when(iwm.getIslandStartZ(eq(world))).thenReturn(0);
// Offset x,z
when(iwm.getIslandXOffset(eq(world))).thenReturn(0);
when(iwm.getIslandZOffset(eq(world))).thenReturn(0);
// World
when(iwm.inWorld(eq(world))).thenReturn(true);
// Island distance
when(iwm.getIslandDistance(eq(world))).thenReturn(100);
// Test
assertFalse(im.fixIslandCenter(island));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenterOff() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Island center
when(location.getBlockX()).thenReturn(10);
when(location.getBlockY()).thenReturn(120);
when(location.getBlockZ()).thenReturn(-10);
when(island.getCenter()).thenReturn(location);
// Start x,z
when(iwm.getIslandStartX(eq(world))).thenReturn(0);
when(iwm.getIslandStartZ(eq(world))).thenReturn(0);
// Offset x,z
when(iwm.getIslandXOffset(eq(world))).thenReturn(0);
when(iwm.getIslandZOffset(eq(world))).thenReturn(0);
// World
when(iwm.inWorld(eq(world))).thenReturn(true);
// Island distance
when(iwm.getIslandDistance(eq(world))).thenReturn(100);
// Test
ArgumentCaptor<Location> captor = ArgumentCaptor.forClass(Location.class);
assertTrue(im.fixIslandCenter(island));
// Verify location
verify(island).setCenter(captor.capture());
assertEquals(world, captor.getValue().getWorld());
assertEquals(0, captor.getValue().getBlockX());
assertEquals(120, captor.getValue().getBlockY());
assertEquals(0, captor.getValue().getBlockZ());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenterOffStart() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Island center
when(location.getBlockX()).thenReturn(100010);
when(location.getBlockY()).thenReturn(120);
when(location.getBlockZ()).thenReturn(8755);
when(island.getCenter()).thenReturn(location);
// Start x,z
when(iwm.getIslandStartX(eq(world))).thenReturn(100000);
when(iwm.getIslandStartZ(eq(world))).thenReturn(8765);
// Offset x,z
when(iwm.getIslandXOffset(eq(world))).thenReturn(0);
when(iwm.getIslandZOffset(eq(world))).thenReturn(0);
// World
when(iwm.inWorld(eq(world))).thenReturn(true);
// Island distance
when(iwm.getIslandDistance(eq(world))).thenReturn(100);
// Test
ArgumentCaptor<Location> captor = ArgumentCaptor.forClass(Location.class);
assertTrue(im.fixIslandCenter(island));
// Verify location
verify(island).setCenter(captor.capture());
assertEquals(world, captor.getValue().getWorld());
assertEquals(100000, captor.getValue().getBlockX());
assertEquals(120, captor.getValue().getBlockY());
assertEquals(8765, captor.getValue().getBlockZ());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenterStartOnGrid() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Island center
when(location.getBlockX()).thenReturn(10000);
when(location.getBlockY()).thenReturn(120);
when(location.getBlockZ()).thenReturn(8765);
when(island.getCenter()).thenReturn(location);
// Start x,z
when(iwm.getIslandStartX(eq(world))).thenReturn(100000);
when(iwm.getIslandStartZ(eq(world))).thenReturn(8765);
// Offset x,z
when(iwm.getIslandXOffset(eq(world))).thenReturn(0);
when(iwm.getIslandZOffset(eq(world))).thenReturn(0);
// World
when(iwm.inWorld(eq(world))).thenReturn(true);
// Island distance
when(iwm.getIslandDistance(eq(world))).thenReturn(100);
// Test
assertFalse(im.fixIslandCenter(island));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenterStartOnGridOffset() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Island center
when(location.getBlockX()).thenReturn(10050);
when(location.getBlockY()).thenReturn(120);
when(location.getBlockZ()).thenReturn(8815);
when(island.getCenter()).thenReturn(location);
// Start x,z
when(iwm.getIslandStartX(eq(world))).thenReturn(100000);
when(iwm.getIslandStartZ(eq(world))).thenReturn(8765);
// Offset x,z
when(iwm.getIslandXOffset(eq(world))).thenReturn(50);
when(iwm.getIslandZOffset(eq(world))).thenReturn(50);
// World
when(iwm.inWorld(eq(world))).thenReturn(true);
// Island distance
when(iwm.getIslandDistance(eq(world))).thenReturn(100);
// Test
assertFalse(im.fixIslandCenter(island));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenterOffStartOffOffset() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(world);
// Island center
when(location.getBlockX()).thenReturn(100060);
when(location.getBlockY()).thenReturn(120);
when(location.getBlockZ()).thenReturn(8815);
when(island.getCenter()).thenReturn(location);
// Start x,z
when(iwm.getIslandStartX(eq(world))).thenReturn(100000);
when(iwm.getIslandStartZ(eq(world))).thenReturn(8765);
// Offset x,z
when(iwm.getIslandXOffset(eq(world))).thenReturn(50);
when(iwm.getIslandZOffset(eq(world))).thenReturn(50);
// World
when(iwm.inWorld(eq(world))).thenReturn(true);
// Island distance
when(iwm.getIslandDistance(eq(world))).thenReturn(100);
// Test
ArgumentCaptor<Location> captor = ArgumentCaptor.forClass(Location.class);
assertTrue(im.fixIslandCenter(island));
// Verify location
verify(island).setCenter(captor.capture());
assertEquals(world, captor.getValue().getWorld());
assertEquals(100050, captor.getValue().getBlockX());
assertEquals(120, captor.getValue().getBlockY());
assertEquals(8815, captor.getValue().getBlockZ());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#fixIslandCenter(Island)}.
*/
@Test
public void testFixIslandCenterNulls() {
Island island = mock(Island.class);
when(island.getWorld()).thenReturn(null);
// Test
assertFalse(im.fixIslandCenter(island));
when(island.getWorld()).thenReturn(world);
when(island.getCenter()).thenReturn(null);
assertFalse(im.fixIslandCenter(island));
when(island.getCenter()).thenReturn(location);
when(iwm.inWorld(eq(world))).thenReturn(false);
assertFalse(im.fixIslandCenter(island));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersNoOwner() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(null);
// Test
assertEquals(0, im.getMaxMembers(island, RanksManager.MEMBER_RANK));
verify(island).setMaxMembers(eq(null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersOfflineOwner() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers()).thenReturn(null);
when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null);
when(iwm.getMaxTeamSize(eq(world))).thenReturn(4);
// Offline owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(null);
// Test
assertEquals(4, im.getMaxMembers(island, RanksManager.MEMBER_RANK));
verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersOnlineOwnerNoPerms() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers()).thenReturn(null);
when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null);
when(iwm.getMaxTeamSize(eq(world))).thenReturn(4);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
assertEquals(4, im.getMaxMembers(island, RanksManager.MEMBER_RANK));
verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersOnlineOwnerNoPermsCoopTrust() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers()).thenReturn(null);
when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null);
when(iwm.getMaxTeamSize(eq(world))).thenReturn(4);
when(iwm.getMaxCoopSize(eq(world))).thenReturn(2);
when(iwm.getMaxTrustSize(eq(world))).thenReturn(3);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
assertEquals(2, im.getMaxMembers(island, RanksManager.COOP_RANK));
verify(island).setMaxMembers(eq(RanksManager.COOP_RANK), eq(null));
assertEquals(3, im.getMaxMembers(island, RanksManager.TRUSTED_RANK));
verify(island).setMaxMembers(eq(RanksManager.TRUSTED_RANK), eq(null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersOnlineOwnerNoPermsPreset() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers(eq(RanksManager.MEMBER_RANK))).thenReturn(10);
when(iwm.getMaxTeamSize(eq(world))).thenReturn(4);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
assertEquals(10, im.getMaxMembers(island, RanksManager.MEMBER_RANK));
verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(10));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersOnlineOwnerNoPermsPresetLessThanDefault() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers(eq(RanksManager.MEMBER_RANK))).thenReturn(10);
when(iwm.getMaxTeamSize(eq(world))).thenReturn(40);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
assertEquals(10, im.getMaxMembers(island, RanksManager.MEMBER_RANK));
verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(10));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxMembers(Island, Integer)}.
*/
@Test
public void testGetMaxMembersOnlineOwnerHasPerm() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxMembers()).thenReturn(null);
when(iwm.getMaxTeamSize(eq(world))).thenReturn(4);
// Permission
when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock.");
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getValue()).thenReturn(true);
when(pai.getPermission()).thenReturn("bskyblock.team.maxsize.8");
Set<PermissionAttachmentInfo> set = Collections.singleton(pai);
when(player.getEffectivePermissions()).thenReturn(set);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
assertEquals(8, im.getMaxMembers(island, RanksManager.MEMBER_RANK));
verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(8));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#setMaxMembers(Island, Integer, Integer)}.
*/
@Test
public void testsetMaxMembers() {
Island island = mock(Island.class);
// Test
im.setMaxMembers(island, RanksManager.MEMBER_RANK, 40);
verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(40));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxHomes(Island)}.
*/
@Test
public void testGetMaxHomesOnlineOwnerHasPerm() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxHomes()).thenReturn(null);
when(iwm.getMaxHomes(eq(world))).thenReturn(4);
// Permission
when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock.");
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getValue()).thenReturn(true);
when(pai.getPermission()).thenReturn("bskyblock.island.maxhomes.8");
Set<PermissionAttachmentInfo> set = Collections.singleton(pai);
when(player.getEffectivePermissions()).thenReturn(set);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
IslandsManager im = new IslandsManager(plugin);
assertEquals(8, im.getMaxHomes(island));
verify(island).setMaxHomes(eq(8));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxHomes(Island)}.
*/
@Test
public void testGetMaxHomesOnlineOwnerHasNoPerm() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxHomes()).thenReturn(null);
when(iwm.getMaxHomes(eq(world))).thenReturn(4);
// Permission
when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock.");
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getValue()).thenReturn(true);
when(pai.getPermission()).thenReturn("bskyblock.island.something.else");
Set<PermissionAttachmentInfo> set = Collections.singleton(pai);
when(player.getEffectivePermissions()).thenReturn(set);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
IslandsManager im = new IslandsManager(plugin);
assertEquals(4, im.getMaxHomes(island));
verify(island).setMaxHomes(eq(null));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxHomes(Island)}.
*/
@Test
public void testGetMaxHomesIslandSetOnlineOwner() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxHomes()).thenReturn(20);
when(iwm.getMaxHomes(eq(world))).thenReturn(4);
// Permission
when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock.");
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getValue()).thenReturn(true);
when(pai.getPermission()).thenReturn("bskyblock.island.something.else");
Set<PermissionAttachmentInfo> set = Collections.singleton(pai);
when(player.getEffectivePermissions()).thenReturn(set);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
IslandsManager im = new IslandsManager(plugin);
assertEquals(20, im.getMaxHomes(island));
verify(island).setMaxHomes(eq(20));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#getMaxHomes(Island)}.
*/
@Test
public void testGetMaxHomesIslandSetOnlineOwnerLowerPerm() {
Island island = mock(Island.class);
when(island.getOwner()).thenReturn(uuid);
when(island.getWorld()).thenReturn(world);
when(island.getMaxHomes()).thenReturn(20);
when(iwm.getMaxHomes(eq(world))).thenReturn(4);
// Permission
when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock.");
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getValue()).thenReturn(true);
when(pai.getPermission()).thenReturn("bskyblock.island.maxhomes.8");
Set<PermissionAttachmentInfo> set = Collections.singleton(pai);
when(player.getEffectivePermissions()).thenReturn(set);
// Online owner
when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player);
// Test
IslandsManager im = new IslandsManager(plugin);
assertEquals(8, im.getMaxHomes(island));
verify(island).setMaxHomes(eq(8));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.IslandsManager#setMaxHomes(Island, Integer)}.
*/
@Test
public void testsetMaxHomes() {
Island island = mock(Island.class);
// Test
IslandsManager im = new IslandsManager(plugin);
im.setMaxHomes(island, 40);
verify(island).setMaxHomes(eq(40));
}
2018-03-12 01:21:15 +01:00
}