diff --git a/pom.xml b/pom.xml index 5f5b6f725..e49d241f5 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ -LOCAL - 2.5.4 + 2.6.0 bentobox-world https://sonarcloud.io ${project.basedir}/lib diff --git a/src/main/java/world/bentobox/bentobox/api/commands/CompositeCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/CompositeCommand.java index 383f5bab2..4d0a8146e 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/CompositeCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/CompositeCommand.java @@ -758,7 +758,7 @@ private List getSubCommandLabels(@NonNull CommandSender sender, @NonNull * @param user - the User * @return result of help command or false if no help defined */ - protected boolean showHelp(CompositeCommand command, User user) { + public boolean showHelp(CompositeCommand command, User user) { return command.getSubCommand("help") .map(helpCommand -> helpCommand.execute(user, helpCommand.getLabel(), new ArrayList<>())).orElse(false); } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminMaxHomesCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminMaxHomesCommand.java new file mode 100644 index 000000000..c2e2dec5a --- /dev/null +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminMaxHomesCommand.java @@ -0,0 +1,174 @@ +package world.bentobox.bentobox.api.commands.admin; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import com.google.common.primitives.Ints; + +import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.commands.ConfirmableCommand; +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; + +/** + * Sets the maximum number of homes allowed on this island. + * + * Commands: + * + * + * @author tastybento + * @since 2.6.0 + */ + +public class AdminMaxHomesCommand extends ConfirmableCommand { + + Integer maxHomes; + Map islands = new HashMap<>(); + + public AdminMaxHomesCommand(CompositeCommand parent) { + super(parent, "setmaxhomes"); + } + + @Override + public void setup() { + setPermission("mod.maxhomes"); + setOnlyPlayer(false); + setParametersHelp("commands.admin.maxhomes.parameters"); + setDescription("commands.admin.maxhomes.description"); + } + + @Override + public boolean canExecute(User user, String label, List args) { + islands.clear(); + if (args.isEmpty()) { + showHelp(this, user); + return false; + } + // Check arguments + if (args.size() == 1) { + // Player must be in game + if (!user.isPlayer()) { + user.sendMessage("general.errors.use-in-game"); + return false; + } + // Check world + if (user.getWorld() != getWorld()) { + user.sendMessage("general.errors.wrong-world"); + return false; + } + // Arg must be an integer to return true, otherwise false + maxHomes = Ints.tryParse(args.get(0)); + if (maxHomes == null || maxHomes < 1) { + user.sendMessage("general.errors.must-be-positive-number", TextVariables.NUMBER, args.get(0)); + return false; + } + // Get the island the user is standing on + boolean onIsland = getIslands().getIslandAt(user.getLocation()).map(is -> { + islands.put("", is); + return true; + }).orElse(false); + if (!onIsland) { + user.sendMessage("general.errors.not-on-island"); + return false; + } + return true; + } + // More than one argument + // First arg must be a valid player name + UUID targetUUID = getPlayers().getUUID(args.get(0)); + if (targetUUID == null) { + user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0)); + return false; + } + // Second arg must be the max homes number + maxHomes = Ints.tryParse(args.get(1)); + if (maxHomes == null) { + user.sendMessage("general.errors.must-be-positive-number", TextVariables.NUMBER, args.get(1)); + return false; + } + // Get islands + islands = this.getNameIslandMap(User.getInstance(targetUUID)); + if (islands.isEmpty()) { + user.sendMessage("general.errors.player-has-no-island"); + return false; + } + if (args.size() > 2) { + // A specific island is mentioned. Parse which one it is and remove the others + final String name = String.join(" ", args.subList(2, args.size())); // Join all the args from here with spaces + + islands.keySet().removeIf(n -> !name.equalsIgnoreCase(n)); + + if (islands.isEmpty()) { + // Failed name check - there are either + user.sendMessage("commands.admin.maxhomes.errors.unknown-island", TextVariables.NAME, name); + return false; + } + } + + return true; + } + + @Override + public boolean execute(User user, String label, List args) { + if (islands.isEmpty() || maxHomes < 1) { + // Sanity check + return false; + } + islands.forEach((name, island) -> { + island.setMaxHomes(maxHomes); + user.sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, name, TextVariables.NUMBER, + String.valueOf(maxHomes)); + }); + return true; + } + + @Override + public Optional> tabComplete(User user, String alias, List args) { + String lastArg = !args.isEmpty() ? args.get(args.size()-1) : ""; + if (args.size() == 2) { + // Suggest player names + return Optional.of(Util.getOnlinePlayerList(user)); + } + if (args.size() > 3) { + // Work out who is in arg 2 + UUID targetUUID = getPlayers().getUUID(args.get(1)); + if (targetUUID != null) { + User target = User.getInstance(targetUUID); + return Optional.of(Util.tabLimit(new ArrayList<>(getNameIslandMap(target).keySet()), lastArg)); + } + } + return Optional.of(List.of("1")); + + } + + Map getNameIslandMap(User user) { + Map islandMap = new HashMap<>(); + int index = 0; + for (Island island : getIslands().getIslands(getWorld(), user.getUniqueId())) { + index++; + if (island.getName() != null && !island.getName().isBlank()) { + // Name has been set + islandMap.put(island.getName(), island); + } else { + // Name has not been set + String text = user.getTranslation("protection.flags.ENTER_EXIT_MESSAGES.island", TextVariables.NAME, + user.getName(), TextVariables.DISPLAY_NAME, user.getDisplayName()) + " " + index; + islandMap.put(text, island); + } + } + + return islandMap; + + } + +} diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminResetHomeCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminResetHomeCommand.java new file mode 100644 index 000000000..cd70db37d --- /dev/null +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminResetHomeCommand.java @@ -0,0 +1,158 @@ +package world.bentobox.bentobox.api.commands.admin; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; + + +/** + * This command resets players island name. + * @author BONNe + */ +public class AdminResetHomeCommand extends CompositeCommand +{ + Map islands = new HashMap<>(); + + /** + * Default constructor. + * @param command Parent command. + */ + public AdminResetHomeCommand(CompositeCommand command) + { + super(command, "resethome"); + } + + + /** + * {@inheritDoc} + */ + @Override + public void setup() + { + this.setPermission("mod.resethome"); + this.setDescription("commands.admin.resethome.description"); + this.setParametersHelp("commands.admin.resethome.parameters"); + } + + + /** + * @param user the {@link User} who is executing this command. + * @param label the label which has been used to execute this command. + * It can be {@link CompositeCommand#getLabel()} or an alias. + * @param args the command arguments. + * @return {@code true} if name can be reset, {@code false} otherwise. + */ + @Override + public boolean canExecute(User user, String label, List args) + { + islands.clear(); + if (args.isEmpty()) { + this.showHelp(this, user); + return false; + } + // First arg must be a valid player name + UUID targetUUID = getPlayers().getUUID(args.get(0)); + if (targetUUID == null) { + user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0)); + return false; + } + // Get islands + islands = this.getNameIslandMap(User.getInstance(targetUUID)); + if (islands.isEmpty()) { + user.sendMessage("general.errors.player-has-no-island"); + return false; + } + + // Second optional arg must be the name of the island + if (args.size() == 1) { + return true; + } + + // A specific island is mentioned. Parse which one it is and remove the others + final String name = String.join(" ", args.subList(1, args.size())); // Join all the args from here with spaces + + islands.keySet().removeIf(n -> !name.equalsIgnoreCase(n)); + + if (islands.isEmpty()) { + // Failed name check - there are either + user.sendMessage("commands.admin.maxhomes.errors.unknown-island", TextVariables.NAME, name); + return false; + } + + return true; + } + + + /** + * @param user the {@link User} who is executing this command. + * @param label the label which has been used to execute this command. + * It can be {@link CompositeCommand#getLabel()} or an alias. + * @param args the command arguments. + * @return {@code true} + */ + @Override + public boolean execute(User user, String label, List args) + { + if (islands.isEmpty()) { + // Sanity check + return false; + } + islands.forEach((name, island) -> { + island.getHomes().keySet().removeIf(String::isEmpty); // Remove the default home + user.sendMessage("commands.admin.resethome.cleared", TextVariables.NAME, name); + }); + + user.sendMessage("general.success"); + return true; + } + + + @Override + public Optional> tabComplete(User user, String alias, List args) { + String lastArg = !args.isEmpty() ? args.get(args.size() - 1) : ""; + if (args.size() == 2) { + // Suggest player names + return Optional.of(Util.getOnlinePlayerList(user)); + } + if (args.size() > 2) { + // Work out who is in arg 2 + UUID targetUUID = getPlayers().getUUID(args.get(0)); + if (targetUUID != null) { + User target = User.getInstance(targetUUID); + return Optional.of(Util.tabLimit(new ArrayList<>(getNameIslandMap(target).keySet()), lastArg)); + } + } + return Optional.empty(); + + } + + Map getNameIslandMap(User user) { + Map islandMap = new HashMap<>(); + int index = 0; + for (Island island : getIslands().getIslands(getWorld(), user.getUniqueId())) { + index++; + if (island.getName() != null && !island.getName().isBlank()) { + // Name has been set + islandMap.put(island.getName(), island); + } else { + // Name has not been set + String text = user.getTranslation("protection.flags.ENTER_EXIT_MESSAGES.island", TextVariables.NAME, + user.getName(), TextVariables.DISPLAY_NAME, user.getDisplayName()) + " " + index; + islandMap.put(text, island); + } + } + + return islandMap; + + } + +} diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java index be27bf080..4b3274a2c 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java @@ -102,6 +102,10 @@ public void setup() { new AdminDeleteHomesCommand(this); // Reset name new AdminResetNameCommand(this); + // Max homes + new AdminMaxHomesCommand(this); + // Reset Home + new AdminResetHomeCommand(this); } /** diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java index 3552580d8..cfe3f6c8e 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java @@ -37,7 +37,7 @@ public boolean canExecute(User user, String label, List args) { // Check if mid-teleport if (getIslands().isGoingHome(user)) { // Tell them again that it's in progress - user.sendMessage("commands.island.go.teleport"); + user.sendMessage("commands.island.go.in-progress"); return false; } List islands = getIslands().getIslands(getWorld(), user.getUniqueId()); @@ -76,7 +76,15 @@ public boolean execute(User user, String label, List args) { getIslands().setPrimaryIsland(user.getUniqueId(), info.island); if (!info.islandName) { this.delayCommand(user, () -> getIslands().homeTeleportAsync(getWorld(), user.getPlayer(), name) - .thenAccept((r) -> getIslands().setPrimaryIsland(user.getUniqueId(), info.island))); + .thenAccept((r) -> { + if (r.booleanValue()) { + // Success + getIslands().setPrimaryIsland(user.getUniqueId(), info.island); + } else { + user.sendMessage("commands.island.go.failure"); + getPlugin().logError(user.getName() + " could not teleport to their island - async teleport issue"); + } + })); return true; } } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java index 027a16961..11e3dd40c 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java @@ -53,7 +53,6 @@ public boolean execute(User user, String label, List args) { .tab(2, new SettingsTab(getWorld(), user, Flag.Type.SETTING)) .startingSlot(1) .size(54) - .hideIfEmpty() .build().openPanel(); return true; } diff --git a/src/main/java/world/bentobox/bentobox/api/user/User.java b/src/main/java/world/bentobox/bentobox/api/user/User.java index 8e7c32260..64278ed29 100644 --- a/src/main/java/world/bentobox/bentobox/api/user/User.java +++ b/src/main/java/world/bentobox/bentobox/api/user/User.java @@ -10,6 +10,8 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; @@ -36,6 +38,10 @@ import com.google.common.base.Enums; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.chat.hover.content.Text; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.events.OfflineMessageEvent; @@ -584,16 +590,105 @@ public void sendMessage(String reference, String... variables) { } /** - * Sends a message to sender without any modification (colors, multi-lines, - * placeholders). - * - * @param message - the message to send + * Sends a raw message to the sender, parsing inline commands embedded within square brackets. + *

+ * The method supports embedding clickable and hoverable actions into the message text using inline commands. + * Recognized commands are: + *

    + *
  • [run_command: <command>] - Runs the specified command when the message is clicked.
  • + *
  • [suggest_command: <command>] - Suggests the specified command in the chat input.
  • + *
  • [copy_to_clipboard: <text>] - Copies the specified text to the player's clipboard.
  • + *
  • [open_url: <url>] - Opens the specified URL when the message is clicked.
  • + *
  • [hover: <text>] - Shows the specified text when the message is hovered over.
  • + *
+ *

+ * The commands can be placed anywhere in the message and will apply to the entire message component. + * If multiple commands of the same type are provided, only the first one encountered will be applied. + * Unrecognized or invalid commands enclosed in square brackets will be preserved in the output text. + *

+ * Example usage: + *

+     * sendRawMessage("Hello [not-a-command: hello][run_command: /help] World [hover: This is a hover text]");
+     * 
+ * The above message will display "Hello [not-a-command: hello] World" where clicking the message runs the "/help" command, + * and hovering over the message shows "This is a hover text". + * + * @param message The message to send, containing inline commands in square brackets. */ public void sendRawMessage(String message) { + // Create a base TextComponent for the message + TextComponent baseComponent = new TextComponent(); + + // Regex to find inline commands like [run_command: /help] and [hover: click for help!], or unrecognized commands + Pattern pattern = Pattern.compile("\\[(\\w+): ([^\\]]+)]|\\[\\[(.*?)\\]]"); + Matcher matcher = pattern.matcher(message); + + // Keep track of the current position in the message + int lastMatchEnd = 0; + ClickEvent clickEvent = null; + HoverEvent hoverEvent = null; + + while (matcher.find()) { + // Add any text before the current match + if (matcher.start() > lastMatchEnd) { + String beforeMatch = message.substring(lastMatchEnd, matcher.start()); + baseComponent.addExtra(new TextComponent(beforeMatch)); + } + + // Check if it's a recognized command or an unknown bracketed text + if (matcher.group(1) != null && matcher.group(2) != null) { + // Parse the inline command (action) and value + String actionType = matcher.group(1).toUpperCase(Locale.ENGLISH); // e.g., RUN_COMMAND, HOVER + String actionValue = matcher.group(2); // The command or text to display + + // Apply the first valid click event or hover event encountered + switch (actionType) { + case "RUN_COMMAND": + case "SUGGEST_COMMAND": + case "COPY_TO_CLIPBOARD": + case "OPEN_URL": + if (clickEvent == null) { + clickEvent = new ClickEvent(ClickEvent.Action.valueOf(actionType), actionValue); + } + break; + case "HOVER": + if (hoverEvent == null) { + hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(actionValue)); + } + break; + default: + // Unrecognized command; preserve it in the output text + baseComponent.addExtra(new TextComponent(matcher.group(0))); + } + + } else if (matcher.group(3) != null) { + // Unrecognized bracketed text; preserve it in the output + baseComponent.addExtra(new TextComponent("[[" + matcher.group(3) + "]]")); + } + + // Update the last match end position + lastMatchEnd = matcher.end(); + } + + // Add any remaining text after the last match + if (lastMatchEnd < message.length()) { + String remainingText = message.substring(lastMatchEnd); + baseComponent.addExtra(new TextComponent(remainingText)); + } + + // Apply the first encountered ClickEvent and HoverEvent to the entire message + if (clickEvent != null) { + baseComponent.setClickEvent(clickEvent); + } + if (hoverEvent != null) { + baseComponent.setHoverEvent(hoverEvent); + } + + // Send the final component to the sender if (sender != null) { - sender.sendMessage(message); + sender.spigot().sendMessage(baseComponent); } else { - // Offline player fire event + // Handle offline player messaging or alternative actions Bukkit.getPluginManager().callEvent(new OfflineMessageEvent(this.playerUUID, message)); } } diff --git a/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java b/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java index 11c750889..eac3174e4 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java @@ -95,13 +95,7 @@ public void onPlayerJoin(final PlayerJoinEvent event) { // Set island max members and homes based on permissions if this player is the // owner of an island - plugin.getIWM().getOverWorlds().stream().map(w -> plugin.getIslands().getIsland(w, playerUUID)) - .filter(Objects::nonNull).filter(i -> playerUUID.equals(i.getOwner())).forEach(i -> { - plugin.getIslands().getMaxMembers(i, RanksManager.MEMBER_RANK); - plugin.getIslands().getMaxMembers(i, RanksManager.COOP_RANK); - plugin.getIslands().getMaxMembers(i, RanksManager.TRUSTED_RANK); - plugin.getIslands().getMaxHomes(i); - }); + updateIslandMaxTeamAndHomeSize(user); // Add a player to the bStats cache. plugin.getMetrics().ifPresent(bStats -> bStats.addPlayer(playerUUID)); @@ -125,6 +119,18 @@ public void onPlayerJoin(final PlayerJoinEvent event) { }); } + private void updateIslandMaxTeamAndHomeSize(User user) { + plugin.getIWM().getOverWorlds().stream() + .flatMap(w -> plugin.getIslands().getIslands(w, user.getUniqueId()).stream()) // Flatten the List into a Stream + .filter(Objects::nonNull).filter(i -> user.getUniqueId().equals(i.getOwner())).forEach(i -> { + plugin.getIslands().getMaxMembers(i, RanksManager.MEMBER_RANK); + plugin.getIslands().getMaxMembers(i, RanksManager.COOP_RANK); + plugin.getIslands().getMaxMembers(i, RanksManager.TRUSTED_RANK); + plugin.getIslands().getMaxHomes(i); + }); + + } + private void firstTime(User user) { // Make sure the player is loaded into the cache or create the player if they // don't exist @@ -206,6 +212,10 @@ private void clearPlayersInventory(@Nullable World world, @NonNull User user) { } } + /** + * Update island range using player perms + * @param user user + */ private void updateIslandRange(User user) { plugin.getIslands().getIslands(user.getUniqueId()).stream() .filter(island -> island.getOwner() != null && island.getOwner().equals(user.getUniqueId())) diff --git a/src/main/java/world/bentobox/bentobox/lists/Flags.java b/src/main/java/world/bentobox/bentobox/lists/Flags.java index 15eb623d7..0a9b71776 100644 --- a/src/main/java/world/bentobox/bentobox/lists/Flags.java +++ b/src/main/java/world/bentobox/bentobox/lists/Flags.java @@ -25,6 +25,7 @@ import world.bentobox.bentobox.listeners.flags.protection.ElytraListener; import world.bentobox.bentobox.listeners.flags.protection.EntityInteractListener; import world.bentobox.bentobox.listeners.flags.protection.ExperiencePickupListener; +import world.bentobox.bentobox.listeners.flags.protection.ExplosionListener; import world.bentobox.bentobox.listeners.flags.protection.FireListener; import world.bentobox.bentobox.listeners.flags.protection.HurtingListener; import world.bentobox.bentobox.listeners.flags.protection.InventoryListener; @@ -39,7 +40,6 @@ import world.bentobox.bentobox.listeners.flags.protection.SculkSensorListener; import world.bentobox.bentobox.listeners.flags.protection.SculkShriekerListener; import world.bentobox.bentobox.listeners.flags.protection.ShearingListener; -import world.bentobox.bentobox.listeners.flags.protection.ExplosionListener; import world.bentobox.bentobox.listeners.flags.protection.TeleportationListener; import world.bentobox.bentobox.listeners.flags.protection.ThrowingListener; import world.bentobox.bentobox.listeners.flags.settings.DecayListener; diff --git a/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java b/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java index 032617d26..03b67d59b 100644 --- a/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java +++ b/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java @@ -157,6 +157,15 @@ public enum GameModePlaceholder { * @since 1.5.0 */ ISLAND_VISITORS_COUNT("island_visitors_count", (addon, user, island) -> island == null ? "" : String.valueOf(island.getVisitors().size())), + /** + * Returns the amount of players that are at least MEMBER on the island the player is standing on. + * @since 2.6.0 + */ + ISLAND_MAX_HOMES("island_max_homes", + (addon, user, island) -> island == null ? "" + : String.valueOf( + island.getMaxHomes() == null ? addon.getPlugin().getIWM().getMaxHomes(island.getWorld()) + : island.getMaxHomes())), /** * Returns the amount of players banned from the island. * @since 1.5.0 @@ -281,6 +290,16 @@ public enum GameModePlaceholder { */ VISITED_ISLAND_MEMBERS_COUNT("visited_island_members_count", (addon, user, island) -> getVisitedIsland(addon, user).map(value -> String.valueOf(value.getMemberSet().size())).orElse("")), + /** + * Returns the amount of players that are at least MEMBER on the island the player is standing on. + * @since 2.6.0 + */ + VISITED_ISLAND_MAX_HOMES("visited_island_max_homes", + (addon, user, + island) -> getVisitedIsland(addon, user).map(value -> String.valueOf( + island.getMaxHomes() == null ? addon.getPlugin().getIWM().getMaxHomes(island.getWorld()) + : island.getMaxHomes())) + .orElse("")), /** * Returns the amount of players that are TRUSTED on the island the player is standing on. * @since 1.5.2 diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java index 3c303572b..f3cfaf0fc 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java @@ -1359,7 +1359,7 @@ boolean fixIslandCenter(Island island) { /** * Checks if a specific location is within the protected range of an island that - * the player is a member of (owner or member) + * the player is a member of (owner or member) or Op. * * @param player - the player * @param loc - location @@ -1370,7 +1370,9 @@ public boolean locationIsOnIsland(Player player, Location loc) { return false; } // Get the player's island - return getIslandAt(loc).filter(i -> i.onIsland(loc)).map(i -> i.inTeam(player.getUniqueId())) + // If Op then all islands are Ops + return player.isOp() + || getIslandAt(loc).filter(i -> i.onIsland(loc)).map(i -> i.inTeam(player.getUniqueId())) .orElse(false); } diff --git a/src/main/java/world/bentobox/bentobox/managers/island/IslandGrid.java b/src/main/java/world/bentobox/bentobox/managers/island/IslandGrid.java index d7d7b2c43..11a76c367 100644 --- a/src/main/java/world/bentobox/bentobox/managers/island/IslandGrid.java +++ b/src/main/java/world/bentobox/bentobox/managers/island/IslandGrid.java @@ -1,7 +1,6 @@ package world.bentobox.bentobox.managers.island; import java.util.Map.Entry; - import java.util.TreeMap; import world.bentobox.bentobox.database.objects.Island; diff --git a/src/main/java/world/bentobox/bentobox/util/IslandInfo.java b/src/main/java/world/bentobox/bentobox/util/IslandInfo.java index 9604aa33f..909262f44 100644 --- a/src/main/java/world/bentobox/bentobox/util/IslandInfo.java +++ b/src/main/java/world/bentobox/bentobox/util/IslandInfo.java @@ -143,6 +143,9 @@ public boolean showInfo(User user) { // Show team members showMembers(user); } + int maxHomes = island.getMaxHomes() == null ? plugin.getIWM().getMaxHomes(island.getWorld()) + : island.getMaxHomes(); + user.sendMessage("commands.admin.info.max-homes", TextVariables.NUMBER, String.valueOf(maxHomes)); Vector location = island.getProtectionCenter().toVector(); user.sendMessage("commands.admin.info.island-center", TextVariables.XYZ, Util.xyz(location)); user.sendMessage("commands.admin.info.protection-range", RANGE, String.valueOf(island.getProtectionRange())); diff --git a/src/main/java/world/bentobox/bentobox/util/Util.java b/src/main/java/world/bentobox/bentobox/util/Util.java index 2ee05e934..411409f8b 100644 --- a/src/main/java/world/bentobox/bentobox/util/Util.java +++ b/src/main/java/world/bentobox/bentobox/util/Util.java @@ -28,7 +28,21 @@ import org.bukkit.attribute.Attribute; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.entity.*; +import org.bukkit.entity.Allay; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Bat; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Flying; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Player; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Shulker; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.WaterMob; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.NonNull; diff --git a/src/main/java/world/bentobox/bentobox/util/teleport/SafeSpotTeleport.java b/src/main/java/world/bentobox/bentobox/util/teleport/SafeSpotTeleport.java index 057cff418..402e6ea1d 100644 --- a/src/main/java/world/bentobox/bentobox/util/teleport/SafeSpotTeleport.java +++ b/src/main/java/world/bentobox/bentobox/util/teleport/SafeSpotTeleport.java @@ -19,6 +19,7 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import world.bentobox.bentobox.BentoBox; @@ -38,8 +39,8 @@ public class SafeSpotTeleport { private static final long SPEED = 1; private static final int MAX_RADIUS = 50; // Parameters - private final Entity entity; - private final Location location; + private final @NonNull Entity entity; + private final @NonNull Location location; private final int homeNumber; private final BentoBox plugin; private final Runnable runnable; @@ -64,8 +65,8 @@ public class SafeSpotTeleport { */ SafeSpotTeleport(Builder builder) { this.plugin = builder.getPlugin(); - this.entity = builder.getEntity(); - this.location = builder.getLocation(); + this.entity = Objects.requireNonNull(builder.getEntity()); + this.location = Objects.requireNonNull(builder.getLocation()); this.portal = builder.isPortal(); this.homeNumber = builder.getHomeNumber(); this.homeName = builder.getHomeName(); @@ -86,7 +87,7 @@ void tryToGo(String failureMessage) { bestSpot = location; } else { // If this is not a portal teleport, then go to the safe location immediately - Util.teleportAsync(entity, location).thenRun(() -> { + Util.teleportAsync(Objects.requireNonNull(entity), Objects.requireNonNull(location)).thenRun(() -> { if (runnable != null) Bukkit.getScheduler().runTask(plugin, runnable); result.complete(true); }); @@ -122,7 +123,7 @@ boolean gatherChunks(String failureMessage) { } // Get the chunk snapshot and scan it - Util.getChunkAtAsync(world, chunkPair.x, chunkPair.z) + Util.getChunkAtAsync(Objects.requireNonNull(world), chunkPair.x, chunkPair.z) .thenApply(Chunk::getChunkSnapshot) .whenCompleteAsync((snapshot, e) -> { if (snapshot != null && scanChunk(snapshot)) { @@ -180,7 +181,8 @@ void makeAndTeleport(Material m) { location.getBlock().setType(Material.AIR, false); location.getBlock().getRelative(BlockFace.UP).setType(Material.AIR, false); location.getBlock().getRelative(BlockFace.UP).getRelative(BlockFace.UP).setType(m, false); - Util.teleportAsync(entity, location.clone().add(new Vector(0.5D, 0D, 0.5D))).thenRun(() -> { + Util.teleportAsync(Objects.requireNonNull(entity), + Objects.requireNonNull(location.clone().add(new Vector(0.5D, 0D, 0.5D)))).thenRun(() -> { if (runnable != null) Bukkit.getScheduler().runTask(plugin, runnable); result.complete(true); }); @@ -275,7 +277,7 @@ boolean scanChunk(ChunkSnapshot chunk) { /** * Teleports entity to the safe spot */ - void teleportEntity(final Location loc) { + void teleportEntity(@NonNull final Location loc) { task.cancel(); // Return to main thread and teleport the player Bukkit.getScheduler().runTask(plugin, () -> { @@ -283,7 +285,7 @@ void teleportEntity(final Location loc) { // Set home if so marked plugin.getIslands().setHomeLocation(User.getInstance(entity), loc, homeName); } - Util.teleportAsync(entity, loc).thenRun(() -> { + Util.teleportAsync(Objects.requireNonNull(entity), Objects.requireNonNull(loc)).thenRun(() -> { if (runnable != null) Bukkit.getScheduler().runTask(plugin, runnable); result.complete(true); }); diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 1cbaf9f40..97134b403 100644 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -59,6 +59,16 @@ commands: admin: help: description: admin command + maxhomes: + description: change the number of homes allowed on this island or player's island + parameters: [island name] + max-homes-set: '&a [name] - Set island max homes to [number]' + errors: + unknown-island: &c Unknown island! [name] + resethome: + description: Reset the player's home to default + parameters: [island name] + cleared: '&b Home reset. [name]' resets: description: edit player reset values set: @@ -213,6 +223,7 @@ commands: last-login-date-time-format: EEE MMM dd HH:mm:ss zzz yyyy deaths: 'Deaths: [number]' resets-left: 'Resets: [number] (Max: [total])' + max-homes: 'Max homes: [number]' team-members-title: 'Team members:' team-owner-format: '&a [name] [rank]' team-member-format: '&b [name] [rank]' @@ -540,7 +551,9 @@ commands: parameters: '[home name]' description: teleport you to your island teleport: '&a Teleporting you to your island.' + in-progress: '&a Teleporting in progress, please wait...' teleported: '&a Teleported you to home &e [number].' + failure: '&c Teleporting failed for some reason. Please try again later.' unknown-home: '&c Unknown home name!' help: description: the main island command diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/AbstractCommonSetup.java b/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java similarity index 68% rename from src/test/java/world/bentobox/bentobox/listeners/flags/AbstractCommonSetup.java rename to src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java index 8bb864e37..11adee0ad 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/AbstractCommonSetup.java +++ b/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java @@ -1,8 +1,11 @@ -package world.bentobox.bentobox.listeners.flags; +package world.bentobox.bentobox; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; @@ -19,6 +22,7 @@ import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.entity.Player.Spigot; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.inventory.ItemFactory; @@ -31,6 +35,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; @@ -40,8 +45,7 @@ import com.google.common.collect.ImmutableSet; -import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.Settings; +import net.md_5.bungee.api.chat.TextComponent; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.Notifier; import world.bentobox.bentobox.api.user.User; @@ -97,6 +101,8 @@ public abstract class AbstractCommonSetup { protected Notifier notifier; @Mock protected FlagsManager fm; + @Mock + protected Spigot spigot; public void setUp() throws Exception { @@ -129,6 +135,7 @@ public void setUp() throws Exception { when(mockPlayer.getWorld()).thenReturn(world); when(mockPlayer.getName()).thenReturn("tastybento"); when(mockPlayer.getInventory()).thenReturn(inv); + when(mockPlayer.spigot()).thenReturn(spigot); User.setPlugin(plugin); User.clearUsers(); @@ -176,12 +183,13 @@ public void setUp() throws Exception { when(plugin.getSettings()).thenReturn(settings); when(settings.getFakePlayers()).thenReturn(new HashSet<>()); - PowerMockito.mockStatic(Util.class); + PowerMockito.mockStatic(Util.class, Mockito.CALLS_REAL_METHODS); when(Util.getWorld(any())).thenReturn(mock(World.class)); + // Util when(Util.findFirstMatchingEnum(any(), any())).thenCallRealMethod(); // Util translate color codes (used in user translate methods) - when(Util.translateColorCodes(anyString())).thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); + //when(Util.translateColorCodes(anyString())).thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); // Tags for (Material m : Material.values()) { @@ -217,6 +225,70 @@ public void tearDown() throws Exception { Mockito.framework().clearInlineMocks(); } + /** + * Check that spigot sent the message + * @param message - message to check + */ + public void checkSpigotMessage(String expectedMessage) { + checkSpigotMessage(expectedMessage, 1); + } + + /* + public void checkSpigotMessage(String expectedMessage, boolean shouldBePresent) { + // Capture the argument passed to spigot().sendMessage(...) if messages are sent + ArgumentCaptor captor = ArgumentCaptor.forClass(TextComponent.class); + + if (shouldBePresent) { + // If we expect a message to be present, verify that sendMessage() was called at least once + verify(spigot, atLeastOnce()).sendMessage(captor.capture()); + + // Get all captured TextComponents + List capturedMessages = captor.getAllValues(); + + // Check if any captured message contains the expected text + boolean messageFound = capturedMessages.stream() + .map(component -> component.toPlainText()) // Convert each TextComponent to plain text + .anyMatch(messageText -> messageText.contains(expectedMessage)); // Check if the expected message is present + + // Assert that the message was found + assertTrue("Expected message not found: " + expectedMessage, messageFound); + + } else { + // If we expect no messages with this text, capture any sent messages to ensure none match the given message + verify(spigot, atLeast(0)).sendMessage(captor.capture()); + + // Get all captured TextComponents + List capturedMessages = captor.getAllValues(); + + // Check that none of the captured messages contain the forbidden text + boolean messageFound = capturedMessages.stream().map(component -> component.toPlainText()) // Convert each TextComponent to plain text + .anyMatch(messageText -> messageText.contains(expectedMessage)); // Check if the message is present + + // Assert that the message was NOT found + assertFalse("Unexpected message found: " + expectedMessage, messageFound); + } + }*/ + + public void checkSpigotMessage(String expectedMessage, int expectedOccurrences) { + // Capture the argument passed to spigot().sendMessage(...) if messages are sent + ArgumentCaptor captor = ArgumentCaptor.forClass(TextComponent.class); + + // Verify that sendMessage() was called at least 0 times (capture any sent messages) + verify(spigot, atLeast(0)).sendMessage(captor.capture()); + + // Get all captured TextComponents + List capturedMessages = captor.getAllValues(); + + // Count the number of occurrences of the expectedMessage in the captured messages + long actualOccurrences = capturedMessages.stream().map(component -> component.toPlainText()) // Convert each TextComponent to plain text + .filter(messageText -> messageText.contains(expectedMessage)) // Check if the message contains the expected text + .count(); // Count how many times the expected message appears + + // Assert that the number of occurrences matches the expectedOccurrences + assertEquals("Expected message occurrence mismatch: " + expectedMessage, expectedOccurrences, + actualOccurrences); + } + /** * Get the explode event * @param entity diff --git a/src/test/java/world/bentobox/bentobox/managers/RanksManagerBeforeClassTest.java b/src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java similarity index 96% rename from src/test/java/world/bentobox/bentobox/managers/RanksManagerBeforeClassTest.java rename to src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java index ff956dfb9..4f6f589b8 100644 --- a/src/test/java/world/bentobox/bentobox/managers/RanksManagerBeforeClassTest.java +++ b/src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java @@ -1,4 +1,4 @@ -package world.bentobox.bentobox.managers; +package world.bentobox.bentobox; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -29,10 +29,10 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; -import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.DatabaseSetup; +import world.bentobox.bentobox.managers.RanksManager; /** * @author tastybento @@ -40,7 +40,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({ BentoBox.class, DatabaseSetup.class, RanksManager.class, Bukkit.class }) -public abstract class RanksManagerBeforeClassTest { +public abstract class RanksManagerBeforeClassTest extends AbstractCommonSetup { // Constants that define the hard coded rank values public static final String ADMIN_RANK_REF = "ranks.admin"; @@ -68,8 +68,6 @@ public abstract class RanksManagerBeforeClassTest { TRUSTED_RANK_REF, TRUSTED_RANK, COOP_RANK_REF, COOP_RANK, VISITOR_RANK_REF, VISITOR_RANK, BANNED_RANK_REF, BANNED_RANK); - @Mock - public BentoBox plugin; @Mock public RanksManager rm; @@ -113,6 +111,7 @@ public static void beforeClass() throws IllegalAccessException, InvocationTarget @Before public void setUp() throws Exception { + super.setUp(); PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); when(Bukkit.getBukkitVersion()).thenReturn(""); // Set up plugin diff --git a/src/test/java/world/bentobox/bentobox/TestBentoBox.java b/src/test/java/world/bentobox/bentobox/TestBentoBox.java index 170cbb918..59326b9c8 100644 --- a/src/test/java/world/bentobox/bentobox/TestBentoBox.java +++ b/src/test/java/world/bentobox/bentobox/TestBentoBox.java @@ -48,7 +48,6 @@ import world.bentobox.bentobox.api.flags.FlagListener; import world.bentobox.bentobox.api.user.User; 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.CommandsManager; import world.bentobox.bentobox.managers.FlagsManager; diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminDeleteCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminDeleteCommandTest.java index a047957f9..f5ddc6457 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminDeleteCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminDeleteCommandTest.java @@ -68,8 +68,6 @@ public class AdminDeleteCommandTest { @Mock private @Nullable Island island; - /** - */ @Before public void setUp() throws Exception { PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminInfoCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminInfoCommandTest.java index 67f01afb7..4bb2f9d0d 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminInfoCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminInfoCommandTest.java @@ -17,12 +17,8 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import org.eclipse.jdt.annotation.NonNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,16 +30,15 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; import world.bentobox.bentobox.util.Util; /** @@ -59,27 +54,15 @@ public class AdminInfoCommandTest extends RanksManagerBeforeClassTest { @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; private Island island; private AdminInfoCommand iic; - @Mock - private Player player; - @Mock - private World world; @Mock private PlaceholdersManager phm; - @Mock - private @NonNull Location location; - @Mock - private IslandWorldManager iwm; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -96,12 +79,12 @@ public void setUp() throws Exception { when(plugin.getCommandsManager()).thenReturn(cm); // Player - when(player.isOp()).thenReturn(false); + when(mockPlayer.isOp()).thenReturn(false); UUID uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); when(user.getName()).thenReturn("tastybento"); when(user.getWorld()).thenReturn(world); - when(user.getPlayer()).thenReturn(player); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.isPlayer()).thenReturn(true); //user = User.getInstance(player); // Set the User class plugin as this one @@ -164,6 +147,7 @@ public void testExecuteUserStringListOfStringTooManyArgs() { @Test public void testExecuteUserStringListOfStringNoArgsConsole() { CommandSender console = mock(CommandSender.class); + when(console.spigot()).thenReturn(spigot); User sender = User.getInstance(console); assertFalse(iic.execute(sender, "", Collections.emptyList())); verify(user, never()).sendMessage("commands.help.header", "[label]", "commands.help.console"); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminMaxHomesCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminMaxHomesCommandTest.java new file mode 100644 index 000000000..36cf06113 --- /dev/null +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminMaxHomesCommandTest.java @@ -0,0 +1,689 @@ +package world.bentobox.bentobox.api.commands.admin; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.scheduler.BukkitTask; +import org.eclipse.jdt.annotation.Nullable; +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 world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.Settings; +import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.managers.CommandsManager; +import world.bentobox.bentobox.managers.IslandWorldManager; +import world.bentobox.bentobox.managers.IslandsManager; +import world.bentobox.bentobox.managers.LocalesManager; +import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; + +/** + * @author tastybento + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class AdminMaxHomesCommandTest { + + @Mock + private CompositeCommand ac; + @Mock + private User user; + @Mock + private IslandsManager im; + @Mock + private PlayersManager pm; + private UUID notUUID; + private UUID uuid; + @Mock + private World world; + @Mock + private @Nullable Island island; + private AdminMaxHomesCommand instance; + private String label; + private ArrayList args = new ArrayList<>(); + + @Before + public void setUp() throws Exception { + PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); + + // Set up plugin + BentoBox plugin = mock(BentoBox.class); + Whitebox.setInternalState(BentoBox.class, "instance", plugin); + + // Util + Util.setPlugin(plugin); + + // Command manager + CommandsManager cm = mock(CommandsManager.class); + when(plugin.getCommandsManager()).thenReturn(cm); + + // Settings + Settings s = mock(Settings.class); + when(s.getResetCooldown()).thenReturn(0); + when(plugin.getSettings()).thenReturn(s); + + // Player + Player p = mock(Player.class); + // Sometimes use Mockito.withSettings().verboseLogging() + when(user.isOp()).thenReturn(false); + uuid = UUID.randomUUID(); + notUUID = UUID.randomUUID(); + while (notUUID.equals(uuid)) { + notUUID = UUID.randomUUID(); + } + when(user.getUniqueId()).thenReturn(uuid); + when(user.getPlayer()).thenReturn(p); + when(user.getName()).thenReturn("tastybento"); + User.setPlugin(plugin); + + // Parent command has no aliases + when(ac.getSubCommandAliases()).thenReturn(new HashMap<>()); + when(ac.getTopLabel()).thenReturn("admin"); + when(ac.getWorld()).thenReturn(world); + + // Island World Manager + IslandWorldManager iwm = mock(IslandWorldManager.class); + when(plugin.getIWM()).thenReturn(iwm); + + // Player has island to begin with + when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); + when(im.hasIsland(any(), any(User.class))).thenReturn(true); + // when(im.isOwner(any(),any())).thenReturn(true); + // when(im.getOwner(any(),any())).thenReturn(uuid); + when(im.getIsland(world, user)).thenReturn(island); + when(im.getIslands(world, notUUID)).thenReturn(List.of(island)); + when(plugin.getIslands()).thenReturn(im); + + // Island + when(island.getOwner()).thenReturn(uuid); + when(island.hasTeam()).thenReturn(true); + + // Has team + when(im.inTeam(any(), eq(uuid))).thenReturn(true); + + // Players + when(pm.getUUID(anyString())).thenReturn(uuid); + when(plugin.getPlayers()).thenReturn(pm); + + // Server & Scheduler + BukkitScheduler sch = mock(BukkitScheduler.class); + when(Bukkit.getScheduler()).thenReturn(sch); + BukkitTask task = mock(BukkitTask.class); + when(sch.runTaskLater(any(), any(Runnable.class), any(Long.class))).thenReturn(task); + + // Locales + LocalesManager lm = mock(LocalesManager.class); + when(lm.get(any(), any())).thenReturn("mock translation"); + when(plugin.getLocalesManager()).thenReturn(lm); + + instance = spy(new AdminMaxHomesCommand(ac)); + label = "island"; + } + + @After + public void tearDown() { + User.clearUsers(); + Mockito.framework().clearInlineMocks(); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsIsEmpty() { + // Arrange: args is already empty + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + // Verify that showHelp was called + verify(instance).showHelp(instance, user); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSize1_UserNotPlayer() { + // Arrange + args.add("5"); + when(user.isPlayer()).thenReturn(false); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.use-in-game"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSize1_WrongWorld() { + // Arrange + args.add("5"); + when(user.isPlayer()).thenReturn(true); + World userWorld = mock(World.class); + World expectedWorld = mock(World.class); + when(user.getWorld()).thenReturn(userWorld); + doReturn(expectedWorld).when(instance).getWorld(); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.wrong-world"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSize1_InvalidMaxHomes() { + // Arrange + args.add("notanumber"); + when(user.isPlayer()).thenReturn(true); + World world = mock(World.class); + when(user.getWorld()).thenReturn(world); + doReturn(world).when(instance).getWorld(); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.must-be-positive-number", TextVariables.NUMBER, "notanumber"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSize1_UserNotOnIsland() { + // Arrange + args.add("5"); + when(user.isPlayer()).thenReturn(true); + World world = mock(World.class); + when(user.getWorld()).thenReturn(world); + doReturn(world).when(instance).getWorld(); + + Location location = mock(Location.class); + when(user.getLocation()).thenReturn(location); + + when(im.getIslandAt(location)).thenReturn(Optional.empty()); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.not-on-island"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSize1_Success() { + // Arrange + args.add("5"); + when(user.isPlayer()).thenReturn(true); + World world = mock(World.class); + when(user.getWorld()).thenReturn(world); + doReturn(world).when(instance).getWorld(); + + Location location = mock(Location.class); + when(user.getLocation()).thenReturn(location); + + Island island = mock(Island.class); + when(im.getIslandAt(location)).thenReturn(Optional.of(island)); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertTrue(result); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan1_InvalidPlayer() { + // Arrange + args.add("UnknownPlayer"); + args.add("5"); + + when(pm.getUUID("UnknownPlayer")).thenReturn(null); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "UnknownPlayer"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan1_InvalidMaxHomes() { + // Arrange + args.add("ValidPlayer"); + args.add("notanumber"); + + UUID playerUUID = UUID.randomUUID(); + when(pm.getUUID("ValidPlayer")).thenReturn(playerUUID); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.must-be-positive-number", TextVariables.NUMBER, "notanumber"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan1_TargetPlayerHasNoIslands() { + // Arrange + args.add("ValidPlayer"); + args.add("5"); + + UUID playerUUID = UUID.randomUUID(); + when(pm.getUUID("ValidPlayer")).thenReturn(playerUUID); + + User targetUser = mock(User.class); + // Mock static method User.getInstance(UUID) + // Assuming use of Mockito with inline mocking or PowerMockito + PowerMockito.mockStatic(User.class); + when(User.getInstance(playerUUID)).thenReturn(targetUser); + + doReturn(new HashMap()).when(instance).getNameIslandMap(targetUser); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.player-has-no-island"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan2_UnknownIsland() { + // Arrange + args.add("ValidPlayer"); + args.add("5"); + args.add("UnknownIsland"); + + UUID playerUUID = UUID.randomUUID(); + when(pm.getUUID("ValidPlayer")).thenReturn(playerUUID); + + User targetUser = mock(User.class); + // Mock static method User.getInstance(UUID) + // Assuming use of Mockito with inline mocking or PowerMockito + PowerMockito.mockStatic(User.class); + when(User.getInstance(playerUUID)).thenReturn(targetUser); + + Map islandsMap = new HashMap<>(); + islandsMap.put("Island1", mock(Island.class)); + doReturn(islandsMap).when(instance).getNameIslandMap(targetUser); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("commands.admin.maxhomes.errors.unknown-island", TextVariables.NAME, "UnknownIsland"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan1_Success() { + // Arrange + args.add("ValidPlayer"); + args.add("5"); + + UUID playerUUID = UUID.randomUUID(); + when(pm.getUUID("ValidPlayer")).thenReturn(playerUUID); + + User targetUser = mock(User.class); + // Mock static method User.getInstance(UUID) + PowerMockito.mockStatic(User.class); + when(User.getInstance(playerUUID)).thenReturn(targetUser); + + Map islandsMap = new HashMap<>(); + islandsMap.put("", mock(Island.class)); // Assuming empty string key as in code + doReturn(islandsMap).when(instance).getNameIslandMap(targetUser); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertTrue(result); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#setup()}. + */ + @Test + public void testSetup() { + assertEquals("mod.maxhomes", instance.getPermission()); + assertFalse(instance.isOnlyPlayer()); + assertEquals("commands.admin.maxhomes.parameters", instance.getParameters()); + assertEquals("commands.admin.maxhomes.description", instance.getDescription()); + + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testTabComplete_ArgsSize2_ReturnsPlayerNames() { + // Arrange + args.add("someArg"); // args.size() == 1 + args.add(""); // args.size() == 2 + + // Mock Util.getOnlinePlayerList(user) + List onlinePlayers = Arrays.asList("PlayerOne", "PlayerTwo"); + PowerMockito.mockStatic(Util.class); + when(Util.getOnlinePlayerList(user)).thenReturn(onlinePlayers); + + // Act + Optional> result = instance.tabComplete(user, label, args); + + // Assert + assertTrue(result.isPresent()); + assertEquals(onlinePlayers, result.get()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testTabComplete_ArgsSizeGreaterThan3_ReturnsIslandNames() { + // Arrange + args.add("someArg"); + args.add("anotherArg"); + args.add("thirdArg"); + args.add(""); // args.size() == 4 (>3) + String lastArg = args.get(args.size() - 1); + + Map nameIslandMap = new HashMap<>(); + nameIslandMap.put("IslandOne", mock(Island.class)); + nameIslandMap.put("IslandTwo", mock(Island.class)); + doReturn(nameIslandMap).when(instance).getNameIslandMap(any()); + + // Create the list of island names + List islandNames = new ArrayList<>(nameIslandMap.keySet()); + + // Mock Util.tabLimit() + List limitedIslandNames = Arrays.asList("IslandOne", "IslandTwo"); + PowerMockito.mockStatic(Util.class); + when(Util.tabLimit(islandNames, lastArg)).thenReturn(limitedIslandNames); + + // Act + Optional> result = instance.tabComplete(user, label, args); + + // Assert + assertTrue(result.isPresent()); + assertEquals(limitedIslandNames, result.get()); + + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testTabComplete_Otherwise_ReturnsListOfOne() { + // Arrange + args.add(""); // args.size() == 1 + + // Act + Optional> result = instance.tabComplete(user, label, args); + + // Assert + assertTrue(result.isPresent()); + assertEquals(Collections.singletonList("1"), result.get()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testTabComplete_ArgsSize3_ReturnsListOfOne() { + // Arrange + args.add("someArg"); + args.add("anotherArg"); + args.add(""); // args.size() == 3 + + // Act + Optional> result = instance.tabComplete(user, label, args); + + // Assert + assertTrue(result.isPresent()); + assertEquals(Collections.singletonList("1"), result.get()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteWithEmptyIslands_ShouldReturnFalse() { + // Arrange + instance.maxHomes = 5; // Set maxHomes to a valid number + instance.islands = new HashMap<>(); // Empty islands map + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertFalse(result); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteWithMaxHomesLessThanOne_ShouldReturnFalse() { + // Arrange + instance.maxHomes = 0; // Invalid maxHomes + Island island = mock(Island.class); + Map islandsMap = new HashMap<>(); + islandsMap.put("TestIsland", island); + instance.islands = islandsMap; + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertFalse(result); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteSuccessful_SingleIsland() { + // Arrange + instance.maxHomes = 5; + Island island = mock(Island.class); + Map islandsMap = new HashMap<>(); + islandsMap.put("TestIsland", island); + instance.islands = islandsMap; + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertTrue(result); + verify(island).setMaxHomes(5); + verify(user).sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, "TestIsland", + TextVariables.NUMBER, "5"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteSuccessful_MultipleIslands() { + // Arrange + instance.maxHomes = 3; + Island island1 = mock(Island.class); + Island island2 = mock(Island.class); + Map islandsMap = new HashMap<>(); + islandsMap.put("IslandOne", island1); + islandsMap.put("IslandTwo", island2); + instance.islands = islandsMap; + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertTrue(result); + verify(island1).setMaxHomes(3); + verify(island2).setMaxHomes(3); + verify(user).sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, "IslandOne", + TextVariables.NUMBER, "3"); + verify(user).sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, "IslandTwo", + TextVariables.NUMBER, "3"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteAfterSuccessfulCanExecute() { + // Arrange + args.add("5"); + when(user.isPlayer()).thenReturn(true); + World world = mock(World.class); + when(user.getWorld()).thenReturn(world); + doReturn(world).when(instance).getWorld(); + + Location location = mock(Location.class); + when(user.getLocation()).thenReturn(location); + + Island island = mock(Island.class); + when(im.getIslandAt(location)).thenReturn(Optional.of(island)); + + // Act + boolean canExecuteResult = instance.canExecute(user, label, args); + boolean executeResult = instance.execute(user, label, args); + + // Assert + assertTrue(canExecuteResult); + assertTrue(executeResult); + verify(island).setMaxHomes(5); + verify(user).sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, "", TextVariables.NUMBER, + "5"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteWithInvalidMaxHomesAfterCanExecute() { + // Arrange + args.add("-1"); + when(user.isPlayer()).thenReturn(true); + World world = mock(World.class); + when(user.getWorld()).thenReturn(world); + doReturn(world).when(instance).getWorld(); + + // Act + boolean canExecuteResult = instance.canExecute(user, label, args); + boolean executeResult = instance.execute(user, label, args); + + // Assert + assertFalse(canExecuteResult); + assertFalse(executeResult); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteWithMultipleIslandsAfterCanExecute() { + // Arrange + args.add("ValidPlayer"); + args.add("4"); + + UUID playerUUID = UUID.randomUUID(); + when(pm.getUUID("ValidPlayer")).thenReturn(playerUUID); + + User targetUser = mock(User.class); + PowerMockito.mockStatic(User.class); + when(User.getInstance(playerUUID)).thenReturn(targetUser); + + Island island1 = mock(Island.class); + Island island2 = mock(Island.class); + Map islandsMap = new HashMap<>(); + islandsMap.put("IslandA", island1); + islandsMap.put("IslandB", island2); + doReturn(islandsMap).when(instance).getNameIslandMap(targetUser); + + // Act + boolean canExecuteResult = instance.canExecute(user, label, args); + boolean executeResult = instance.execute(user, label, args); + + // Assert + assertTrue(canExecuteResult); + assertTrue(executeResult); + verify(island1).setMaxHomes(4); + verify(island2).setMaxHomes(4); + verify(user).sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, "IslandA", + TextVariables.NUMBER, "4"); + verify(user).sendMessage("commands.admin.maxhomes.max-homes-set", TextVariables.NAME, "IslandB", + TextVariables.NUMBER, "4"); + } + +} diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java index 4fda23321..3e2be1e67 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -19,7 +18,6 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitScheduler; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -30,11 +28,10 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; @@ -43,25 +40,23 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.FlagsManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, User.class }) -public class AdminResetFlagsCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class AdminResetFlagsCommandTest extends AbstractCommonSetup { @Mock private CompositeCommand ac; private final UUID uuid = UUID.randomUUID(); @Mock - private IslandsManager im; - @Mock private PlayersManager pm; @Mock private FlagsManager fm; @@ -71,8 +66,6 @@ public class AdminResetFlagsCommandTest { private Flag flag2; @Mock private Flag flag3; - @Mock - private Player player; private AdminResetFlagsCommand arf; private @Nullable User user; @@ -81,10 +74,7 @@ public class AdminResetFlagsCommandTest { */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); // Command manager CommandsManager cm = mock(CommandsManager.class); @@ -96,8 +86,8 @@ public void setUp() throws Exception { when(ac.getPermissionPrefix()).thenReturn("bskyblock."); // Player - when(player.getUniqueId()).thenReturn(uuid); - user = User.getInstance(player); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + user = User.getInstance(mockPlayer); // Flags manager when(plugin.getFlagsManager()).thenReturn(fm); @@ -175,7 +165,7 @@ public void testSetup() { public void testExecuteUserStringListOfStringTwoArgs() { List args = Arrays.asList("sdfsd", "werwerw"); assertFalse(arf.execute(user, "", args)); - verify(player).sendMessage(eq("commands.help.header")); + checkSpigotMessage("commands.help.header"); } /** @@ -184,7 +174,7 @@ public void testExecuteUserStringListOfStringTwoArgs() { @Test public void testExecuteUserStringListOfStringOneArgNotFlag() { assertFalse(arf.execute(user, "", Collections.singletonList("FLAG3"))); - verify(player).sendMessage(eq("commands.help.header")); + checkSpigotMessage("commands.help.header"); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetHomeCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetHomeCommandTest.java new file mode 100644 index 000000000..d5a733d97 --- /dev/null +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetHomeCommandTest.java @@ -0,0 +1,354 @@ +package world.bentobox.bentobox.api.commands.admin; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.scheduler.BukkitTask; +import org.eclipse.jdt.annotation.Nullable; +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 world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.Settings; +import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.managers.CommandsManager; +import world.bentobox.bentobox.managers.IslandWorldManager; +import world.bentobox.bentobox.managers.IslandsManager; +import world.bentobox.bentobox.managers.LocalesManager; +import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; + +/** + * @author tastybento + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class AdminResetHomeCommandTest { + + @Mock + private CompositeCommand ac; + @Mock + private User user; + @Mock + private IslandsManager im; + @Mock + private PlayersManager pm; + private UUID notUUID; + private UUID uuid; + @Mock + private World world; + @Mock + private @Nullable Island island; + private AdminResetHomeCommand instance; + private String label; + private ArrayList args = new ArrayList<>(); + + @Before + public void setUp() throws Exception { + PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); + + // Set up plugin + BentoBox plugin = mock(BentoBox.class); + Whitebox.setInternalState(BentoBox.class, "instance", plugin); + + // Util + Util.setPlugin(plugin); + + // Command manager + CommandsManager cm = mock(CommandsManager.class); + when(plugin.getCommandsManager()).thenReturn(cm); + + // Settings + Settings s = mock(Settings.class); + when(s.getResetCooldown()).thenReturn(0); + when(plugin.getSettings()).thenReturn(s); + + // Player + Player p = mock(Player.class); + // Sometimes use Mockito.withSettings().verboseLogging() + when(user.isOp()).thenReturn(false); + uuid = UUID.randomUUID(); + notUUID = UUID.randomUUID(); + while (notUUID.equals(uuid)) { + notUUID = UUID.randomUUID(); + } + when(user.getUniqueId()).thenReturn(uuid); + when(user.getPlayer()).thenReturn(p); + when(user.getName()).thenReturn("tastybento"); + User.setPlugin(plugin); + + // Parent command has no aliases + when(ac.getSubCommandAliases()).thenReturn(new HashMap<>()); + when(ac.getTopLabel()).thenReturn("admin"); + when(ac.getWorld()).thenReturn(world); + + // Island World Manager + IslandWorldManager iwm = mock(IslandWorldManager.class); + when(plugin.getIWM()).thenReturn(iwm); + + // Player has island to begin with + when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); + when(im.hasIsland(any(), any(User.class))).thenReturn(true); + // when(im.isOwner(any(),any())).thenReturn(true); + // when(im.getOwner(any(),any())).thenReturn(uuid); + when(im.getIsland(world, user)).thenReturn(island); + when(im.getIslands(world, notUUID)).thenReturn(List.of(island)); + when(plugin.getIslands()).thenReturn(im); + + // Island + when(island.getOwner()).thenReturn(uuid); + when(island.hasTeam()).thenReturn(true); + + // Has team + when(im.inTeam(any(), eq(uuid))).thenReturn(true); + + // Players + when(pm.getUUID(anyString())).thenReturn(uuid); + when(plugin.getPlayers()).thenReturn(pm); + + // Server & Scheduler + BukkitScheduler sch = mock(BukkitScheduler.class); + when(Bukkit.getScheduler()).thenReturn(sch); + BukkitTask task = mock(BukkitTask.class); + when(sch.runTaskLater(any(), any(Runnable.class), any(Long.class))).thenReturn(task); + + // Locales + LocalesManager lm = mock(LocalesManager.class); + when(lm.get(any(), any())).thenReturn("mock translation"); + when(plugin.getLocalesManager()).thenReturn(lm); + + instance = spy(new AdminResetHomeCommand(ac)); + label = "island"; + } + + @After + public void tearDown() { + User.clearUsers(); + Mockito.framework().clearInlineMocks(); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsIsEmpty() { + // Arrange: args is already empty + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + // Verify that showHelp was called + verify(instance).showHelp(instance, user); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan1_InvalidPlayer() { + // Arrange + args.add("UnknownPlayer"); + + when(pm.getUUID("UnknownPlayer")).thenReturn(null); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "UnknownPlayer"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testArgsSizeGreaterThan2_UnknownIsland() { + // Arrange + args.add("ValidPlayer"); + args.add("UnknownIsland"); + + UUID playerUUID = UUID.randomUUID(); + when(pm.getUUID("ValidPlayer")).thenReturn(playerUUID); + + User targetUser = mock(User.class); + // Mock static method User.getInstance(UUID) + // Assuming use of Mockito with inline mocking or PowerMockito + PowerMockito.mockStatic(User.class); + when(User.getInstance(playerUUID)).thenReturn(targetUser); + + Map islandsMap = new HashMap<>(); + islandsMap.put("Island1", mock(Island.class)); + doReturn(islandsMap).when(instance).getNameIslandMap(targetUser); + + // Act + boolean result = instance.canExecute(user, label, args); + + // Assert + assertFalse(result); + verify(user).sendMessage("commands.admin.maxhomes.errors.unknown-island", TextVariables.NAME, "UnknownIsland"); + } + + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#setup()}. + */ + @Test + public void testSetup() { + assertEquals("mod.resethome", instance.getPermission()); + assertFalse(instance.isOnlyPlayer()); + assertEquals("commands.admin.resethome.parameters", instance.getParameters()); + assertEquals("commands.admin.resethome.description", instance.getDescription()); + + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testTabComplete_ArgsSize2_ReturnsPlayerNames() { + // Arrange + args.add("someArg"); // args.size() == 1 + args.add(""); // args.size() == 2 + + // Mock Util.getOnlinePlayerList(user) + List onlinePlayers = Arrays.asList("PlayerOne", "PlayerTwo"); + PowerMockito.mockStatic(Util.class); + when(Util.getOnlinePlayerList(user)).thenReturn(onlinePlayers); + + // Act + Optional> result = instance.tabComplete(user, label, args); + + // Assert + assertTrue(result.isPresent()); + assertEquals(onlinePlayers, result.get()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testTabComplete_ArgsSizeGreaterThan2_ReturnsIslandNames() { + // Arrange + args.add("someArg"); + args.add("anotherArg"); + args.add(""); // args.size() == 3 (>2) + String lastArg = args.get(args.size() - 1); + + Map nameIslandMap = new HashMap<>(); + nameIslandMap.put("IslandOne", mock(Island.class)); + nameIslandMap.put("IslandTwo", mock(Island.class)); + doReturn(nameIslandMap).when(instance).getNameIslandMap(any()); + + // Create the list of island names + List islandNames = new ArrayList<>(nameIslandMap.keySet()); + + // Mock Util.tabLimit() + List limitedIslandNames = Arrays.asList("IslandOne", "IslandTwo"); + PowerMockito.mockStatic(Util.class); + when(Util.tabLimit(islandNames, lastArg)).thenReturn(limitedIslandNames); + + // Act + Optional> result = instance.tabComplete(user, label, args); + + // Assert + assertTrue(result.isPresent()); + assertEquals(limitedIslandNames, result.get()); + + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteWithEmptyIslands_ShouldReturnFalse() { + // Arrange + instance.islands = new HashMap<>(); // Empty islands map + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertFalse(result); + } + + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteSuccessful_SingleIsland() { + // Arrange + Island island = mock(Island.class); + Map islandsMap = new HashMap<>(); + islandsMap.put("TestIsland", island); + instance.islands = islandsMap; + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertTrue(result); + verify(island).getHomes(); + verify(user).sendMessage("commands.admin.resethome.cleared", TextVariables.NAME, "TestIsland"); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminMaxHomesCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. + */ + @Test + public void testExecuteSuccessful_MultipleIslands() { + // Arrange + Island island1 = mock(Island.class); + Island island2 = mock(Island.class); + Map islandsMap = new HashMap<>(); + islandsMap.put("IslandOne", island1); + islandsMap.put("IslandTwo", island2); + instance.islands = islandsMap; + + // Act + boolean result = instance.execute(user, label, args); + + // Assert + assertTrue(result); + verify(island1).getHomes(); + verify(island2).getHomes(); + verify(user).sendMessage("commands.admin.resethome.cleared", TextVariables.NAME, "IslandOne"); + verify(user).sendMessage("commands.admin.resethome.cleared", TextVariables.NAME, "IslandTwo"); + } + +} diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommandTest.java index 4dc8c42e8..edd20932c 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommandTest.java @@ -30,13 +30,13 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; import world.bentobox.bentobox.util.Util; /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java index 007bd91d7..d4e73e4a4 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java @@ -40,6 +40,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; @@ -51,7 +52,6 @@ import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; import world.bentobox.bentobox.util.Util; /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java index 1e001f1de..0d87b0d1e 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java @@ -11,78 +11,64 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitScheduler; 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.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.util.Util; @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) -public class AdminRangeCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class AdminRangeCommandTest extends AbstractCommonSetup { + @Mock private CompositeCommand ac; + @Mock private User user; /** */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); Util.setPlugin(plugin); // Command manager CommandsManager cm = mock(CommandsManager.class); when(plugin.getCommandsManager()).thenReturn(cm); - // Player - Player p = mock(Player.class); - // Sometimes use Mockito.withSettings().verboseLogging() - user = mock(User.class); + // User when(user.isOp()).thenReturn(false); UUID uuid = UUID.randomUUID(); - UUID notUUID = UUID.randomUUID(); - while (notUUID.equals(uuid)) { - notUUID = UUID.randomUUID(); - } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getTranslation("commands.help.console")).thenReturn("Console"); User.setPlugin(plugin); // Parent command has no aliases - ac = mock(CompositeCommand.class); when(ac.getSubCommandAliases()).thenReturn(new HashMap<>()); when(ac.getWorld()).thenReturn(mock(World.class)); // Island World Manager - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(Mockito.any())).thenReturn("BSkyBlock"); when(plugin.getIWM()).thenReturn(iwm); // Player has island to begin with - IslandsManager im = mock(IslandsManager.class); when(im.hasIsland(Mockito.any(), Mockito.any(UUID.class))).thenReturn(true); when(im.hasIsland(Mockito.any(), Mockito.any(User.class))).thenReturn(true); when(plugin.getIslands()).thenReturn(im); @@ -117,10 +103,11 @@ public void tearDown() { public void testExecuteConsoleNoArgs() { AdminRangeCommand arc = new AdminRangeCommand(ac); CommandSender sender = mock(CommandSender.class); + when(sender.spigot()).thenReturn(spigot); User console = User.getInstance(sender); arc.execute(console, "", new ArrayList<>()); // Show help - Mockito.verify(sender).sendMessage("commands.help.header"); + checkSpigotMessage("commands.help.header"); } @Test diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java index 9cc92d44e..49fd2c3ac 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java @@ -2,6 +2,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -14,7 +15,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.junit.After; @@ -24,19 +24,16 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.util.Util; @@ -46,13 +43,14 @@ * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) -public class AdminRangeResetCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class AdminRangeResetCommandTest extends AbstractCommonSetup { + @Mock private CompositeCommand ac; private UUID uuid; + @Mock private User user; - private IslandsManager im; private PlayersManager pm; @Mock private PluginManager pim; @@ -61,21 +59,14 @@ public class AdminRangeResetCommandTest { */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); + super.setUp(); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); Util.setPlugin(plugin); // Command manager CommandsManager cm = mock(CommandsManager.class); when(plugin.getCommandsManager()).thenReturn(cm); - // Player - Player p = mock(Player.class); - // Sometimes use Mockito.withSettings().verboseLogging() - user = mock(User.class); when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); UUID notUUID = UUID.randomUUID(); @@ -83,23 +74,20 @@ public void setUp() throws Exception { notUUID = UUID.randomUUID(); } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); User.setPlugin(plugin); // Parent command has no aliases - ac = mock(CompositeCommand.class); when(ac.getSubCommandAliases()).thenReturn(new HashMap<>()); when(ac.getWorld()).thenReturn(mock(World.class)); // Island World Manager - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(Mockito.any())).thenReturn("BSkyBlock"); when(iwm.getIslandProtectionRange(Mockito.any())).thenReturn(200); when(plugin.getIWM()).thenReturn(iwm); // Player has island to begin with - im = mock(IslandsManager.class); when(im.hasIsland(Mockito.any(), Mockito.any(UUID.class))).thenReturn(true); when(im.hasIsland(Mockito.any(), Mockito.any(User.class))).thenReturn(true); Island island = mock(Island.class); @@ -142,10 +130,11 @@ public void tearDown() { public void testExecuteConsoleNoArgs() { AdminRangeResetCommand arc = new AdminRangeResetCommand(ac); CommandSender sender = mock(CommandSender.class); + when(sender.spigot()).thenReturn(spigot); User console = User.getInstance(sender); arc.execute(console, "", new ArrayList<>()); // Show help - Mockito.verify(sender).sendMessage("commands.help.header"); + checkSpigotMessage("commands.help.header"); } /** @@ -157,7 +146,7 @@ public void testExecutePlayerNoArgs() { AdminRangeResetCommand arc = new AdminRangeResetCommand(ac); arc.execute(user, "", new ArrayList<>()); // Show help - Mockito.verify(user).sendMessage("commands.help.header", "[label]", "BSkyBlock"); + verify(user).sendMessage("commands.help.header", "[label]", "BSkyBlock"); } /** @@ -169,7 +158,7 @@ public void testExecuteUnknownPlayer() { AdminRangeResetCommand arc = new AdminRangeResetCommand(ac); String[] name = { "tastybento" }; arc.execute(user, "", Arrays.asList(name)); - Mockito.verify(user).sendMessage("general.errors.unknown-player", "[name]", name[0]); + verify(user).sendMessage("general.errors.unknown-player", "[name]", name[0]); } /** @@ -184,7 +173,7 @@ public void testExecuteKnownPlayerNotOwnerNoTeam() { List args = new ArrayList<>(); args.add("tastybento"); arc.execute(user, "", args); - Mockito.verify(user).sendMessage("general.errors.player-has-no-island"); + verify(user).sendMessage("general.errors.player-has-no-island"); } @Test @@ -196,7 +185,7 @@ public void testExecuteKnownPlayerNotOwnerButInTeam() { List args = new ArrayList<>(); args.add("tastybento"); arc.execute(user, "", args); - Mockito.verify(user, never()).sendMessage("general.errors.player-has-no-island"); + verify(user, never()).sendMessage("general.errors.player-has-no-island"); } /** @@ -209,7 +198,7 @@ public void testExecuteKnownPlayer() { List args = new ArrayList<>(); args.add("tastybento"); arc.execute(user, "", args); - Mockito.verify(user).sendMessage("commands.admin.range.reset.success", TextVariables.NUMBER, "200"); + verify(user).sendMessage("commands.admin.range.reset.success", TextVariables.NUMBER, "200"); } } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java index 99d144034..01ed546c7 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java @@ -17,14 +17,10 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.util.Vector; -import org.eclipse.jdt.annotation.NonNull; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -32,19 +28,15 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.util.Util; @@ -54,64 +46,49 @@ * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) -public class AdminRangeSetCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class AdminRangeSetCommandTest extends AbstractCommonSetup { + @Mock + private CommandsManager cm; + + @Mock private CompositeCommand ac; private UUID uuid; + @Mock private User user; - private IslandsManager im; private PlayersManager pm; - @Mock - private PluginManager pim; - @Mock - private @NonNull Location location; /** */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); + Util.setPlugin(plugin); // Command manager - CommandsManager cm = mock(CommandsManager.class); when(plugin.getCommandsManager()).thenReturn(cm); - // Player - Player p = mock(Player.class); - // Sometimes use Mockito.withSettings().verboseLogging() - user = mock(User.class); when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); - UUID notUUID = UUID.randomUUID(); - while (notUUID.equals(uuid)) { - notUUID = UUID.randomUUID(); - } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); User.setPlugin(plugin); // Parent command has no aliases - ac = mock(CompositeCommand.class); when(ac.getSubCommandAliases()).thenReturn(new HashMap<>()); when(ac.getWorld()).thenReturn(mock(World.class)); // Island World Manager - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); when(iwm.getIslandProtectionRange(any())).thenReturn(200); when(plugin.getIWM()).thenReturn(iwm); // Player has island to begin with - im = mock(IslandsManager.class); when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); when(im.hasIsland(any(), any(User.class))).thenReturn(true); - Island island = mock(Island.class); when(island.getRange()).thenReturn(50); when(island.getProtectionRange()).thenReturn(50); when(location.toVector()).thenReturn(new Vector(2, 3, 4)); @@ -155,10 +132,11 @@ public void tearDown() { public void testExecuteConsoleNoArgs() { AdminRangeSetCommand arc = new AdminRangeSetCommand(ac); CommandSender sender = mock(CommandSender.class); + when(sender.spigot()).thenReturn(spigot); User console = User.getInstance(sender); assertFalse(arc.canExecute(console, "", new ArrayList<>())); // Show help - verify(sender).sendMessage("commands.help.header"); + checkSpigotMessage("commands.help.header"); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java index 5ec46b4e6..70aa816f9 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java @@ -21,13 +21,10 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.util.Vector; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -38,18 +35,15 @@ 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 com.google.common.collect.ImmutableSet; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; @@ -61,7 +55,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) -public class AdminTeamDisbandCommandTest { +public class AdminTeamDisbandCommandTest extends AbstractCommonSetup { @Mock private CompositeCommand ac; @@ -69,31 +63,17 @@ public class AdminTeamDisbandCommandTest { @Mock private User user; @Mock - private Player p; - @Mock private Player p2; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; - @Mock - private PluginManager pim; + private UUID notUUID; - @Mock - private @Nullable Island island; - @Mock - private @NonNull Location location; + private AdminTeamDisbandCommand itl; - /** - */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); Util.setPlugin(plugin); // Command manager @@ -109,25 +89,21 @@ public void setUp() throws Exception { notUUID = UUID.randomUUID(); } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); User.setPlugin(plugin); // Set up users - when(p.getUniqueId()).thenReturn(uuid); + when(mockPlayer.getUniqueId()).thenReturn(uuid); when(p2.getUniqueId()).thenReturn(notUUID); - User.getInstance(p); + User.getInstance(mockPlayer); + when(p2.spigot()).thenReturn(spigot); User.getInstance(p2); // Parent command has no aliases ac = mock(CompositeCommand.class); when(ac.getSubCommandAliases()).thenReturn(new HashMap<>()); - // Island World Manager - IslandWorldManager iwm = mock(IslandWorldManager.class); - when(plugin.getIWM()).thenReturn(iwm); - // Player has island to begin with - im = mock(IslandsManager.class); when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); when(im.hasIsland(any(), any(User.class))).thenReturn(true); when(island.getOwner()).thenReturn(uuid); @@ -166,6 +142,7 @@ public void setUp() throws Exception { // Online players PowerMockito.mockStatic(Util.class, Mockito.RETURNS_MOCKS); + when(Util.getOnlinePlayerList(user)).thenReturn(List.of("tastybento", "BONNe")); when(Util.translateColorCodes(anyString())) .thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); @@ -246,8 +223,7 @@ public void testExecuteSuccess() { verify(im, never()).removePlayer(island, uuid); verify(im).removePlayer(island, notUUID); verify(user).sendMessage("commands.admin.team.disband.success", TextVariables.NAME, "tastybento"); - verify(p).sendMessage("commands.admin.team.disband.disbanded"); - verify(p2).sendMessage("commands.admin.team.disband.disbanded"); + checkSpigotMessage("commands.admin.team.disband.disbanded", 2); // 2 + 1 verify(pim, times(3)).callEvent(any()); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/DefaultPlayerCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/DefaultPlayerCommandTest.java index d703ef44a..59d40d9d3 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/DefaultPlayerCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/DefaultPlayerCommandTest.java @@ -14,32 +14,29 @@ import org.bukkit.Bukkit; import org.bukkit.World; -import org.eclipse.jdt.annotation.Nullable; 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 world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.IslandsManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, IslandsManager.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, IslandsManager.class, Util.class }) public class DefaultPlayerCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -49,10 +46,6 @@ public class DefaultPlayerCommandTest extends RanksManagerBeforeClassTest { private WorldSettings ws; @Mock private User user; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; class PlayerCommand extends DefaultPlayerCommand { @@ -68,7 +61,6 @@ protected PlayerCommand(GameModeAddon addon) { @Before public void setUp() throws Exception { super.setUp(); - PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); // User when(user.getUniqueId()).thenReturn(UUID.randomUUID()); @@ -85,8 +77,6 @@ public void setUp() throws Exception { when(ws.getDefaultPlayerAction()).thenReturn("go"); when(ws.getDefaultNewPlayerAction()).thenReturn("create"); - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - when(ws.getPlayerCommandAliases()).thenReturn("island is"); when(addon.getWorldSettings()).thenReturn(ws); dpc = new PlayerCommand(addon); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanCommandTest.java index 4ea40b3b6..62b2b2e74 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanCommandTest.java @@ -39,27 +39,26 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class }) public class IslandBanCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -68,16 +67,10 @@ public class IslandBanCommandTest extends RanksManagerBeforeClassTest { @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; @Mock - private Island island; - @Mock private Addon addon; private IslandBanCommand ibc; - @Mock - private Player targetPlayer; @Before public void setUp() throws Exception { @@ -153,13 +146,13 @@ public void setUp() throws Exception { // Target bill - default target. Non Op, online, no ban prevention permission UUID uuid = UUID.randomUUID(); when(pm.getUUID(anyString())).thenReturn(uuid); - when(targetPlayer.getName()).thenReturn("bill"); - when(targetPlayer.getDisplayName()).thenReturn("&Cbill"); - when(targetPlayer.getUniqueId()).thenReturn(uuid); - when(targetPlayer.isOp()).thenReturn(false); - when(targetPlayer.isOnline()).thenReturn(true); - when(targetPlayer.hasPermission(anyString())).thenReturn(false); - User.getInstance(targetPlayer); + when(mockPlayer.getName()).thenReturn("bill"); + when(mockPlayer.getDisplayName()).thenReturn("&Cbill"); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + when(mockPlayer.isOp()).thenReturn(false); + when(mockPlayer.isOnline()).thenReturn(true); + when(mockPlayer.hasPermission(anyString())).thenReturn(false); + User.getInstance(mockPlayer); // Island Ban Command ibc = new IslandBanCommand(ic); @@ -242,15 +235,15 @@ public void testBanAlreadyBanned() { @Test public void testBanOp() { - when(targetPlayer.isOp()).thenReturn(true); + when(mockPlayer.isOp()).thenReturn(true); assertFalse(ibc.canExecute(user, ibc.getLabel(), Collections.singletonList("bill"))); verify(user).sendMessage("commands.island.ban.cannot-ban"); } @Test public void testBanOnlineNoBanPermission() { - when(targetPlayer.hasPermission(anyString())).thenReturn(true); - User.getInstance(targetPlayer); + when(mockPlayer.hasPermission(anyString())).thenReturn(true); + User.getInstance(mockPlayer); assertFalse(ibc.canExecute(user, ibc.getLabel(), Collections.singletonList("billy"))); verify(user).sendMessage("commands.island.ban.cannot-ban"); @@ -258,7 +251,7 @@ public void testBanOnlineNoBanPermission() { @Test public void testBanOfflineUserSuccess() { - when(targetPlayer.isOnline()).thenReturn(false); + when(mockPlayer.isOnline()).thenReturn(false); assertTrue(ibc.canExecute(user, ibc.getLabel(), Collections.singletonList("bill"))); // Allow adding to ban list @@ -266,7 +259,7 @@ public void testBanOfflineUserSuccess() { // Run execute assertTrue(ibc.execute(user, ibc.getLabel(), Collections.singletonList("bill"))); verify(user).sendMessage("commands.island.ban.player-banned", TextVariables.NAME, "bill", TextVariables.DISPLAY_NAME, "&Cbill"); - verify(targetPlayer).sendMessage("commands.island.ban.owner-banned-you"); + checkSpigotMessage("commands.island.ban.owner-banned-you"); } @Test @@ -279,7 +272,7 @@ public void testBanOnlineUserSuccess() { assertTrue(ibc.execute(user, ibc.getLabel(), Collections.singletonList("bill"))); verify(user).sendMessage("commands.island.ban.player-banned", TextVariables.NAME, "bill", TextVariables.DISPLAY_NAME, "&Cbill"); - verify(targetPlayer).sendMessage("commands.island.ban.owner-banned-you"); + checkSpigotMessage("commands.island.ban.owner-banned-you"); } @Test @@ -291,8 +284,8 @@ public void testCancelledBan() { assertFalse(ibc.execute(user, ibc.getLabel(), Collections.singletonList("bill"))); verify(user, never()).sendMessage("commands.island.ban.player-banned", TextVariables.NAME, - targetPlayer.getName(), TextVariables.DISPLAY_NAME, targetPlayer.getDisplayName()); - verify(targetPlayer, never()).sendMessage("commands.island.ban.owner-banned-you"); + mockPlayer.getName(), TextVariables.DISPLAY_NAME, mockPlayer.getDisplayName()); + verify(mockPlayer, never()).sendMessage("commands.island.ban.owner-banned-you"); } @Test diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanlistCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanlistCommandTest.java index 5e10b916a..67b396679 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanlistCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandBanlistCommandTest.java @@ -19,7 +19,6 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitScheduler; import org.junit.Before; import org.junit.Test; @@ -31,40 +30,31 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandBanlistCommandTest extends RanksManagerBeforeClassTest { @Mock private CompositeCommand ic; - private UUID uuid; @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; - @Mock - private Island island; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -78,12 +68,10 @@ public void setUp() throws Exception { when(plugin.getSettings()).thenReturn(s); // Player - Player p = mock(Player.class); - // Sometimes use Mockito.withSettings().verboseLogging() when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getPermissionValue(anyString(), anyInt())).thenReturn(-1); // Unlimited bans when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); @@ -112,9 +100,7 @@ public void setUp() throws Exception { when(im.getIsland(any(), any(UUID.class))).thenReturn(island); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(plugin.getIWM()).thenReturn(iwm); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandDeletehomeCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandDeletehomeCommandTest.java index a95434c81..1ff0a42bb 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandDeletehomeCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandDeletehomeCommandTest.java @@ -18,59 +18,43 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.eclipse.jdt.annotation.NonNull; import org.jetbrains.annotations.NotNull; 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 world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandDeletehomeCommandTest extends RanksManagerBeforeClassTest { @Mock private CompositeCommand ic; - private UUID uuid; + @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; - @Mock - private Island island; private IslandDeletehomeCommand idh; - @Mock - private IslandWorldManager iwm; - @Mock - private @NonNull World world; - @Mock - private Location location; /** * @throws java.lang.Exception @@ -99,13 +83,11 @@ public void setUp() throws Exception { when(ic.getSubCommand(Mockito.anyString())).thenReturn(Optional.empty()); when(ic.getAddon()).thenReturn(addon); when(ic.getWorld()).thenReturn(world); - when(plugin.getIslands()).thenReturn(im); // Player - Player player = mock(Player.class); when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(player); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getWorld()).thenReturn(world); when(user.getTranslation(anyString())).thenAnswer(i -> i.getArgument(0, String.class)); @@ -131,10 +113,6 @@ public void setUp() throws Exception { when(iwm.isEnd(any())).thenReturn(false); // Number of homes default when(iwm.getMaxHomes(any())).thenReturn(3); - when(plugin.getIWM()).thenReturn(iwm); - - // Bukkit - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); idh = new IslandDeletehomeCommand(ic); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java index a21b03bd3..fed4c3d5a 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java @@ -30,15 +30,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.stubbing.Answer; -import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.TestWorldSettings; import world.bentobox.bentobox.api.addons.Addon; @@ -48,20 +47,18 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandExpelCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -70,23 +67,15 @@ public class IslandExpelCommandTest extends RanksManagerBeforeClassTest { @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; @Mock - private Island island; - @Mock private LocalesManager lm; @Mock - private IslandWorldManager iwm; - @Mock private Addon addon; private IslandExpelCommand iec; @Mock private Server server; - @Mock - private Player p; @Before public void setUp() throws Exception { @@ -108,10 +97,11 @@ public void setUp() throws Exception { uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); when(server.getOnlinePlayers()).thenReturn(Collections.emptySet()); - when(p.getServer()).thenReturn(server); - when(user.getPlayer()).thenReturn(p); + when(mockPlayer.getServer()).thenReturn(server); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getDisplayName()).thenReturn("&Ctastybento"); + when(user.isOnline()).thenReturn(true); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); // Parent command has no aliases @@ -130,7 +120,6 @@ public void setUp() throws Exception { // Server & Scheduler BukkitScheduler sch = mock(BukkitScheduler.class); - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); when(Bukkit.getScheduler()).thenReturn(sch); // Island Banned list initialization @@ -296,7 +285,7 @@ public void testCanExecuteOfflinePlayer() { public void testCanExecuteInvisiblePlayer() { when(im.hasIsland(any(), any(User.class))).thenReturn(true); Player t = setUpTarget(); - when(p.canSee(t)).thenReturn(false); + when(mockPlayer.canSee(t)).thenReturn(false); //when(im.getMembers(any(), any())).thenReturn(Collections.emptySet()); assertFalse(iec.canExecute(user, "", Collections.singletonList("tasty"))); verify(user).sendMessage("general.errors.offline-player"); @@ -365,10 +354,11 @@ private Player setUpTarget() { when(t.getName()).thenReturn("target"); when(t.getDisplayName()).thenReturn("&Ctarget"); when(t.getServer()).thenReturn(server); + when(t.spigot()).thenReturn(spigot); when(server.getOnlinePlayers()).thenReturn(Collections.emptySet()); User.getInstance(t); when(pm.getUUID(anyString())).thenReturn(target); - when(p.canSee(t)).thenReturn(true); + when(mockPlayer.canSee(t)).thenReturn(true); when(Bukkit.getPlayer(target)).thenReturn(t); return t; } @@ -472,20 +462,25 @@ public void testTabCompleteUserStringListPlayersOnIsland() { List list = new ArrayList<>(); Player p1 = mock(Player.class); when(p1.getName()).thenReturn("normal"); - when(p.canSee(p1)).thenReturn(true); + when(p1.spigot()).thenReturn(spigot); + when(mockPlayer.canSee(p1)).thenReturn(true); Player p2 = mock(Player.class); when(p2.getName()).thenReturn("op"); - when(p.canSee(p2)).thenReturn(true); + when(p2.spigot()).thenReturn(spigot); + when(mockPlayer.canSee(p2)).thenReturn(true); when(p2.isOp()).thenReturn(true); Player p3 = mock(Player.class); when(p3.getName()).thenReturn("invisible"); + when(p3.spigot()).thenReturn(spigot); Player p4 = mock(Player.class); when(p4.getName()).thenReturn("adminPerm"); - when(p.canSee(p4)).thenReturn(true); + when(p4.spigot()).thenReturn(spigot); + when(mockPlayer.canSee(p4)).thenReturn(true); when(p4.hasPermission(eq("bskyblock.admin.noexpel"))).thenReturn(true); Player p5 = mock(Player.class); when(p5.getName()).thenReturn("modPerm"); - when(p.canSee(p5)).thenReturn(true); + when(p5.spigot()).thenReturn(spigot); + when(mockPlayer.canSee(p5)).thenReturn(true); when(p5.hasPermission(eq("bskyblock.mod.bypassexpel"))).thenReturn(true); list.add(p1); list.add(p2); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java index da5b15bf9..5d3af68ef 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java @@ -24,7 +24,6 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; @@ -42,8 +41,8 @@ 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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; @@ -51,7 +50,6 @@ import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.api.user.Notifier; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.IslandWorldManager; @@ -69,22 +67,18 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({ Bukkit.class, BentoBox.class, Util.class }) -public class IslandGoCommandTest { +public class IslandGoCommandTest extends AbstractCommonSetup { @Mock private CompositeCommand ic; private User user; @Mock private IslandsManager im; @Mock - private Island island; - @Mock private PluginManager pim; @Mock private Settings s; @Mock private BukkitTask task; - @Mock - private Player player; private IslandGoCommand igc; @Mock private Notifier notifier; @@ -97,10 +91,7 @@ public class IslandGoCommandTest { */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); // Command manager CommandsManager cm = mock(CommandsManager.class); @@ -110,11 +101,11 @@ public void setUp() throws Exception { when(plugin.getSettings()).thenReturn(s); // Player - when(player.isOp()).thenReturn(false); - when(player.getUniqueId()).thenReturn(uuid); - when(player.getName()).thenReturn("tastybento"); - when(player.getWorld()).thenReturn(world); - user = User.getInstance(player); + when(mockPlayer.isOp()).thenReturn(false); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + when(mockPlayer.getName()).thenReturn("tastybento"); + when(mockPlayer.getWorld()).thenReturn(world); + user = User.getInstance(mockPlayer); // Set the User class plugin as this one User.setPlugin(plugin); @@ -197,7 +188,7 @@ public void tearDown() { public void testExecuteMidTeleport() { when(im.isGoingHome(user)).thenReturn(true); assertFalse(igc.canExecute(user, igc.getLabel(), Collections.emptyList())); - verify(player).sendMessage("commands.island.go.teleport"); + checkSpigotMessage("commands.island.go.in-progress"); } /** @@ -207,7 +198,7 @@ public void testExecuteMidTeleport() { public void testExecuteNoArgsNoIsland() { when(im.getIslands(world, uuid)).thenReturn(List.of()); assertFalse(igc.canExecute(user, igc.getLabel(), Collections.emptyList())); - verify(player).sendMessage("general.errors.no-island"); + checkSpigotMessage("general.errors.no-island"); } /** @@ -248,9 +239,9 @@ public void testExecuteNoArgsReservedIslandNoCreateCommand() { @Test public void testExecuteNoArgsNoTeleportWhenFalling() { Flags.PREVENT_TELEPORT_WHEN_FALLING.setSetting(world, true); - when(player.getFallDistance()).thenReturn(10F); + when(mockPlayer.getFallDistance()).thenReturn(10F); assertFalse(igc.canExecute(user, igc.getLabel(), Collections.emptyList())); - verify(player).sendMessage(eq("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint")); + checkSpigotMessage("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint"); } /** @@ -259,7 +250,7 @@ public void testExecuteNoArgsNoTeleportWhenFalling() { @Test public void testExecuteNoArgsNoTeleportWhenFallingNotFalling() { Flags.PREVENT_TELEPORT_WHEN_FALLING.setSetting(world, true); - when(player.getFallDistance()).thenReturn(0F); + when(mockPlayer.getFallDistance()).thenReturn(0F); assertTrue(igc.canExecute(user, igc.getLabel(), Collections.emptyList())); } @@ -279,9 +270,9 @@ public void testExecuteNoArgsMultipleHomes() { @Test public void testExecuteArgs1MultipleHomes() { assertFalse(igc.execute(user, igc.getLabel(), Collections.singletonList("1"))); - verify(player).sendMessage("commands.island.go.unknown-home"); - verify(player).sendMessage("commands.island.sethome.homes-are"); - verify(player).sendMessage("commands.island.sethome.home-list-syntax"); + checkSpigotMessage("commands.island.go.unknown-home"); + checkSpigotMessage("commands.island.sethome.homes-are"); + checkSpigotMessage("commands.island.sethome.home-list-syntax"); } /** @@ -292,7 +283,7 @@ public void testExecuteNoArgsDelay() { when(s.getDelayTime()).thenReturn(10); assertTrue(igc.execute(user, igc.getLabel(), Collections.emptyList())); - verify(player).sendMessage(eq("commands.delay.stand-still")); + checkSpigotMessage("commands.delay.stand-still"); } /** @@ -306,8 +297,8 @@ public void testExecuteNoArgsDelayTwice() { // Twice assertTrue(igc.execute(user, igc.getLabel(), Collections.emptyList())); verify(task).cancel(); - verify(player).sendMessage(eq("commands.delay.previous-command-cancelled")); - verify(player, Mockito.times(2)).sendMessage(eq("commands.delay.stand-still")); + checkSpigotMessage("commands.delay.previous-command-cancelled"); + checkSpigotMessage("commands.delay.stand-still", 2); } /** @@ -318,10 +309,10 @@ public void testOnPlayerMoveHeadMoveNothing() { Location l = mock(Location.class); Vector vector = mock(Vector.class); when(l.toVector()).thenReturn(vector); - when(player.getLocation()).thenReturn(l); - PlayerMoveEvent e = new PlayerMoveEvent(player, l, l); + when(mockPlayer.getLocation()).thenReturn(l); + PlayerMoveEvent e = new PlayerMoveEvent(mockPlayer, l, l); igc.onPlayerMove(e); - verify(player, Mockito.never()).sendMessage(eq("commands.delay.moved-so-command-cancelled")); + verify(mockPlayer, Mockito.never()).sendMessage(eq("commands.delay.moved-so-command-cancelled")); } /** @@ -332,11 +323,11 @@ public void testOnPlayerMoveHeadMoveTeleportPending() { Location l = mock(Location.class); Vector vector = mock(Vector.class); when(l.toVector()).thenReturn(vector); - when(player.getLocation()).thenReturn(l); + when(mockPlayer.getLocation()).thenReturn(l); testExecuteNoArgsDelay(); - PlayerMoveEvent e = new PlayerMoveEvent(player, l, l); + PlayerMoveEvent e = new PlayerMoveEvent(mockPlayer, l, l); igc.onPlayerMove(e); - verify(player, Mockito.never()).sendMessage(eq("commands.delay.moved-so-command-cancelled")); + checkSpigotMessage("commands.delay.moved-so-command-cancelled", 0); } /** @@ -347,12 +338,12 @@ public void testOnPlayerMovePlayerMoveTeleportPending() { Location l = mock(Location.class); Vector vector = mock(Vector.class); when(l.toVector()).thenReturn(vector); - when(player.getLocation()).thenReturn(l); + when(mockPlayer.getLocation()).thenReturn(l); testExecuteNoArgsDelay(); Location l2 = mock(Location.class); Vector vector2 = mock(Vector.class); when(l2.toVector()).thenReturn(vector2); - PlayerMoveEvent e = new PlayerMoveEvent(player, l, l2); + PlayerMoveEvent e = new PlayerMoveEvent(mockPlayer, l, l2); igc.onPlayerMove(e); verify(notifier).notify(any(), eq("commands.delay.moved-so-command-cancelled")); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandInfoCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandInfoCommandTest.java index 1a3c383c4..8e68866cc 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandInfoCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandInfoCommandTest.java @@ -17,33 +17,27 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import org.eclipse.jdt.annotation.NonNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; import world.bentobox.bentobox.util.Util; /** @@ -59,49 +53,29 @@ public class IslandInfoCommandTest extends RanksManagerBeforeClassTest { @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; + @Mock + private PlaceholdersManager phm; private Island island; private IslandInfoCommand iic; - @Mock - private Player player; - @Mock - private World world; - @Mock - private PlaceholdersManager phm; - @Mock - private @NonNull Location location; - @Mock - private IslandWorldManager iwm; - /** - */ @Before public void setUp() throws Exception { super.setUp(); - PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); - - // IWM - when(plugin.getIWM()).thenReturn(iwm); - - // Bukkit - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); // Command manager CommandsManager cm = mock(CommandsManager.class); when(plugin.getCommandsManager()).thenReturn(cm); // Player - when(player.isOp()).thenReturn(false); - UUID uuid = UUID.randomUUID(); + when(mockPlayer.isOp()).thenReturn(false); when(user.getUniqueId()).thenReturn(uuid); when(user.getName()).thenReturn("tastybento"); when(user.getWorld()).thenReturn(world); - when(user.getPlayer()).thenReturn(player); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.isPlayer()).thenReturn(true); //user = User.getInstance(player); // Set the User class plugin as this one @@ -163,6 +137,7 @@ public void testExecuteUserStringListOfStringTooManyArgs() { public void testExecuteUserStringListOfStringNoArgsConsole() { CommandSender console = mock(CommandSender.class); User sender = User.getInstance(console); + when(console.spigot()).thenReturn(spigot); assertFalse(iic.execute(sender, "", Collections.emptyList())); verify(user, never()).sendMessage("commands.help.header", "[label]", "commands.help.console"); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java index 0ba16a1fb..ca5c6a65f 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java @@ -18,12 +18,10 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitTask; -import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -34,11 +32,11 @@ 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 com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.AddonDescription; @@ -50,20 +48,20 @@ import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.BlueprintsManager; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.island.NewIsland; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, NewIsland.class, IslandsManager.class }) -public class IslandResetCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, NewIsland.class, IslandsManager.class, Util.class }) +public class IslandResetCommandTest extends AbstractCommonSetup { @Mock private CompositeCommand ic; @@ -72,37 +70,22 @@ public class IslandResetCommandTest { @Mock private Settings s; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; @Mock - private World world; - @Mock - private IslandWorldManager iwm; - @Mock private BlueprintsManager bpm; @Mock - private @Nullable Island island; - @Mock private PluginManager pim; private IslandResetCommand irc; - @Mock - private Player pp; - private UUID uuid; /** */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - + super.setUp(); PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); // Command manager CommandsManager cm = mock(CommandsManager.class); @@ -115,8 +98,10 @@ public void setUp() throws Exception { // Player Player p = mock(Player.class); when(p.getUniqueId()).thenReturn(uuid); - User.getInstance(p); + when(p.spigot()).thenReturn(spigot); when(p.isOnline()).thenReturn(true); + User.getInstance(p); + // User User.setPlugin(plugin); @@ -170,8 +155,8 @@ public void setUp() throws Exception { // Put a team on the island for (int j = 0; j < 11; j++) { UUID temp = UUID.randomUUID(); - when(pp.getUniqueId()).thenReturn(temp); - User.getInstance(pp); + when(mockPlayer.getUniqueId()).thenReturn(temp); + User.getInstance(mockPlayer); members.add(temp); } when(island.getMemberSet()).thenReturn(members.build()); @@ -266,7 +251,7 @@ public void testNoConfirmationRequired() throws Exception { verify(user).sendMessage("commands.island.create.creating-island"); verify(user, never()).sendMessage(eq("commands.island.reset.kicked-from-island"), eq(TextVariables.GAMEMODE), anyString()); // Only 11 because the leader should not see this - verify(pp, times(11)).sendMessage("commands.island.reset.kicked-from-island"); + checkSpigotMessage("commands.island.reset.kicked-from-island", 11); } @After diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java index 3a5e73426..47c87a3a1 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java @@ -5,10 +5,7 @@ import static org.junit.Assert.assertTrue; 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; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; @@ -19,7 +16,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitTask; @@ -31,11 +27,10 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.GameModeAddon; @@ -43,37 +38,26 @@ import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class}) -public class IslandSpawnCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class }) +public class IslandSpawnCommandTest extends AbstractCommonSetup { - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; @Mock private CompositeCommand ic; private IslandSpawnCommand isc; - @Mock - private IslandWorldManager iwm; private @Nullable User user; @Mock - private World world; - @Mock private @Nullable WorldSettings ws; private Map map; @Mock - private Player player; - @Mock private BukkitTask task; @Mock private PluginManager pim; @@ -84,22 +68,21 @@ public class IslandSpawnCommandTest { */ @Before public void setUp() throws Exception { - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); // Command manager CommandsManager cm = mock(CommandsManager.class); when(plugin.getCommandsManager()).thenReturn(cm); // Player - when(player.isOp()).thenReturn(false); + when(mockPlayer.isOp()).thenReturn(false); UUID uuid = UUID.randomUUID(); - when(player.getUniqueId()).thenReturn(uuid); - when(player.hasPermission(anyString())).thenReturn(true); - when(player.getWorld()).thenReturn(world); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + when(mockPlayer.hasPermission(anyString())).thenReturn(true); + when(mockPlayer.getWorld()).thenReturn(world); User.setPlugin(plugin); // Set up user already - user = User.getInstance(player); + user = User.getInstance(mockPlayer); // Addon GameModeAddon addon = mock(GameModeAddon.class); @@ -116,7 +99,6 @@ public void setUp() throws Exception { // Server & Scheduler BukkitScheduler sch = mock(BukkitScheduler.class); - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); when(Bukkit.getScheduler()).thenReturn(sch); when(sch.runTaskLater(any(), any(Runnable.class), any(Long.class))).thenReturn(task); @@ -187,11 +169,11 @@ public void testExecuteUserStringListOfString() { */ @Test public void testExecuteUserStringListOfStringInWorldNoTeleportFalling() { - when(player.getFallDistance()).thenReturn(10F); + when(mockPlayer.getFallDistance()).thenReturn(10F); map.put("PREVENT_TELEPORT_WHEN_FALLING", true); when(iwm.inWorld(any(World.class))).thenReturn(true); assertFalse(isc.execute(user, "spawn", Collections.emptyList())); - verify(player).sendMessage(eq("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint")); + checkSpigotMessage("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint"); } /** @@ -199,11 +181,11 @@ public void testExecuteUserStringListOfStringInWorldNoTeleportFalling() { */ @Test public void testExecuteUserStringListOfStringInWorldTeleportOkFalling() { - when(player.getFallDistance()).thenReturn(10F); + when(mockPlayer.getFallDistance()).thenReturn(10F); map.put("PREVENT_TELEPORT_WHEN_FALLING", false); when(iwm.inWorld(any(World.class))).thenReturn(true); assertTrue(isc.execute(user, "spawn", Collections.emptyList())); - verify(player, never()).sendMessage(eq("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint")); + checkSpigotMessage("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint", 0); } /** @@ -211,11 +193,11 @@ public void testExecuteUserStringListOfStringInWorldTeleportOkFalling() { */ @Test public void testExecuteUserStringListOfStringWrongWorldTeleportOkFalling() { - when(player.getFallDistance()).thenReturn(10F); + when(mockPlayer.getFallDistance()).thenReturn(10F); map.put("PREVENT_TELEPORT_WHEN_FALLING", true); when(iwm.inWorld(any(World.class))).thenReturn(false); assertTrue(isc.execute(user, "spawn", Collections.emptyList())); - verify(player, never()).sendMessage(eq("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint")); + checkSpigotMessage("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint", 0); } /** @@ -223,11 +205,11 @@ public void testExecuteUserStringListOfStringWrongWorldTeleportOkFalling() { */ @Test public void testExecuteUserStringListOfStringInWorldTeleportNotFalling() { - when(player.getFallDistance()).thenReturn(0F); + when(mockPlayer.getFallDistance()).thenReturn(0F); map.put("PREVENT_TELEPORT_WHEN_FALLING", true); when(iwm.inWorld(any(World.class))).thenReturn(true); assertTrue(isc.execute(user, "spawn", Collections.emptyList())); - verify(player, never()).sendMessage(eq("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint")); + checkSpigotMessage("protection.flags.PREVENT_TELEPORT_WHEN_FALLING.hint", 0); } } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java index c9451291a..4c66cbcce 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java @@ -21,8 +21,6 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.junit.Before; import org.junit.Test; @@ -34,40 +32,31 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandUnbanCommandTest extends RanksManagerBeforeClassTest { @Mock private CompositeCommand ic; - private UUID uuid; @Mock private User user; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; - @Mock - private Island island; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -81,13 +70,11 @@ public void setUp() throws Exception { Settings s = mock(Settings.class); when(plugin.getSettings()).thenReturn(s); - // Player - Player p = mock(Player.class); // User when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getDisplayName()).thenReturn("&Ctastybento"); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); @@ -97,8 +84,6 @@ public void setUp() throws Exception { // No island for player to begin with (set it later in the tests) when(im.hasIsland(any(), eq(uuid))).thenReturn(false); - // when(im.isOwner(any(), eq(uuid))).thenReturn(false); - when(plugin.getIslands()).thenReturn(im); // Has team when(im.inTeam(any(), eq(uuid))).thenReturn(true); @@ -116,12 +101,9 @@ public void setUp() throws Exception { when(im.getIsland(any(), any(UUID.class))).thenReturn(island); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(plugin.getIWM()).thenReturn(iwm); // Server and Plugin Manager for events - PluginManager pim = mock(PluginManager.class); when(Bukkit.getPluginManager()).thenReturn(pim); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommandTest.java index 8537a1f7e..c698ede32 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommandTest.java @@ -18,37 +18,31 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.plugin.PluginManager; -import org.eclipse.jdt.annotation.Nullable; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.TeamInvite.Type; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -56,33 +50,14 @@ public class IslandTeamCommandTest extends RanksManagerBeforeClassTest { private IslandTeamCommand tc; - private UUID uuid; - private UUID invitee; - @Mock - private IslandsManager im; - @Mock private User user; - @Mock - private World world; - - @Mock - private PluginManager pim; - - @Mock - private IslandWorldManager iwm; - - @Mock - private @Nullable Island island; - @Mock private GameModeAddon addon; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -97,13 +72,11 @@ public void setUp() throws Exception { when(ic.getAddon()).thenReturn(addon); // user - uuid = UUID.randomUUID(); invitee = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); when(user.getPermissionValue(eq("bskyblock.team.maxsize"), anyInt())).thenReturn(3); // island Manager - when(plugin.getIslands()).thenReturn(im); // is owner of island when(im.getPrimaryIsland(world, uuid)).thenReturn(island); when(im.getIsland(world, user)).thenReturn(island); @@ -122,12 +95,7 @@ public void setUp() throws Exception { // island when(im.getIsland(any(), eq(uuid))).thenReturn(island); - // Bukkit - PowerMockito.mockStatic(Bukkit.class); - when(Bukkit.getPluginManager()).thenReturn(pim); - // IWM - when(plugin.getIWM()).thenReturn(iwm); when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock."); // Command under test diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCoopCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCoopCommandTest.java index c09cb590b..b911cf2b4 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCoopCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCoopCommandTest.java @@ -29,10 +29,10 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; @@ -40,14 +40,14 @@ import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamCoopCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -62,8 +62,6 @@ public class IslandTeamCoopCommandTest extends RanksManagerBeforeClassTest { private UUID notUUID; @Mock private Settings s; - @Mock - private Island island; @Before public void setUp() throws Exception { @@ -76,7 +74,6 @@ public void setUp() throws Exception { when(plugin.getSettings()).thenReturn(s); // Player - Player p = mock(Player.class); // Sometimes use Mockito.withSettings().verboseLogging() when(user.isOp()).thenReturn(false); when(user.getPermissionValue(anyString(), anyInt())).thenReturn(4); @@ -87,7 +84,7 @@ public void setUp() throws Exception { notUUID = UUID.randomUUID(); } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getDisplayName()).thenReturn("&Ctastybento"); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); @@ -300,6 +297,7 @@ public void testExecuteSuccess() { when(p.getUniqueId()).thenReturn(notUUID); when(p.getName()).thenReturn("target"); when(p.getDisplayName()).thenReturn("&Ctarget"); + when(p.spigot()).thenReturn(spigot); User target = User.getInstance(p); // Can execute when(pm.getUUID(any())).thenReturn(notUUID); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteCommandTest.java index 6fb04804c..5ad3b61b9 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteCommandTest.java @@ -18,13 +18,10 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFactory; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; import org.eclipse.jdt.annotation.NonNull; import org.junit.Before; @@ -38,40 +35,32 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.TestWorldSettings; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.events.IslandBaseEvent; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.TeamInvite; import world.bentobox.bentobox.database.objects.TeamInvite.Type; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamInviteCommandTest extends RanksManagerBeforeClassTest { @Mock private IslandTeamCommand ic; @Mock - private IslandsManager im; - @Mock - private Island island; - @Mock - private PluginManager pim; - @Mock private PlayersManager pm; @Mock private Settings s; @@ -80,14 +69,9 @@ public class IslandTeamInviteCommandTest extends RanksManagerBeforeClassTest { @Mock private User user; - private UUID uuid; private UUID islandUUID; private IslandTeamInviteCommand itl; private UUID notUUID; - @Mock - private Player p; - @Mock - private @NonNull World world; @Before public void setUp() throws Exception { @@ -111,7 +95,7 @@ public void setUp() throws Exception { when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getDisplayName()).thenReturn("&Ctastbento"); when(user.isOnline()).thenReturn(true); @@ -120,13 +104,13 @@ public void setUp() throws Exception { when(User.getInstance(uuid)).thenReturn(user); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); // Vanished players - when(p.canSee(any())).thenReturn(true); + when(mockPlayer.canSee(any())).thenReturn(true); User.setPlugin(plugin); // Target notUUID = UUID.randomUUID(); when(target.getUniqueId()).thenReturn(notUUID); - when(target.getPlayer()).thenReturn(p); + when(target.getPlayer()).thenReturn(mockPlayer); when(target.isOnline()).thenReturn(true); when(target.getName()).thenReturn("target"); when(target.getDisplayName()).thenReturn("&Ctarget"); @@ -170,7 +154,6 @@ public void setUp() throws Exception { when(plugin.getLocalesManager()).thenReturn(lm); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); @NonNull WorldSettings ws = new TestWorldSettings(); @@ -246,7 +229,7 @@ public void testCanExecuteNoIsland() { public void testCanExecuteNoTarget() { assertFalse(itl.canExecute(user, itl.getLabel(), Collections.emptyList())); // Show panel - verify(p).openInventory(any(Inventory.class)); + verify(mockPlayer).openInventory(any(Inventory.class)); } /** @@ -264,7 +247,7 @@ public void testCanExecuteOfflinePlayer() { */ @Test public void testCanExecuteVanishedPlayer() { - when(p.canSee(any())).thenReturn(false); + when(mockPlayer.canSee(any())).thenReturn(false); assertFalse(itl.canExecute(user, itl.getLabel(), List.of("target"))); verify(user).sendMessage(eq("general.errors.offline-player")); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamKickCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamKickCommandTest.java index 92bbf2c63..bc5af89bb 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamKickCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamKickCommandTest.java @@ -20,7 +20,6 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; @@ -36,6 +35,7 @@ import com.google.common.collect.ImmutableSet.Builder; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.addons.AddonDescription; @@ -51,13 +51,13 @@ import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamKickCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -68,27 +68,15 @@ public class IslandTeamKickCommandTest extends RanksManagerBeforeClassTest { @Mock private Settings s; @Mock - private IslandsManager im; - @Mock private PlayersManager pm; private UUID notUUID; @Mock - private IslandWorldManager iwm; - @Mock - private Player player; - @Mock private Player target; @Mock private CompositeCommand subCommand; @Mock - private Island island; - @Mock private Addon addon; - @Mock - private World world; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -112,10 +100,11 @@ public void setUp() throws Exception { when(target.isOnline()).thenReturn(true); when(target.getName()).thenReturn("poslovitch"); when(target.getDisplayName()).thenReturn("&Cposlovich"); + when(target.spigot()).thenReturn(spigot); // Set the target user User.getInstance(target); when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(player); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getDisplayName()).thenReturn("&Ctastybento"); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamPromoteCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamPromoteCommandTest.java index 2dfb203b7..78163b4eb 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamPromoteCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamPromoteCommandTest.java @@ -17,9 +17,6 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.eclipse.jdt.annotation.Nullable; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,35 +29,29 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.TestWorldSettings; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamPromoteCommandTest extends RanksManagerBeforeClassTest { - @Mock - Player player; @Mock private IslandTeamCommand ic; @Mock User user; - @Mock - IslandsManager im; // DUT private IslandTeamPromoteCommand ipc; @@ -68,12 +59,6 @@ public class IslandTeamPromoteCommandTest extends RanksManagerBeforeClassTest { @Mock private PlayersManager pm; @Mock - private World world; - @Mock - private IslandWorldManager iwm; - @Mock - private @Nullable Island island; - @Mock private User target; @@ -99,7 +84,7 @@ public void setUp() throws Exception { UUID uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); when(user.getName()).thenReturn("tastybento"); - when(user.getPlayer()).thenReturn(player); + when(user.getPlayer()).thenReturn(mockPlayer); when(pm.getUser("target")).thenReturn(target); when(target.getName()).thenReturn("target"); when(target.getDisplayName()).thenReturn("Target"); @@ -138,8 +123,8 @@ public void setUp() throws Exception { // Bukkit PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - when(Bukkit.getOfflinePlayer(uuid)).thenReturn(player); - when(player.getName()).thenReturn("tastybento"); + when(Bukkit.getOfflinePlayer(uuid)).thenReturn(mockPlayer); + when(mockPlayer.getName()).thenReturn("tastybento"); ipc = new IslandTeamPromoteCommand(ic, "promote"); @@ -179,7 +164,7 @@ public void testSetup() { @Test public void testCanExecuteUserStringListOfStringShowHelp() { assertFalse(ipc.canExecute(user, "promote", List.of())); // Nothing - verify(user).sendMessage("commands.help.header", TextVariables.LABEL, null); + verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommandTest.java index 0738e01ef..1afe1cf90 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommandTest.java @@ -31,10 +31,10 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; @@ -42,14 +42,14 @@ import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamTrustCommandTest extends RanksManagerBeforeClassTest { @Mock @@ -64,10 +64,6 @@ public class IslandTeamTrustCommandTest extends RanksManagerBeforeClassTest { private UUID notUUID; @Mock private Settings s; - @Mock - private Island island; - @Mock - private Player targetPlayer; /** */ @@ -101,24 +97,24 @@ public void setUp() throws Exception { when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); User.setPlugin(plugin); // Target player - when(targetPlayer.getUniqueId()).thenReturn(notUUID); - when(targetPlayer.getName()).thenReturn("target"); - when(targetPlayer.getDisplayName()).thenReturn("&Cposlovich"); - User.getInstance(targetPlayer); + when(mockPlayer.getUniqueId()).thenReturn(notUUID); + when(mockPlayer.getName()).thenReturn("target"); + when(mockPlayer.getDisplayName()).thenReturn("&Cposlovich"); + User.getInstance(mockPlayer); // Parent command has no aliases when(ic.getSubCommandAliases()).thenReturn(new HashMap<>()); // Player has island to begin with - when(im.hasIsland(any(), Mockito.any(UUID.class))).thenReturn(true); - when(im.inTeam(any(), Mockito.any(UUID.class))).thenReturn(true); + when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); + when(im.inTeam(any(), any(UUID.class))).thenReturn(true); // when(im.isOwner(any(), any())).thenReturn(true); // when(im.getOwner(any(), any())).thenReturn(uuid); // Island when(island.getRank(any(User.class))).thenReturn(RanksManager.OWNER_RANK); when(island.getMemberSet(anyInt(), any(Boolean.class))).thenReturn(ImmutableSet.of(uuid)); - when(im.getIsland(any(), Mockito.any(User.class))).thenReturn(island); - when(im.getIsland(any(), Mockito.any(UUID.class))).thenReturn(island); + when(im.getIsland(any(), any(User.class))).thenReturn(island); + when(im.getIsland(any(), any(UUID.class))).thenReturn(island); when(plugin.getIslands()).thenReturn(im); // Has team @@ -157,7 +153,7 @@ public void testCanExecuteNoisland() { when(im.inTeam(any(), Mockito.any(UUID.class))).thenReturn(false); IslandTeamTrustCommand itl = new IslandTeamTrustCommand(ic); assertFalse(itl.canExecute(user, itl.getLabel(), Collections.singletonList("bill"))); - verify(user).sendMessage(eq("general.errors.no-island")); + verify(user).sendMessage("general.errors.no-island"); } /** @@ -207,7 +203,7 @@ public void testCanExecuteSamePlayer() { IslandTeamTrustCommand itl = new IslandTeamTrustCommand(ic); when(pm.getUUID(any())).thenReturn(uuid); assertFalse(itl.canExecute(user, itl.getLabel(), Collections.singletonList("tastybento"))); - verify(user).sendMessage(eq("commands.island.team.trust.trust-in-yourself")); + verify(user).sendMessage("commands.island.team.trust.trust-in-yourself"); } /** @@ -224,7 +220,7 @@ public void testCanExecutePlayerHasRank() { when(im.inTeam(any(), any())).thenReturn(true); // when(im.getMembers(any(), any())).thenReturn(Collections.singleton(notUUID)); assertFalse(itl.canExecute(user, itl.getLabel(), Collections.singletonList("bento"))); - verify(user).sendMessage(eq("commands.island.team.trust.player-already-trusted")); + verify(user).sendMessage("commands.island.team.trust.player-already-trusted"); } /** @@ -235,7 +231,7 @@ public void testCanExecuteCannottrustSelf() { when(pm.getUUID(any())).thenReturn(uuid); IslandTeamTrustCommand itl = new IslandTeamTrustCommand(ic); assertFalse(itl.canExecute(user, itl.getLabel(), Collections.singletonList("tastybento"))); - verify(user).sendMessage(eq("commands.island.team.trust.trust-in-yourself")); + verify(user).sendMessage("commands.island.team.trust.trust-in-yourself"); } /** @@ -249,7 +245,7 @@ public void testCanExecuteCannotAlreadyHasRank() { // when(im.getMembers(any(), any())).thenReturn(Collections.singleton(other)); IslandTeamTrustCommand itl = new IslandTeamTrustCommand(ic); assertFalse(itl.canExecute(user, itl.getLabel(), Collections.singletonList("tastybento"))); - verify(user).sendMessage(eq("commands.island.team.trust.player-already-trusted")); + verify(user).sendMessage("commands.island.team.trust.player-already-trusted"); } /** @@ -266,7 +262,7 @@ public void testExecuteNullIsland() { // Execute when(im.getIsland(any(), Mockito.any(UUID.class))).thenReturn(null); assertFalse(itl.execute(user, itl.getLabel(), Collections.singletonList("tastybento"))); - verify(user).sendMessage(eq("general.errors.general")); + verify(user).sendMessage("general.errors.general"); } /** @@ -284,7 +280,7 @@ public void testExecuteSuccessNoConfirmationTooMany() { // Execute when(im.getIsland(any(), Mockito.any(UUID.class))).thenReturn(island); assertFalse(itl.execute(user, itl.getLabel(), Collections.singletonList("target"))); - verify(user).sendMessage(eq("commands.island.team.trust.is-full")); + verify(user).sendMessage("commands.island.team.trust.is-full"); } /** @@ -293,7 +289,7 @@ public void testExecuteSuccessNoConfirmationTooMany() { */ @Test public void testExecuteSuccessNoConfirmation() { - User target = User.getInstance(targetPlayer); + User target = User.getInstance(mockPlayer); // Can execute when(pm.getUUID(any())).thenReturn(notUUID); // when(im.getMembers(any(), any())).thenReturn(Collections.emptySet()); @@ -308,7 +304,7 @@ public void testExecuteSuccessNoConfirmation() { verify(user).sendMessage("commands.island.team.trust.success", TextVariables.NAME, "target", TextVariables.DISPLAY_NAME, "&Cposlovich"); verify(island).setRank(target, RanksManager.TRUSTED_RANK); - verify(targetPlayer).sendMessage("commands.island.team.trust.you-are-trusted"); + checkSpigotMessage("commands.island.team.trust.you-are-trusted"); } /** @@ -317,7 +313,7 @@ public void testExecuteSuccessNoConfirmation() { @Test public void testExecuteSuccessConfirmation() { when(s.isInviteConfirmation()).thenReturn(true); - User target = User.getInstance(targetPlayer); + User target = User.getInstance(mockPlayer); // Can execute when(pm.getUUID(any())).thenReturn(notUUID); //when(im.getMembers(any(), any())).thenReturn(Collections.emptySet()); @@ -330,8 +326,8 @@ public void testExecuteSuccessConfirmation() { assertTrue(itl.execute(user, itl.getLabel(), Collections.singletonList("target"))); verify(user).sendMessage("commands.island.team.invite.invitation-sent", TextVariables.NAME, "target", TextVariables.DISPLAY_NAME, "&Cposlovich"); // Send message to online player - verify(targetPlayer).sendMessage(eq("commands.island.team.trust.name-has-invited-you")); - verify(targetPlayer).sendMessage(eq("commands.island.team.invite.to-accept-or-reject")); + checkSpigotMessage("commands.island.team.trust.name-has-invited-you"); + checkSpigotMessage("commands.island.team.invite.to-accept-or-reject"); verify(island, never()).setRank(target, RanksManager.TRUSTED_RANK); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUncoopCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUncoopCommandTest.java index dd57146c7..8031c546d 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUncoopCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUncoopCommandTest.java @@ -21,7 +21,6 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitScheduler; import org.junit.Before; import org.junit.Test; @@ -34,39 +33,34 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamUncoopCommandTest extends RanksManagerBeforeClassTest { + @Mock private CompositeCommand ic; - private UUID uuid; + @Mock private User user; - private IslandsManager im; private PlayersManager pm; private UUID notUUID; @Mock private Settings s; - private Island island; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -79,9 +73,6 @@ public void setUp() throws Exception { when(plugin.getSettings()).thenReturn(s); // Player - Player p = mock(Player.class); - // Sometimes use withSettings().verboseLogging() - user = mock(User.class); when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); notUUID = UUID.randomUUID(); @@ -89,27 +80,21 @@ public void setUp() throws Exception { notUUID = UUID.randomUUID(); } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); User.setPlugin(plugin); // Parent command has no aliases - ic = mock(CompositeCommand.class); when(ic.getSubCommandAliases()).thenReturn(new HashMap<>()); // Player has island to begin with - im = mock(IslandsManager.class); when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); when(im.inTeam(any(), any(UUID.class))).thenReturn(true); - // when(im.isOwner(any(), any())).thenReturn(true); - // when(im.getOwner(any(), any())).thenReturn(uuid); - island = mock(Island.class); when(island.getRank(any(User.class))).thenReturn(RanksManager.OWNER_RANK); when(im.getIsland(any(), any(User.class))).thenReturn(island); when(im.getIsland(any(), any(UUID.class))).thenReturn(island); when(im.getPrimaryIsland(any(), any())).thenReturn(island); - when(plugin.getIslands()).thenReturn(im); // Has team when(im.inTeam(any(), eq(uuid))).thenReturn(true); @@ -129,7 +114,6 @@ public void setUp() throws Exception { when(plugin.getLocalesManager()).thenReturn(lm); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); when(plugin.getIWM()).thenReturn(iwm); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUntrustCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUntrustCommandTest.java index 2955222e1..cfa8bacbf 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUntrustCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamUntrustCommandTest.java @@ -20,7 +20,6 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitScheduler; import org.junit.Before; import org.junit.Test; @@ -33,39 +32,35 @@ import com.google.common.collect.ImmutableSet; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) public class IslandTeamUntrustCommandTest extends RanksManagerBeforeClassTest { + @Mock private CompositeCommand ic; - private UUID uuid; + @Mock private User user; - private IslandsManager im; + @Mock private PlayersManager pm; private UUID notUUID; @Mock private Settings s; - private Island island; - /** - */ @Before public void setUp() throws Exception { super.setUp(); @@ -78,17 +73,11 @@ public void setUp() throws Exception { when(plugin.getSettings()).thenReturn(s); // Player - Player p = mock(Player.class); - // Sometimes use Mockito.withSettings().verboseLogging() - user = mock(User.class); when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); notUUID = UUID.randomUUID(); - while (notUUID.equals(uuid)) { - notUUID = UUID.randomUUID(); - } when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); + when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); when(user.getDisplayName()).thenReturn("&Ctastybento"); when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class)); @@ -99,17 +88,12 @@ public void setUp() throws Exception { when(ic.getSubCommandAliases()).thenReturn(new HashMap<>()); // Player has island to begin with - im = mock(IslandsManager.class); when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); when(im.inTeam(any(), any(UUID.class))).thenReturn(true); - // when(im.isOwner(any(), any())).thenReturn(true); - // when(im.getOwner(any(), any())).thenReturn(uuid); - island = mock(Island.class); when(island.getRank(any(User.class))).thenReturn(RanksManager.OWNER_RANK); when(im.getIsland(any(), any(User.class))).thenReturn(island); when(im.getIsland(any(), any(UUID.class))).thenReturn(island); when(im.getPrimaryIsland(any(), any())).thenReturn(island); - when(plugin.getIslands()).thenReturn(im); // Has team when(im.inTeam(any(), eq(uuid))).thenReturn(true); @@ -129,7 +113,6 @@ public void setUp() throws Exception { when(plugin.getLocalesManager()).thenReturn(lm); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); when(plugin.getIWM()).thenReturn(iwm); @@ -144,7 +127,7 @@ public void testExecuteNoisland() { when(im.inTeam(any(), any(UUID.class))).thenReturn(false); IslandTeamUntrustCommand itl = new IslandTeamUntrustCommand(ic); assertFalse(itl.execute(user, itl.getLabel(), Collections.singletonList("bill"))); - verify(user).sendMessage(eq("general.errors.no-island")); + verify(user).sendMessage("general.errors.no-island"); } /** @@ -194,7 +177,7 @@ public void testExecuteSamePlayer() { IslandTeamUntrustCommand itl = new IslandTeamUntrustCommand(ic); when(pm.getUUID(any())).thenReturn(uuid); assertFalse(itl.execute(user, itl.getLabel(), Collections.singletonList("tastybento"))); - verify(user).sendMessage(eq("commands.island.team.untrust.cannot-untrust-yourself")); + verify(user).sendMessage("commands.island.team.untrust.cannot-untrust-yourself"); } /** @@ -212,7 +195,7 @@ public void testExecutePlayerHasRank() { when(island.getMemberSet()).thenReturn(ImmutableSet.of(notUUID)); when(island.inTeam(notUUID)).thenReturn(true); assertFalse(itl.execute(user, itl.getLabel(), Collections.singletonList("bento"))); - verify(user).sendMessage(eq("commands.island.team.untrust.cannot-untrust-member")); + verify(user).sendMessage("commands.island.team.untrust.cannot-untrust-member"); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/user/UserTest.java b/src/test/java/world/bentobox/bentobox/api/user/UserTest.java index ca6775329..2cc6fe8c3 100644 --- a/src/test/java/world/bentobox/bentobox/api/user/UserTest.java +++ b/src/test/java/world/bentobox/bentobox/api/user/UserTest.java @@ -33,12 +33,10 @@ import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFactory; import org.bukkit.inventory.PlayerInventory; import org.bukkit.permissions.PermissionAttachment; import org.bukkit.permissions.PermissionAttachmentInfo; -import org.bukkit.plugin.PluginManager; import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -49,11 +47,10 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.Addon; @@ -62,36 +59,28 @@ import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.metadata.MetaDataValue; import world.bentobox.bentobox.database.objects.Players; -import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ BentoBox.class, Bukkit.class }) -public class UserTest { +@PrepareForTest({ BentoBox.class, Bukkit.class, Util.class }) +public class UserTest extends AbstractCommonSetup { private static final String TEST_TRANSLATION = "mock &a translation &b [test]"; private static final String TEST_TRANSLATION_WITH_COLOR = "mock §atranslation §b[test]"; @Mock - private Player player; - @Mock - private BentoBox plugin; - @Mock private LocalesManager lm; private User user; - @Mock - private IslandWorldManager iwm; private UUID uuid; @Mock - private PluginManager pim; - @Mock private CommandSender sender; @Mock private Server server; @@ -101,28 +90,26 @@ public class UserTest { @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); - User.setPlugin(plugin); + super.setUp(); uuid = UUID.randomUUID(); - when(player.getUniqueId()).thenReturn(uuid); + when(mockPlayer.getUniqueId()).thenReturn(uuid); ItemFactory itemFactory = mock(ItemFactory.class); - when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player); + when(Bukkit.getPlayer(any(UUID.class))).thenReturn(mockPlayer); when(Bukkit.getPluginManager()).thenReturn(pim); when(Bukkit.getItemFactory()).thenReturn(itemFactory); when(Bukkit.getServer()).thenReturn(server); // Player - when(player.getServer()).thenReturn(server); + when(mockPlayer.getServer()).thenReturn(server); when(server.getOnlinePlayers()).thenReturn(Collections.emptySet()); + when(sender.spigot()).thenReturn(spigot); @NonNull World world = mock(World.class); when(world.getName()).thenReturn("BSkyBlock"); - when(player.getWorld()).thenReturn(world); + when(mockPlayer.getWorld()).thenReturn(world); // IWM when(plugin.getIWM()).thenReturn(iwm); @@ -130,7 +117,7 @@ public void setUp() throws Exception { when(iwm.getAddon(any())).thenReturn(Optional.empty()); when(iwm.getFriendlyName(world)).thenReturn("BSkyBlock-Fiendly"); - user = User.getInstance(player); + user = User.getInstance(mockPlayer); // Locales when(plugin.getLocalesManager()).thenReturn(lm); @@ -164,7 +151,7 @@ public void testGetInstanceCommandSender() { @Test public void testGetInstancePlayer() { - assertEquals(player,user.getPlayer()); + assertEquals(mockPlayer, user.getPlayer()); } @Test @@ -179,7 +166,7 @@ public void testGetInstanceUUID() { public void testRemovePlayer() { assertNotNull(User.getInstance(uuid)); assertEquals(user, User.getInstance(uuid)); - User.removePlayer(player); + User.removePlayer(mockPlayer); // If the player has been removed from the cache, then code will ask server for player // Return null and check if instance is null will show that the player is not in the cache when(Bukkit.getPlayer(any(UUID.class))).thenReturn(null); @@ -190,7 +177,7 @@ public void testSetPlugin() { BentoBox plugin = mock(BentoBox.class); User.setPlugin(plugin); user.addPerm("testing123"); - verify(player).addAttachment(eq(plugin), eq("testing123"), eq(true)); + verify(mockPlayer).addAttachment(eq(plugin), eq("testing123"), eq(true)); } @Test @@ -206,9 +193,9 @@ public void testGetEffectivePermissions() { @Test public void testGetInventory() { PlayerInventory value = mock(PlayerInventory.class); - when(player.getInventory()).thenReturn(value); - assertEquals(value, player.getInventory()); - User user = User.getInstance(player); + when(mockPlayer.getInventory()).thenReturn(value); + assertEquals(value, mockPlayer.getInventory()); + User user = User.getInstance(mockPlayer); assertNotNull(user.getInventory()); assertEquals(value, user.getInventory()); } @@ -216,8 +203,8 @@ public void testGetInventory() { @Test public void testGetLocation() { Location loc = mock(Location.class); - when(player.getLocation()).thenReturn(loc); - User user = User.getInstance(player); + when(mockPlayer.getLocation()).thenReturn(loc); + User user = User.getInstance(mockPlayer); assertNotNull(user.getLocation()); assertEquals(loc, user.getLocation()); } @@ -225,8 +212,8 @@ public void testGetLocation() { @Test public void testGetName() { String name = "tastybento"; - when(player.getName()).thenReturn(name); - User user = User.getInstance(player); + when(mockPlayer.getName()).thenReturn(name); + User user = User.getInstance(mockPlayer); assertNotNull(user.getName()); assertEquals(name, user.getName()); @@ -234,15 +221,15 @@ public void testGetName() { @Test public void testGetPlayer() { - User user = User.getInstance(player); - assertEquals(player, user.getPlayer()); + User user = User.getInstance(mockPlayer); + assertEquals(mockPlayer, user.getPlayer()); } @Test public void testIsPlayer() { User user = User.getInstance(sender); assertFalse(user.isPlayer()); - user = User.getInstance(player); + user = User.getInstance(mockPlayer); assertTrue(user.isPlayer()); } @@ -255,8 +242,8 @@ public void testGetSender() { @Test public void testGetUniqueId() { UUID uuid = UUID.randomUUID(); - when(player.getUniqueId()).thenReturn(uuid); - user = User.getInstance(player); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + user = User.getInstance(mockPlayer); assertEquals(uuid, user.getUniqueId()); } @@ -267,7 +254,7 @@ public void testHasPermission() { assertTrue(user.hasPermission(null)); // test if player has the permission - when(player.hasPermission(anyString())).thenReturn(true); + when(mockPlayer.hasPermission(anyString())).thenReturn(true); assertTrue(user.hasPermission("perm")); } @@ -283,13 +270,13 @@ public void testHasNotPermissionButIsOp() { @Test public void testIsOnline() { - when(player.isOnline()).thenReturn(true); + when(mockPlayer.isOnline()).thenReturn(true); assertTrue(user.isOnline()); } @Test public void testIsOp() { - when(player.isOp()).thenReturn(true); + when(mockPlayer.isOp()).thenReturn(true); assertTrue(user.isOp()); } @@ -325,7 +312,7 @@ public void testGetTranslationOrNothing() { when(lm.get(any(), any())).thenReturn("fake.reference"); when(lm.get(any())).thenReturn("fake.reference"); - User user = User.getInstance(player); + User user = User.getInstance(mockPlayer); assertEquals("", user.getTranslationOrNothing("fake.reference")); assertEquals("", user.getTranslationOrNothing("fake.reference", "[test]", "variable")); } @@ -333,7 +320,7 @@ public void testGetTranslationOrNothing() { @Test public void testSendMessage() { user.sendMessage("a.reference"); - verify(player).sendMessage(TEST_TRANSLATION_WITH_COLOR); + checkSpigotMessage(TEST_TRANSLATION_WITH_COLOR); } @Test @@ -347,8 +334,8 @@ public void testSendMessageOverrideWithAddon() { when(iwm .getAddon(any())).thenReturn(optionalAddon); when(lm.get(any(), eq("name.a.reference"))).thenReturn("mockmockmock"); user.sendMessage("a.reference"); - verify(player, never()).sendMessage(eq(TEST_TRANSLATION)); - verify(player).sendMessage(eq("mockmockmock")); + verify(mockPlayer, never()).sendMessage(eq(TEST_TRANSLATION)); + checkSpigotMessage("mockmockmock"); } @Test @@ -356,7 +343,7 @@ public void testSendMessageBlankTranslation() { // Nothing - blank translation when(lm.get(any(), any())).thenReturn(""); user.sendMessage("a.reference"); - verify(player, never()).sendMessage(anyString()); + checkSpigotMessage("a.reference", 0); } @Test @@ -368,21 +355,21 @@ public void testSendMessageOnlyColors() { } when(lm.get(any(), any())).thenReturn(allColors.toString()); user.sendMessage("a.reference"); - verify(player, never()).sendMessage(anyString()); + verify(mockPlayer, never()).sendMessage(anyString()); } @Test public void testSendMessageColorsAndSpaces() { when(lm.get(any(), any())).thenReturn(ChatColor.COLOR_CHAR + "6 Hello there"); user.sendMessage("a.reference"); - verify(player).sendMessage(eq(ChatColor.COLOR_CHAR + "6Hello there")); + checkSpigotMessage(ChatColor.COLOR_CHAR + "6Hello there"); } @Test public void testSendRawMessage() { String raw = ChatColor.RED + "" + ChatColor.BOLD + "test message"; user.sendRawMessage(raw); - verify(player).sendMessage(raw); + checkSpigotMessage(raw); } @Test @@ -390,7 +377,7 @@ public void testSendRawMessageNullUser() { String raw = ChatColor.RED + "" + ChatColor.BOLD + "test message"; user = User.getInstance((CommandSender)null); user.sendRawMessage(raw); - verify(player, never()).sendMessage(anyString()); + checkSpigotMessage(raw, 0); } @Test @@ -414,29 +401,29 @@ public void testSetGameMode() { for (GameMode gm: GameMode.values()) { user.setGameMode(gm); } - verify(player, times(GameMode.values().length)).setGameMode(any()); + verify(mockPlayer, times(GameMode.values().length)).setGameMode(any()); } @Test public void testTeleport() { - when(player.teleport(any(Location.class))).thenReturn(true); + when(mockPlayer.teleport(any(Location.class))).thenReturn(true); Location loc = mock(Location.class); user.teleport(loc); - verify(player).teleport(loc); + verify(mockPlayer).teleport(loc); } @Test public void testGetWorld() { World world = mock(World.class); - when(player.getWorld()).thenReturn(world); - User user = User.getInstance(player); + when(mockPlayer.getWorld()).thenReturn(world); + User user = User.getInstance(mockPlayer); assertEquals(world, user.getWorld()); } @Test public void testCloseInventory() { user.closeInventory(); - verify(player).closeInventory(); + verify(mockPlayer).closeInventory(); } @Test @@ -468,13 +455,13 @@ public void testGetLocaleConsole() { @Test public void testUpdateInventory() { user.updateInventory(); - verify(player).updateInventory(); + verify(mockPlayer).updateInventory(); } @Test public void testPerformCommand() { user.performCommand("test"); - verify(player).performCommand("test"); + verify(mockPlayer).performCommand("test"); } @Test @@ -520,8 +507,8 @@ public void testGetPermissionValue() { permSet.add(pai); permSet.add(pai2); permSet.add(pai3); - when(player.getEffectivePermissions()).thenReturn(permSet); - User u = User.getInstance(player); + when(mockPlayer.getEffectivePermissions()).thenReturn(permSet); + User u = User.getInstance(mockPlayer); assertEquals(33, u.getPermissionValue("bskyblock.max", 2)); } @@ -544,8 +531,8 @@ public void testGetPermissionValueNegativePerm() { permSet.add(pai); permSet.add(pai2); permSet.add(pai3); - when(player.getEffectivePermissions()).thenReturn(permSet); - User u = User.getInstance(player); + when(mockPlayer.getEffectivePermissions()).thenReturn(permSet); + User u = User.getInstance(mockPlayer); assertEquals(7, u.getPermissionValue("bskyblock.max", 2)); } @@ -579,8 +566,8 @@ public void testGetPermissionValueNegative() { permSet.add(pai); permSet.add(pai2); permSet.add(pai3); - when(player.getEffectivePermissions()).thenReturn(permSet); - User u = User.getInstance(player); + when(mockPlayer.getEffectivePermissions()).thenReturn(permSet); + User u = User.getInstance(mockPlayer); assertEquals(-1, u.getPermissionValue("bskyblock.max", 2)); } @@ -600,8 +587,8 @@ public void testGetPermissionValueStar() { permSet.add(pai); permSet.add(pai2); permSet.add(pai3); - when(player.getEffectivePermissions()).thenReturn(permSet); - User u = User.getInstance(player); + when(mockPlayer.getEffectivePermissions()).thenReturn(permSet); + User u = User.getInstance(mockPlayer); assertEquals(22, u.getPermissionValue("bskyblock.max", 22)); } @@ -614,14 +601,14 @@ public void testGetPermissionValueSmall() { PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class); when(pai.getPermission()).thenReturn("bskyblock.max.3"); when(pai.getValue()).thenReturn(true); - when(player.getEffectivePermissions()).thenReturn(Collections.singleton(pai)); - User u = User.getInstance(player); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.singleton(pai)); + User u = User.getInstance(mockPlayer); assertEquals(3, u.getPermissionValue("bskyblock.max", 22)); } @Test public void testMetaData() { - User u = User.getInstance(player); + User u = User.getInstance(mockPlayer); assertTrue(u.getMetaData().get().isEmpty()); // Store a string in a new key assertFalse(u.putMetaData("string", new MetaDataValue("a string")).isPresent()); @@ -686,7 +673,7 @@ public void testIsOfflinePlayer() { User s = User.getInstance(sender); assertFalse(s.isOfflinePlayer()); User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); assertTrue(p.isOfflinePlayer()); } @@ -696,9 +683,9 @@ public void testIsOfflinePlayer() { @Test public void testAddPerm() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); p.addPerm("test.perm"); - verify(player).addAttachment(plugin, "test.perm", true); + verify(mockPlayer).addAttachment(plugin, "test.perm", true); } /** @@ -708,19 +695,19 @@ public void testAddPerm() { public void testRemovePerm() { User.clearUsers(); // No perms to start - when(player.getEffectivePermissions()).thenReturn(Collections.emptySet()); - when(player.hasPermission(anyString())).thenReturn(false); - User p = User.getInstance(player); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.emptySet()); + when(mockPlayer.hasPermission(anyString())).thenReturn(false); + User p = User.getInstance(mockPlayer); assertTrue(p.removePerm("test.perm")); - verify(player).recalculatePermissions(); + verify(mockPlayer).recalculatePermissions(); // Has the perm PermissionAttachmentInfo pi = mock(PermissionAttachmentInfo.class); when(pi.getPermission()).thenReturn("test.perm"); PermissionAttachment attachment = mock(PermissionAttachment.class); when(pi.getAttachment()).thenReturn(attachment); - when(player.getEffectivePermissions()).thenReturn(Set.of(pi)); + when(mockPlayer.getEffectivePermissions()).thenReturn(Set.of(pi)); assertTrue(p.removePerm("test.perm")); - verify(player).removeAttachment(attachment); + verify(mockPlayer).removeAttachment(attachment); } @@ -731,7 +718,7 @@ public void testRemovePerm() { @Test public void testGetTranslationWorldStringStringArray() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); // No addon World world = mock(World.class); assertEquals("mock §atranslation §btastybento", p.getTranslation(world, "test.ref", "[test]", "tastybento")); @@ -743,7 +730,7 @@ public void testGetTranslationWorldStringStringArray() { @Test public void testGetTranslationWorldStringStringArrayWwithAddon() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); World world = mock(World.class); GameModeAddon gameAddon = mock(GameModeAddon.class); @@ -759,7 +746,7 @@ public void testGetTranslationWorldStringStringArrayWwithAddon() { @Test public void testGetTranslationStringStringArray() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); assertEquals("mock §atranslation §btastybento", p.getTranslation("test.ref", "[test]", "tastybento")); } @@ -771,7 +758,7 @@ public void testNotifyStringStringArray() { Notifier notifier = mock(Notifier.class); when(plugin.getNotifier()).thenReturn(notifier); User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); p.notify(TEST_TRANSLATION, "[test]", "tastybento"); verify(notifier).notify(any(User.class), eq("mock §atranslation §btastybento")); @@ -785,7 +772,7 @@ public void testNotifyWorldStringStringArray() { Notifier notifier = mock(Notifier.class); when(plugin.getNotifier()).thenReturn(notifier); User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); World world = mock(World.class); GameModeAddon gameAddon = mock(GameModeAddon.class); @@ -820,7 +807,7 @@ public void testGetLocale() { when(plugin.getSettings()).thenReturn(settings); when(pm.getLocale(uuid)).thenReturn("fr-FR"); User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); assertEquals(Locale.FRANCE, p.getLocale()); } @@ -830,8 +817,8 @@ public void testGetLocale() { @Test public void testInWorld() { User.clearUsers(); - User p = User.getInstance(player); - when(player.getLocation()).thenReturn(mock(Location.class)); + User p = User.getInstance(mockPlayer); + when(mockPlayer.getLocation()).thenReturn(mock(Location.class)); when(iwm.inWorld(any(Location.class))).thenReturn(false); assertFalse(p.inWorld()); when(iwm.inWorld(any(Location.class))).thenReturn(true); @@ -844,7 +831,7 @@ public void testInWorld() { @Test public void testSpawnParticleParticleObjectDoubleDoubleDoubleError() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); try { p.spawnParticle(Particle.DUST, 4, 0.0d, 0.0d, 0.0d); } catch (Exception e) { @@ -860,13 +847,13 @@ public void testSpawnParticleParticleObjectDoubleDoubleDoubleError() { public void testSpawnParticleParticleObjectDoubleDoubleDouble() { User.clearUsers(); Location loc = mock(Location.class); - when(player.getLocation()).thenReturn(loc); + when(mockPlayer.getLocation()).thenReturn(loc); when(loc.toVector()).thenReturn(new Vector(1,1,1)); when(server.getViewDistance()).thenReturn(16); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); p.spawnParticle(Particle.SHRIEK, 4, 0.0d, 0.0d, 0.0d); - verify(player).spawnParticle(Particle.SHRIEK, 0.0d, 0.0d, 0.0d, 1, 4); + verify(mockPlayer).spawnParticle(Particle.SHRIEK, 0.0d, 0.0d, 0.0d, 1, 4); } @@ -877,14 +864,14 @@ public void testSpawnParticleParticleObjectDoubleDoubleDouble() { public void testSpawnParticleParticleObjectDoubleDoubleDoubleRedstone() { User.clearUsers(); Location loc = mock(Location.class); - when(player.getLocation()).thenReturn(loc); + when(mockPlayer.getLocation()).thenReturn(loc); when(loc.toVector()).thenReturn(new Vector(1,1,1)); when(server.getViewDistance()).thenReturn(16); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); DustOptions dust = mock(DustOptions.class); p.spawnParticle(Particle.DUST, dust, 0.0d, 0.0d, 0.0d); - verify(player).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); + verify(mockPlayer).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); } @@ -895,14 +882,14 @@ public void testSpawnParticleParticleObjectDoubleDoubleDoubleRedstone() { public void testSpawnParticleParticleDustOptionsDoubleDoubleDouble() { User.clearUsers(); Location loc = mock(Location.class); - when(player.getLocation()).thenReturn(loc); + when(mockPlayer.getLocation()).thenReturn(loc); when(loc.toVector()).thenReturn(new Vector(1,1,1)); when(server.getViewDistance()).thenReturn(16); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); DustOptions dust = mock(DustOptions.class); p.spawnParticle(Particle.DUST, dust, 0.0d, 0.0d, 0.0d); - verify(player).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); + verify(mockPlayer).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); } @@ -913,14 +900,14 @@ public void testSpawnParticleParticleDustOptionsDoubleDoubleDouble() { public void testSpawnParticleParticleDustOptionsIntIntInt() { User.clearUsers(); Location loc = mock(Location.class); - when(player.getLocation()).thenReturn(loc); + when(mockPlayer.getLocation()).thenReturn(loc); when(loc.toVector()).thenReturn(new Vector(1,1,1)); when(server.getViewDistance()).thenReturn(16); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); DustOptions dust = mock(DustOptions.class); p.spawnParticle(Particle.DUST, dust, 0, 0, 0); - verify(player).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); + verify(mockPlayer).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); } @@ -930,7 +917,7 @@ public void testSpawnParticleParticleDustOptionsIntIntInt() { @Test public void testSetAddon() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); Addon addon = mock(Addon.class); when(addon.getDescription()).thenReturn(new Builder("main", "gameAddon", "1.0").build()); p.setAddon(addon); @@ -944,7 +931,7 @@ public void testSetAddon() { @Test public void testGetMetaData() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); when(pm.getPlayer(uuid)).thenReturn(players); assertEquals(Optional.of(new HashMap<>()), p.getMetaData()); } @@ -955,7 +942,7 @@ public void testGetMetaData() { @Test public void testSetMetaData() { User.clearUsers(); - User p = User.getInstance(player); + User p = User.getInstance(mockPlayer); when(pm.getPlayer(uuid)).thenReturn(players); Map metaData = new HashMap<>(); p.setMetaData(metaData); diff --git a/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java b/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java index 0604f1af8..338a6ea5d 100644 --- a/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java @@ -7,7 +7,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -21,7 +20,6 @@ import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; -import org.bukkit.plugin.PluginManager; import org.eclipse.jdt.annotation.NonNull; import org.junit.After; import org.junit.Before; @@ -30,29 +28,26 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ @RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, User.class }) -public class BentoBoxPermsCommandTest { +@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class }) +public class BentoBoxPermsCommandTest extends AbstractCommonSetup { - @Mock - private BentoBox plugin; @Mock private CompositeCommand ac; @Mock @@ -64,8 +59,6 @@ public class BentoBoxPermsCommandTest { @Mock private PlaceholdersManager phm; @Mock - private PluginManager pim; - @Mock private Permission perm; private PermissionDefault defaultPerm = PermissionDefault.OP; @@ -74,8 +67,7 @@ public class BentoBoxPermsCommandTest { */ @Before public void setUp() throws Exception { - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); // Command manager CommandsManager cm = mock(CommandsManager.class); @@ -101,10 +93,8 @@ public void setUp() throws Exception { User.setPlugin(plugin); // Bukkit - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); when(perm.getDefault()).thenReturn(defaultPerm); when(pim.getPermission(anyString())).thenReturn(perm); - when(Bukkit.getPluginManager()).thenReturn(pim); // Placeholders when(phm.replacePlaceholders(any(), anyString())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); @@ -112,11 +102,6 @@ public void setUp() throws Exception { // BentoBox when(plugin.getLocalesManager()).thenReturn(lm); when(plugin.getPlaceholdersManager()).thenReturn(phm); - IslandWorldManager iwm = mock(IslandWorldManager.class); - when(plugin.getIWM()).thenReturn(iwm); - - // Commands for perms - cmd = new BentoBoxPermsCommand(ac); } @@ -172,9 +157,10 @@ public void testExecuteUserStringListOfString() { public void testExecuteUserStringListOfStringConsole() { String[] args = new String[1]; args[0] = ""; - CommandSender p = mock(CommandSender.class); - assertTrue(cmd.execute(p, "perms", args)); - verify(p, never()).sendMessage("general.errors.use-in-console"); + CommandSender console = mock(CommandSender.class); + when(console.spigot()).thenReturn(spigot); + assertTrue(cmd.execute(console, "perms", args)); + checkSpigotMessage("general.errors.use-in-console", 0); } /** @@ -185,8 +171,7 @@ public void testExecuteUserStringListOfStringIsPlayer() { when(user.isPlayer()).thenReturn(true); String[] args = new String[1]; args[0] = ""; - Player p = mock(Player.class); - assertFalse(cmd.execute(p, "perms", args)); - verify(p).sendMessage("general.errors.use-in-console"); + assertFalse(cmd.execute(mockPlayer, "perms", args)); + checkSpigotMessage("general.errors.use-in-console"); } } diff --git a/src/test/java/world/bentobox/bentobox/hooks/ItemsAdderHookTest.java b/src/test/java/world/bentobox/bentobox/hooks/ItemsAdderHookTest.java index d00b4ec03..f591f6793 100644 --- a/src/test/java/world/bentobox/bentobox/hooks/ItemsAdderHookTest.java +++ b/src/test/java/world/bentobox/bentobox/hooks/ItemsAdderHookTest.java @@ -41,13 +41,13 @@ import org.powermock.reflect.Whitebox; import dev.lone.itemsadder.api.CustomBlock; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.Notifier; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.Players; import world.bentobox.bentobox.hooks.ItemsAdderHook.BlockInteractListener; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.managers.FlagsManager; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; diff --git a/src/test/java/world/bentobox/bentobox/listeners/DeathListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/DeathListenerTest.java index 3ab2469f8..89176b84d 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/DeathListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/DeathListenerTest.java @@ -22,10 +22,10 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java index 431de3936..6ac0e9044 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java @@ -21,8 +21,6 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -30,9 +28,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.PlayerInventory; import org.bukkit.permissions.PermissionAttachmentInfo; -import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; @@ -41,19 +37,17 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.Players; import world.bentobox.bentobox.managers.AddonsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; @@ -67,34 +61,24 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({ BentoBox.class, Util.class, Bukkit.class, IslandsManager.class }) -public class JoinLeaveListenerTest { +public class JoinLeaveListenerTest extends RanksManagerBeforeClassTest { private static final String[] NAMES = { "adam", "ben", "cara", "dave", "ed", "frank", "freddy", "george", "harry", "ian", "joe" }; - @Mock - private BentoBox plugin; @Mock private PlayersManager pm; @Mock - private Player player; - @Mock private Player coopPlayer; - @Mock - private World world; private JoinLeaveListener jll; @Mock private Players pls; @Mock - private IslandWorldManager iwm; - @Mock private Inventory chest; @Mock private Settings settings; @Mock - private IslandsManager im; - @Mock private BukkitScheduler scheduler; @Mock private PlayerInventory inv; @@ -103,10 +87,6 @@ public class JoinLeaveListenerTest { private @Nullable Island island; @Mock private GameModeAddon gameMode; - @Mock - private PluginManager pim; - @Mock - private @NonNull Location location; @Mock private AddonsManager am; @@ -115,10 +95,7 @@ public class JoinLeaveListenerTest { */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); - - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); // World when(world.getName()).thenReturn("worldname"); @@ -138,12 +115,12 @@ public void setUp() throws Exception { UUID uuid = UUID.randomUUID(); // Player - when(player.getUniqueId()).thenReturn(uuid); - when(player.getWorld()).thenReturn(world); - when(player.getEnderChest()).thenReturn(chest); - when(player.getName()).thenReturn("tastybento"); - when(player.getInventory()).thenReturn(inv); - when(player.getEffectivePermissions()).thenReturn(Collections.emptySet()); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + when(mockPlayer.getWorld()).thenReturn(world); + when(mockPlayer.getEnderChest()).thenReturn(chest); + when(mockPlayer.getName()).thenReturn("tastybento"); + when(mockPlayer.getInventory()).thenReturn(inv); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.emptySet()); // Player is pending kicks set = new HashSet<>(); @@ -178,12 +155,12 @@ public void setUp() throws Exception { // Add a coop member UUID uuid2 = UUID.randomUUID(); when(coopPlayer.getUniqueId()).thenReturn(uuid2); + when(coopPlayer.spigot()).thenReturn(spigot); User.getInstance(coopPlayer); memberMap.put(uuid2, RanksManager.COOP_RANK); island.setMembers(memberMap); // Bukkit - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); when(Bukkit.getScheduler()).thenReturn(scheduler); when(Bukkit.getPluginManager()).thenReturn(pim); @@ -200,14 +177,13 @@ public void setUp() throws Exception { online.put(u, name); onlinePlayers.add(p1); } - onlinePlayers.add(player); + onlinePlayers.add(mockPlayer); when(Bukkit.getOnlinePlayers()).then((Answer>) invocation -> onlinePlayers); User.setPlugin(plugin); - User.getInstance(player); + User.getInstance(mockPlayer); // Util - PowerMockito.mockStatic(Util.class); when(Util.getWorld(any())).thenReturn(world); // Util translate color codes (used in user translate methods) when(Util.translateColorCodes(anyString())) @@ -241,11 +217,11 @@ public void tearDown() { */ @Test public void testOnPlayerJoinNotKnownNoAutoCreate() { - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify verify(pm, times(3)).getPlayer(any()); - verify(player, never()).sendMessage(anyString()); + verify(mockPlayer, never()).sendMessage(anyString()); // Verify resets verify(pm).setResets(eq(world), any(), eq(0)); // Verify inventory clear because of kick @@ -260,9 +236,9 @@ public void testOnPlayerJoinNotKnownNoAutoCreate() { */ @Test public void testOnPlayerJoinNullWorld() { - when(player.getWorld()).thenReturn(null); // Null + when(mockPlayer.getWorld()).thenReturn(null); // Null when(Util.getWorld(any())).thenReturn(null); // Make null - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify inventory clear because of kick // Check inventory cleared @@ -280,11 +256,11 @@ public void testOnPlayerJoinRangeChangeTooLargePerm() { PermissionAttachmentInfo pa = mock(PermissionAttachmentInfo.class); when(pa.getPermission()).thenReturn("acidisland.island.range.1000"); when(pa.getValue()).thenReturn(true); - when(player.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify - verify(player).sendMessage(eq("commands.admin.setrange.range-updated")); + checkSpigotMessage("commands.admin.setrange.range-updated"); // Verify island setting assertEquals(100, island.getProtectionRange()); // Verify log @@ -300,11 +276,11 @@ public void testOnPlayerJoinRangeChangeSmallerPerm() { PermissionAttachmentInfo pa = mock(PermissionAttachmentInfo.class); when(pa.getPermission()).thenReturn("acidisland.island.range.10"); when(pa.getValue()).thenReturn(true); - when(player.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify - verify(player).sendMessage(eq("commands.admin.setrange.range-updated")); + checkSpigotMessage("commands.admin.setrange.range-updated"); // Verify island setting assertEquals(10, island.getProtectionRange()); // Verify log @@ -320,11 +296,11 @@ public void testOnPlayerJoinRangeChangeSmallIncreasePerm() { PermissionAttachmentInfo pa = mock(PermissionAttachmentInfo.class); when(pa.getPermission()).thenReturn("acidisland.island.range.55"); when(pa.getValue()).thenReturn(true); - when(player.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify - verify(player).sendMessage(eq("commands.admin.setrange.range-updated")); + checkSpigotMessage("commands.admin.setrange.range-updated"); // Verify island setting assertEquals(55, island.getProtectionRange()); // Verify log @@ -340,11 +316,11 @@ public void testOnPlayerJoinRangeChangeSamePerm() { PermissionAttachmentInfo pa = mock(PermissionAttachmentInfo.class); when(pa.getPermission()).thenReturn("acidisland.island.range.50"); when(pa.getValue()).thenReturn(true); - when(player.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + when(mockPlayer.getEffectivePermissions()).thenReturn(Collections.singleton(pa)); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify - verify(player, never()).sendMessage(eq("commands.admin.setrange.range-updated")); + verify(mockPlayer, never()).sendMessage(eq("commands.admin.setrange.range-updated")); // Verify that the island protection range is not changed if it is already at // that value assertEquals(50, island.getProtectionRange()); @@ -358,11 +334,11 @@ public void testOnPlayerJoinRangeChangeSamePerm() { @Test public void testOnPlayerJoinNotKnownAutoCreate() { when(iwm.isCreateIslandOnFirstLoginEnabled(eq(world))).thenReturn(true); - PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + PlayerJoinEvent event = new PlayerJoinEvent(mockPlayer, ""); jll.onPlayerJoin(event); // Verify verify(pm, times(3)).getPlayer(any()); - verify(player).sendMessage(eq("commands.island.create.on-first-login")); + checkSpigotMessage("commands.island.create.on-first-login"); } /** @@ -371,7 +347,7 @@ public void testOnPlayerJoinNotKnownAutoCreate() { */ @Test public void testOnPlayerSwitchWorld() { - PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(player, world); + PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(mockPlayer, world); jll.onPlayerSwitchWorld(event); // Check inventory cleared verify(chest).clear(); @@ -385,7 +361,7 @@ public void testOnPlayerSwitchWorld() { @Test public void testOnPlayerSwitchWorldNullWorld() { when(Util.getWorld(any())).thenReturn(null); - PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(player, world); + PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(mockPlayer, world); jll.onPlayerSwitchWorld(event); // These should not happen verify(chest, never()).clear(); @@ -399,9 +375,9 @@ public void testOnPlayerSwitchWorldNullWorld() { */ @Test public void testOnPlayerQuit() { - PlayerQuitEvent event = new PlayerQuitEvent(player, ""); + PlayerQuitEvent event = new PlayerQuitEvent(mockPlayer, ""); jll.onPlayerQuit(event); - verify(coopPlayer).sendMessage(eq("commands.island.team.uncoop.all-members-logged-off")); + checkSpigotMessage("commands.island.team.uncoop.all-members-logged-off"); // Team is now only 1 big assertEquals(1, island.getMembers().size()); } diff --git a/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java index b0e48b3f6..2aad266a2 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java @@ -6,13 +6,10 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -20,7 +17,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; -import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; @@ -34,17 +30,13 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.stubbing.Answer; -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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; @@ -58,25 +50,13 @@ @PrepareForTest({Bukkit.class, BentoBox.class, User.class, Util.class }) public class StandardSpawnProtectionListenerTest extends AbstractCommonSetup { - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; @Mock private PlayersManager pm; @Mock - private IslandWorldManager iwm; - @Mock - private World world; - @Mock private World nether; @Mock private World end; @Mock - private Player player; - @Mock - private Location location; - @Mock private Block block; private StandardSpawnProtectionListener ssp; @@ -91,10 +71,7 @@ public class StandardSpawnProtectionListenerTest extends AbstractCommonSetup { */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Setup plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); - when(plugin.getIWM()).thenReturn(iwm); + super.setUp(); // Worlds when(world.getEnvironment()).thenReturn(World.Environment.NORMAL); when(nether.getEnvironment()).thenReturn(World.Environment.NETHER); @@ -112,7 +89,6 @@ public void setUp() throws Exception { when(iwm.getWorldSettings(any())).thenReturn(ws); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); // Util - PowerMockito.mockStatic(Util.class); when(Util.getWorld(any())).thenReturn(world); // Location when(location.toVector()).thenReturn(new Vector(5,5,5)); @@ -120,9 +96,9 @@ public void setUp() throws Exception { when(spawnLocation.toVector()).thenReturn(new Vector(0,0,0)); when(spawnLocation.getWorld()).thenReturn(nether); // Player - when(player.getWorld()).thenReturn(nether); - when(player.getUniqueId()).thenReturn(UUID.randomUUID()); - User.getInstance(player); + when(mockPlayer.getWorld()).thenReturn(nether); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + User.getInstance(mockPlayer); // Locales LocalesManager lm = mock(LocalesManager.class); when(lm.get(any(), any())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); @@ -157,10 +133,10 @@ public void tearDown() { */ @Test public void testOnBlockPlaceDisallowed() { - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertTrue(e.isCancelled()); - verify(player).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected"); } /** @@ -169,10 +145,10 @@ public void testOnBlockPlaceDisallowed() { @Test public void testOnBlockPlaceDisallowedNoProtection() { when(iwm.isNetherIslands(any())).thenReturn(true); - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -180,11 +156,11 @@ public void testOnBlockPlaceDisallowedNoProtection() { */ @Test public void testOnBlockPlaceAllowed() { - when(player.isOp()).thenReturn(true); - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + when(mockPlayer.isOp()).thenReturn(true); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -193,10 +169,10 @@ public void testOnBlockPlaceAllowed() { @Test public void testOnBlockPlaceAllowedOutsideSpawn() { when(iwm.getNetherSpawnRadius(any())).thenReturn(1); - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -205,11 +181,11 @@ public void testOnBlockPlaceAllowedOutsideSpawn() { @Test public void testOnBlockPlaceAllowedWrongWorld() { when(location.getWorld()).thenReturn(world); - when(player.getWorld()).thenReturn(world); - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + when(mockPlayer.getWorld()).thenReturn(world); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -218,10 +194,10 @@ public void testOnBlockPlaceAllowedWrongWorld() { @Test public void testOnBlockPlaceAllowedNetherIslandWorlds() { when(iwm.isNetherIslands(any())).thenReturn(true); - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -230,13 +206,13 @@ public void testOnBlockPlaceAllowedNetherIslandWorlds() { @Test public void testOnBlockPlaceAllowedEndIslandWorlds() { when(location.getWorld()).thenReturn(end); - when(player.getWorld()).thenReturn(end); + when(mockPlayer.getWorld()).thenReturn(end); when(spawnLocation.getWorld()).thenReturn(end); when(iwm.isEndIslands(any())).thenReturn(true); - BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, player, true, EquipmentSlot.HAND); + BlockPlaceEvent e = new BlockPlaceEvent(block, blockState, null, null, mockPlayer, true, EquipmentSlot.HAND); ssp.onBlockPlace(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -244,10 +220,10 @@ public void testOnBlockPlaceAllowedEndIslandWorlds() { */ @Test public void testOnBlockBreakDisallowed() { - BlockBreakEvent e = new BlockBreakEvent(block, player); + BlockBreakEvent e = new BlockBreakEvent(block, mockPlayer); ssp.onBlockBreak(e); assertTrue(e.isCancelled()); - verify(player).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected"); } /** @@ -256,10 +232,10 @@ public void testOnBlockBreakDisallowed() { @Test public void testOnBlockBreakDisallowedNoProtection() { when(ws.isMakeNetherPortals()).thenReturn(true); - BlockBreakEvent e = new BlockBreakEvent(block, player); + BlockBreakEvent e = new BlockBreakEvent(block, mockPlayer); ssp.onBlockBreak(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -267,11 +243,11 @@ public void testOnBlockBreakDisallowedNoProtection() { */ @Test public void testOnBlockBreakAllowed() { - when(player.isOp()).thenReturn(true); - BlockBreakEvent e = new BlockBreakEvent(block, player); + when(mockPlayer.isOp()).thenReturn(true); + BlockBreakEvent e = new BlockBreakEvent(block, mockPlayer); ssp.onBlockBreak(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -291,7 +267,7 @@ public void testOnExplosion() { new Vector(0,0,0), new Vector(0,0,0), new Vector(10000,0,0)); - EntityExplodeEvent e = getExplodeEvent(player, location, blockList); + EntityExplodeEvent e = getExplodeEvent(mockPlayer, location, blockList); ssp.onExplosion(e); // 4 blocks inside the spawn should be removed, leaving one assertEquals(1, blockList.size()); @@ -316,7 +292,7 @@ public void testOnExplosionNoProtection() { new Vector(0,0,0), new Vector(0,0,0), new Vector(10000,0,0)); - EntityExplodeEvent e = getExplodeEvent(player, location, blockList); + EntityExplodeEvent e = getExplodeEvent(mockPlayer, location, blockList); ssp.onExplosion(e); // No blocks should be removed assertEquals(5, blockList.size()); @@ -328,10 +304,11 @@ public void testOnExplosionNoProtection() { */ @Test public void testOnBucketEmptyDisallowed() { - PlayerBucketEmptyEvent e = new PlayerBucketEmptyEvent(player, block, block, BlockFace.DOWN, null, null, null); + PlayerBucketEmptyEvent e = new PlayerBucketEmptyEvent(mockPlayer, block, block, BlockFace.DOWN, null, null, + null); ssp.onBucketEmpty(e); assertTrue(e.isCancelled()); - verify(player).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected"); } /** @@ -340,10 +317,11 @@ public void testOnBucketEmptyDisallowed() { @Test public void testOnBucketEmptyDisallowedNoProtection() { when(ws.isMakeNetherPortals()).thenReturn(true); - PlayerBucketEmptyEvent e = new PlayerBucketEmptyEvent(player, block, block, BlockFace.DOWN, null, null, null); + PlayerBucketEmptyEvent e = new PlayerBucketEmptyEvent(mockPlayer, block, block, BlockFace.DOWN, null, null, + null); ssp.onBucketEmpty(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } /** @@ -351,11 +329,12 @@ public void testOnBucketEmptyDisallowedNoProtection() { */ @Test public void testOnBucketEmptyAllowed() { - when(player.isOp()).thenReturn(true); - PlayerBucketEmptyEvent e = new PlayerBucketEmptyEvent(player, block, block, BlockFace.DOWN, null, null, null); + when(mockPlayer.isOp()).thenReturn(true); + PlayerBucketEmptyEvent e = new PlayerBucketEmptyEvent(mockPlayer, block, block, BlockFace.DOWN, null, null, + null); ssp.onBucketEmpty(e); assertFalse(e.isCancelled()); - verify(player, never()).sendMessage("protection.spawn-protected"); + checkSpigotMessage("protection.spawn-protected", 0); } } diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java index 20165cd76..7a8feddb4 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java @@ -36,6 +36,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.RanksManagerBeforeClassTest; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; @@ -48,7 +49,6 @@ import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.RanksManager; -import world.bentobox.bentobox.managers.RanksManagerBeforeClassTest; import world.bentobox.bentobox.panels.settings.SettingsTab; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BlockInteractionListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BlockInteractionListenerTest.java index 4560bb7f6..7d67d21a5 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BlockInteractionListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BlockInteractionListenerTest.java @@ -34,10 +34,10 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.api.flags.Flag.Type; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreakBlocksListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreakBlocksListenerTest.java index d503fefc9..c85479552 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreakBlocksListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreakBlocksListenerTest.java @@ -45,8 +45,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListenerTest.java index fc88fc7aa..f5ff0d08a 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListenerTest.java @@ -31,8 +31,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BucketListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BucketListenerTest.java index 049841d37..daf0ce85b 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BucketListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/BucketListenerTest.java @@ -26,8 +26,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/CandleListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/CandleListenerTest.java index 6d709b421..005a51b8b 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/CandleListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/CandleListenerTest.java @@ -21,8 +21,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EggListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EggListenerTest.java index dfd94361a..65551ded9 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EggListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EggListenerTest.java @@ -19,8 +19,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ElytraListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ElytraListenerTest.java index 74ac31b0d..dba1f0278 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ElytraListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ElytraListenerTest.java @@ -18,8 +18,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.util.Util; /** diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EntityInteractListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EntityInteractListenerTest.java index c703dfbfe..57ea0e43f 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EntityInteractListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/EntityInteractListenerTest.java @@ -33,9 +33,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ExperiencePickupListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ExperiencePickupListenerTest.java index f4883d1a0..4c7e58a48 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ExperiencePickupListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ExperiencePickupListenerTest.java @@ -24,8 +24,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListenerTest.java index 86740fe9b..a8dfbe066 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListenerTest.java @@ -29,9 +29,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/InventoryListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/InventoryListenerTest.java index 0d9c49b79..59225192d 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/InventoryListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/InventoryListenerTest.java @@ -42,8 +42,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PhysicalInteractionListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PhysicalInteractionListenerTest.java index 8832948ca..79c15bfdd 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PhysicalInteractionListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PhysicalInteractionListenerTest.java @@ -39,8 +39,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PlaceBlocksListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PlaceBlocksListenerTest.java index cfd70160a..ca1e5cc9e 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PlaceBlocksListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/PlaceBlocksListenerTest.java @@ -34,8 +34,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/SculkSensorListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/SculkSensorListenerTest.java index 8d9cdb0e5..d83743e51 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/SculkSensorListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/SculkSensorListenerTest.java @@ -19,9 +19,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java index 1153feb88..7aeec0766 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java @@ -43,8 +43,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ThrowingListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ThrowingListenerTest.java index 6839b3d5e..5adaaade5 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ThrowingListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/ThrowingListenerTest.java @@ -18,8 +18,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java index 6cc3f3e78..d44ec3ab0 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java @@ -46,12 +46,12 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; 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.FlagsManager; import world.bentobox.bentobox.managers.IslandWorldManager; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java index 2733fe692..cf4c4f225 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java @@ -22,9 +22,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/EnderChestListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/EnderChestListenerTest.java index b7384a7db..e617450a7 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/EnderChestListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/EnderChestListenerTest.java @@ -35,9 +35,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.listeners.flags.protection.BlockInteractionListener; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/IslandRespawnListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/IslandRespawnListenerTest.java index 940b08d90..8649e1457 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/IslandRespawnListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/IslandRespawnListenerTest.java @@ -38,13 +38,13 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; 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.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java index e4165e258..7700c446f 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java @@ -20,14 +20,12 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemFactory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.bukkit.plugin.PluginManager; import org.bukkit.util.RayTraceResult; import org.junit.After; import org.junit.Before; @@ -35,48 +33,34 @@ 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 world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; +import world.bentobox.bentobox.util.Util; @RunWith(PowerMockRunner.class) -@PrepareForTest({BentoBox.class, PlayerEvent.class, PlayerInteractEvent.class, Bukkit.class}) -public class ObsidianScoopingListenerTest { +@PrepareForTest({ BentoBox.class, PlayerEvent.class, PlayerInteractEvent.class, Bukkit.class, Util.class }) +public class ObsidianScoopingListenerTest extends AbstractCommonSetup { - @Mock - private World world; private ObsidianScoopingListener listener; @Mock private ItemStack item; @Mock private Block clickedBlock; @Mock - private BentoBox plugin; - @Mock - private Player p; - @Mock - private IslandWorldManager iwm; - @Mock - private IslandsManager im; - @Mock private LocalesManager lm; private Material inHand; private Material block; @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); // Mock server Server server = mock(Server.class); @@ -84,9 +68,6 @@ public void setUp() throws Exception { when(server.getWorld("world")).thenReturn(world); when(server.getVersion()).thenReturn("BSB_Mocking"); - PluginManager pluginManager = mock(PluginManager.class); - when(Bukkit.getPluginManager()).thenReturn(pluginManager); - // Mock item factory (for itemstacks) ItemFactory itemFactory = mock(ItemFactory.class); when(server.getItemFactory()).thenReturn(itemFactory); @@ -95,30 +76,25 @@ public void setUp() throws Exception { listener = new ObsidianScoopingListener(); // Mock player - when(p.getWorld()).thenReturn(world); + when(mockPlayer.getWorld()).thenReturn(world); RayTraceResult rtr = mock(RayTraceResult.class); - when(p.rayTraceBlocks(5, FluidCollisionMode.ALWAYS)).thenReturn(rtr); + when(mockPlayer.rayTraceBlocks(5, FluidCollisionMode.ALWAYS)).thenReturn(rtr); when(rtr.getHitBlock()).thenReturn(clickedBlock); - Location location = mock(Location.class); when(location.getWorld()).thenReturn(world); when(location.getBlockX()).thenReturn(0); when(location.getBlockY()).thenReturn(0); when(location.getBlockZ()).thenReturn(0); - when(p.getLocation()).thenReturn(location); + when(mockPlayer.getLocation()).thenReturn(location); - when(p.getInventory()).thenReturn(mock(PlayerInventory.class)); + when(mockPlayer.getInventory()).thenReturn(mock(PlayerInventory.class)); // Worlds - when(plugin.getIWM()).thenReturn(iwm); when(iwm.getIslandWorld(Mockito.any())).thenReturn(world); when(iwm.getNetherWorld(Mockito.any())).thenReturn(world); when(iwm.getEndWorld(Mockito.any())).thenReturn(world); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - // Mock up IslandsManager - when(plugin.getIslands()).thenReturn(im); - // Mock up items and blocks when(clickedBlock.getX()).thenReturn(0); when(clickedBlock.getY()).thenReturn(0); @@ -136,7 +112,7 @@ public void setUp() throws Exception { // Put player on island when(im.userIsOnIsland(Mockito.any(), Mockito.any())).thenReturn(true); // Set as survival - when(p.getGameMode()).thenReturn(GameMode.SURVIVAL); + when(mockPlayer.getGameMode()).thenReturn(GameMode.SURVIVAL); // Locales when(plugin.getLocalesManager()).thenReturn(lm); @@ -157,7 +133,7 @@ public void setUp() throws Exception { PlayerInventory playerInventory = mock(PlayerInventory.class); when(playerInventory.getItemInMainHand()).thenReturn(item); when(playerInventory.getItemInOffHand()).thenReturn(new ItemStack(Material.AIR)); - when(p.getInventory()).thenReturn(playerInventory); + when(mockPlayer.getInventory()).thenReturn(playerInventory); // Addon when(iwm.getAddon(Mockito.any())).thenReturn(Optional.empty()); @@ -219,7 +195,8 @@ public void testOnPlayerInteractObsidianManyBucketsInHand() { @Test public void testOnPlayerInteractNotInWorld() { - PlayerInteractEvent event = new PlayerInteractEvent(p, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST); + PlayerInteractEvent event = new PlayerInteractEvent(mockPlayer, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, + BlockFace.EAST); // Test not in world when(iwm.inWorld(any(World.class))).thenReturn(false); when(iwm.inWorld(any(Location.class))).thenReturn(false); @@ -235,11 +212,12 @@ public void testOnPlayerInteractInWorld() { @Test public void testOnPlayerInteractGameModes() { - PlayerInteractEvent event = new PlayerInteractEvent(p, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST); + PlayerInteractEvent event = new PlayerInteractEvent(mockPlayer, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, + BlockFace.EAST); // Test different game modes for (GameMode gm : GameMode.values()) { - when(p.getGameMode()).thenReturn(gm); + when(mockPlayer.getGameMode()).thenReturn(gm); if (!gm.equals(GameMode.SURVIVAL)) { assertFalse(listener.onPlayerInteract(event)); } @@ -248,10 +226,11 @@ public void testOnPlayerInteractGameModes() { @Test public void testOnPlayerInteractSurvivalNotOnIsland() { - PlayerInteractEvent event = new PlayerInteractEvent(p, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST); + PlayerInteractEvent event = new PlayerInteractEvent(mockPlayer, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, + BlockFace.EAST); // Set as survival - when(p.getGameMode()).thenReturn(GameMode.SURVIVAL); + when(mockPlayer.getGameMode()).thenReturn(GameMode.SURVIVAL); // Positive test with 1 bucket in the stack inHand = Material.BUCKET; @@ -273,7 +252,8 @@ private void testEvent() { when(airBlock.getType()).thenReturn(Material.AIR); ObsidianScoopingListener listener = new ObsidianScoopingListener(); - PlayerInteractEvent event = new PlayerInteractEvent(p, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST); + PlayerInteractEvent event = new PlayerInteractEvent(mockPlayer, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, + BlockFace.EAST); if (!item.getType().equals(Material.BUCKET) || !clickedBlock.getType().equals(Material.OBSIDIAN)) { assertFalse(listener.onPlayerInteract(event)); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/PetTeleportListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/PetTeleportListenerTest.java index f18e22374..2e8d1a513 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/PetTeleportListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/PetTeleportListenerTest.java @@ -21,9 +21,9 @@ import com.google.common.collect.ImmutableSet; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.database.objects.Island; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java index 0110c7566..c58c77417 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java @@ -24,7 +24,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.entity.Player; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; @@ -33,23 +32,18 @@ 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 com.google.common.collect.ImmutableSet; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; -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.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; /** @@ -62,49 +56,24 @@ public class VisitorKeepInventoryListenerTest extends AbstractCommonSetup { // Class under test private VisitorKeepInventoryListener l; - @Mock - private Player player; - /* IslandWorldManager */ - @Mock - private IslandWorldManager iwm; - /* World */ - @Mock - private World world; - - /* Islands */ - @Mock - private IslandsManager islandsManager; - - @Mock - private Island island; private PlayerDeathEvent e; - @Mock - private Location location; - - /** - */ @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox plugin = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", plugin); - /* Island World Manager */ - when(plugin.getIWM()).thenReturn(iwm); + super.setUp(); // User User.setPlugin(plugin); UUID uuid = UUID.randomUUID(); - when(player.getUniqueId()).thenReturn(uuid); - when(player.getName()).thenReturn("tastybento"); - when(player.getLocation()).thenReturn(location); + when(mockPlayer.getUniqueId()).thenReturn(uuid); + when(mockPlayer.getName()).thenReturn("tastybento"); + when(mockPlayer.getLocation()).thenReturn(location); when(location.getWorld()).thenReturn(world); when(location.toVector()).thenReturn(new Vector(1,2,3)); // Turn on why for player - when(player.getMetadata(eq("bskyblock_world_why_debug"))).thenReturn(Collections.singletonList(new FixedMetadataValue(plugin, true))); - when(player.getMetadata(eq("bskyblock_world_why_debug_issuer"))).thenReturn(Collections.singletonList(new FixedMetadataValue(plugin, uuid.toString()))); - User.getInstance(player); + when(mockPlayer.getMetadata(eq("bskyblock_world_why_debug"))).thenReturn(Collections.singletonList(new FixedMetadataValue(plugin, true))); + when(mockPlayer.getMetadata(eq("bskyblock_world_why_debug_issuer"))).thenReturn(Collections.singletonList(new FixedMetadataValue(plugin, uuid.toString()))); + User.getInstance(mockPlayer); // WorldSettings and World Flags WorldSettings ws = mock(WorldSettings.class); @@ -124,11 +93,11 @@ public void setUp() throws Exception { Flags.VISITOR_KEEP_INVENTORY.setSetting(world, false); /* Islands */ - when(plugin.getIslands()).thenReturn(islandsManager); + when(plugin.getIslands()).thenReturn(im); // Visitor when(island.getMemberSet(anyInt())).thenReturn(ImmutableSet.of()); // By default, there should be an island. - when(islandsManager.getProtectedIslandAt(any())).thenReturn(Optional.of(island)); + when(im.getProtectedIslandAt(any())).thenReturn(Optional.of(island)); // Util PowerMockito.mockStatic(Util.class, Mockito.CALLS_REAL_METHODS); @@ -137,7 +106,7 @@ public void setUp() throws Exception { // Default death event List drops = new ArrayList<>(); drops.add(new ItemStack(Material.ACACIA_BOAT)); - e = getPlayerDeathEvent(player, drops, 100, 0, 0, 0, "Death message"); + e = getPlayerDeathEvent(mockPlayer, drops, 100, 0, 0, 0, "Death message"); // Make new l = new VisitorKeepInventoryListener(); } @@ -169,8 +138,8 @@ public void testOnVisitorDeathFalseFlag() { assertFalse(e.getDrops().isEmpty()); assertEquals(100, e.getDroppedExp()); // Why - verify(player).sendMessage("Why: PlayerDeathEvent in world bskyblock_world at 1,2,3"); - verify(player).sendMessage("Why: tastybento VISITOR_KEEP_INVENTORY - SETTING_NOT_ALLOWED_IN_WORLD"); + checkSpigotMessage("Why: PlayerDeathEvent in world bskyblock_world at 1,2,3"); + checkSpigotMessage("Why: tastybento VISITOR_KEEP_INVENTORY - SETTING_NOT_ALLOWED_IN_WORLD"); } /** @@ -185,8 +154,8 @@ public void testOnVisitorDeathTrueFlag() { assertTrue(e.getDrops().isEmpty()); assertEquals(0, e.getDroppedExp()); // Why - verify(player).sendMessage("Why: PlayerDeathEvent in world bskyblock_world at 1,2,3"); - verify(player).sendMessage("Why: tastybento VISITOR_KEEP_INVENTORY - SETTING_ALLOWED_IN_WORLD"); + checkSpigotMessage("Why: PlayerDeathEvent in world bskyblock_world at 1,2,3"); + checkSpigotMessage("Why: tastybento VISITOR_KEEP_INVENTORY - SETTING_ALLOWED_IN_WORLD"); } /** @@ -202,8 +171,8 @@ public void testOnVisitorDeathNotInWorld() { assertFalse(e.getDrops().isEmpty()); assertEquals(100, e.getDroppedExp()); // Why - verify(player).sendMessage("Why: PlayerDeathEvent in world bskyblock_world at 1,2,3"); - verify(player).sendMessage("Why: tastybento VISITOR_KEEP_INVENTORY - SETTING_NOT_ALLOWED_IN_WORLD"); + checkSpigotMessage("Why: PlayerDeathEvent in world bskyblock_world at 1,2,3"); + checkSpigotMessage("Why: tastybento VISITOR_KEEP_INVENTORY - SETTING_NOT_ALLOWED_IN_WORLD"); } /** @@ -211,7 +180,7 @@ public void testOnVisitorDeathNotInWorld() { */ @Test public void testOnVisitorDeathTrueFlagNoIsland() { - when(islandsManager.getProtectedIslandAt(any())).thenReturn(Optional.empty()); + when(im.getProtectedIslandAt(any())).thenReturn(Optional.empty()); Flags.VISITOR_KEEP_INVENTORY.setSetting(world, true); l.onVisitorDeath(e); assertFalse(e.getKeepInventory()); @@ -219,7 +188,7 @@ public void testOnVisitorDeathTrueFlagNoIsland() { assertFalse(e.getDrops().isEmpty()); assertEquals(100, e.getDroppedExp()); // Why - verify(player, never()).sendMessage(anyString()); + verify(mockPlayer, never()).sendMessage(anyString()); } } diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/WitherListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/WitherListenerTest.java index 4542a600b..15c963c01 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/WitherListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/WitherListenerTest.java @@ -33,10 +33,10 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.managers.IslandWorldManager; diff --git a/src/test/java/world/bentobox/bentobox/listeners/teleports/EntityTeleportListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/teleports/EntityTeleportListenerTest.java index 03e697bf2..aa7ed3a70 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/teleports/EntityTeleportListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/teleports/EntityTeleportListenerTest.java @@ -23,8 +23,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java index fc2967a0d..730b4547f 100644 --- a/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java @@ -76,6 +76,7 @@ import io.papermc.lib.PaperLib; import io.papermc.lib.environments.CraftBukkitEnvironment; import io.papermc.lib.environments.Environment; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.configuration.WorldSettings; @@ -84,9 +85,7 @@ import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.Database; import world.bentobox.bentobox.database.DatabaseSetup; -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; diff --git a/src/test/java/world/bentobox/bentobox/managers/island/IslandCacheTest.java b/src/test/java/world/bentobox/bentobox/managers/island/IslandCacheTest.java index 7317a78a4..787459983 100644 --- a/src/test/java/world/bentobox/bentobox/managers/island/IslandCacheTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/island/IslandCacheTest.java @@ -46,13 +46,13 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; +import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.Database; import world.bentobox.bentobox.database.DatabaseSetup; import world.bentobox.bentobox.database.objects.Island; -import world.bentobox.bentobox.listeners.flags.AbstractCommonSetup; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; diff --git a/src/test/java/world/bentobox/bentobox/util/UtilTest.java b/src/test/java/world/bentobox/bentobox/util/UtilTest.java index 0577d687b..4745b6ce3 100644 --- a/src/test/java/world/bentobox/bentobox/util/UtilTest.java +++ b/src/test/java/world/bentobox/bentobox/util/UtilTest.java @@ -29,6 +29,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; +import org.bukkit.entity.Player.Spigot; import org.bukkit.util.Vector; import org.junit.After; import org.junit.Before; @@ -72,6 +73,8 @@ public class UtilTest { private User user; @Mock private ConsoleCommandSender sender; + @Mock + private Spigot spigot; /** */ @@ -100,6 +103,7 @@ public void setUp() throws Exception { Server server = mock(Server.class); when(Bukkit.getServer()).thenReturn(server); when(Bukkit.getWorld(anyString())).thenReturn(world); + when(sender.spigot()).thenReturn(spigot); when(Bukkit.getConsoleSender()).thenReturn(sender); // Bukkit - online players @@ -113,6 +117,7 @@ public void setUp() throws Exception { when(p1.getUniqueId()).thenReturn(uuid); when(p1.getName()).thenReturn(name); when(p1.hasPermission(anyString())).thenReturn(true); + when(p1.spigot()).thenReturn(spigot); online.put(uuid, name); onlinePlayers.add(p1); // Add to User cache