Show correct missing permission for multi sethome command

Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1367
This commit is contained in:
tastybento 2020-05-25 16:44:22 -07:00
parent 2e0ca14729
commit fdb4df3d93
2 changed files with 60 additions and 53 deletions

View File

@ -59,7 +59,7 @@ public class IslandSethomeCommand extends ConfirmableCommand {
return false;
}
} else {
user.sendMessage("general.errors.no-permission");
user.sendMessage("general.errors.no-permission", TextVariables.PERMISSION, this.getPermissionPrefix() + "island.maxhomes.[number]");
return false;
}
}

View File

@ -3,7 +3,13 @@ package world.bentobox.bentobox.api.commands.island;
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.anyInt;
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;
@ -29,6 +35,7 @@ import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.Settings;
import world.bentobox.bentobox.api.commands.CompositeCommand;
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;
@ -71,7 +78,7 @@ public class IslandSethomeCommandTest {
// Player
Player player = mock(Player.class);
// Sometimes use Mockito.withSettings().verboseLogging()
// Sometimes use withSettings().verboseLogging()
user = mock(User.class);
when(user.isOp()).thenReturn(false);
uuid = UUID.randomUUID();
@ -79,7 +86,7 @@ public class IslandSethomeCommandTest {
when(user.getPlayer()).thenReturn(player);
when(user.getName()).thenReturn("tastybento");
when(user.getWorld()).thenReturn(mock(World.class));
when(user.getTranslation(Mockito.anyString())).thenAnswer(i -> i.getArgument(0, String.class));
when(user.getTranslation(anyString())).thenAnswer(i -> i.getArgument(0, String.class));
// Parent command has no aliases
ic = mock(CompositeCommand.class);
@ -89,13 +96,13 @@ public class IslandSethomeCommandTest {
// No island for player to begin with (set it later in the tests)
im = mock(IslandsManager.class);
when(im.hasIsland(Mockito.any(), Mockito.any(User.class))).thenReturn(false);
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(false);
when(im.hasIsland(any(), any(User.class))).thenReturn(false);
when(im.isOwner(any(), eq(uuid))).thenReturn(false);
when(plugin.getIslands()).thenReturn(im);
// Has team
PlayersManager pm = mock(PlayersManager.class);
when(im.inTeam(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
when(im.inTeam(any(), eq(uuid))).thenReturn(true);
when(plugin.getPlayers()).thenReturn(pm);
// Server & Scheduler
@ -106,24 +113,24 @@ public class IslandSethomeCommandTest {
// Island Banned list initialization
island = mock(Island.class);
when(island.getBanned()).thenReturn(new HashSet<>());
when(island.isBanned(Mockito.any())).thenReturn(false);
when(im.getIsland(Mockito.any(), Mockito.any(UUID.class))).thenReturn(island);
when(island.isBanned(any())).thenReturn(false);
when(im.getIsland(any(), any(UUID.class))).thenReturn(island);
// IWM friendly name
iwm = mock(IslandWorldManager.class);
when(iwm.getFriendlyName(Mockito.any())).thenReturn("BSkyBlock");
when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock");
// Not in nether
when(iwm.isNether(Mockito.any())).thenReturn(false);
when(iwm.isNether(any())).thenReturn(false);
// Not in end
when(iwm.isEnd(Mockito.any())).thenReturn(false);
when(iwm.isEnd(any())).thenReturn(false);
// Number of homes default
when(iwm.getMaxHomes(Mockito.any())).thenReturn(3);
when(iwm.getMaxHomes(any())).thenReturn(3);
when(plugin.getIWM()).thenReturn(iwm);
// Number of homes
PowerMockito.mockStatic(Util.class);
// 1 home for now
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(1);
when(user.getPermissionValue(anyString(), anyInt())).thenReturn(1);
}
@After
@ -157,11 +164,11 @@ public class IslandSethomeCommandTest {
@Test
public void testCanExecuteNoIsland() {
// Player doesn't have an island and doesn't have a team.
when(im.inTeam(Mockito.any(), Mockito.eq(uuid))).thenReturn(false);
when(im.inTeam(any(), eq(uuid))).thenReturn(false);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.canExecute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendMessage("general.errors.no-island");
verify(user).sendMessage("general.errors.no-island");
}
/**
@ -169,12 +176,12 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testCanExecuteNotOnIsland() {
when(im.hasIsland(Mockito.any(), Mockito.any(User.class))).thenReturn(true);
when(im.locationIsOnIsland(Mockito.any(), Mockito.any())).thenReturn(false);
when(im.hasIsland(any(), any(User.class))).thenReturn(true);
when(im.locationIsOnIsland(any(), any())).thenReturn(false);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.canExecute(user, "island", Collections.emptyList()));
Mockito.verify(user, Mockito.never()).sendMessage("general.errors.no-island");
Mockito.verify(user).sendMessage("commands.island.sethome.must-be-on-your-island");
verify(user, never()).sendMessage("general.errors.no-island");
verify(user).sendMessage("commands.island.sethome.must-be-on-your-island");
}
/**
@ -182,12 +189,12 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testCanExecute() {
when(im.hasIsland(Mockito.any(), Mockito.any(User.class))).thenReturn(true);
when(im.locationIsOnIsland(Mockito.any(), Mockito.any())).thenReturn(true);
when(im.hasIsland(any(), any(User.class))).thenReturn(true);
when(im.locationIsOnIsland(any(), any())).thenReturn(true);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.canExecute(user, "island", Collections.emptyList()));
Mockito.verify(user, Mockito.never()).sendMessage("general.errors.no-island");
Mockito.verify(user, Mockito.never()).sendMessage("commands.island.sethome.must-be-on-your-island");
verify(user, never()).sendMessage("general.errors.no-island");
verify(user, never()).sendMessage("commands.island.sethome.must-be-on-your-island");
}
/**
@ -197,7 +204,7 @@ public class IslandSethomeCommandTest {
public void testExecuteUserStringListOfString() {
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendMessage("commands.island.sethome.home-set");
verify(user).sendMessage("commands.island.sethome.home-set");
}
@ -208,7 +215,7 @@ public class IslandSethomeCommandTest {
public void testExecuteUserStringListOfStringNoMultiHome() {
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.execute(user, "island", Collections.singletonList("3")));
Mockito.verify(user).sendMessage("general.errors.no-permission");
verify(user).sendMessage("general.errors.no-permission", TextVariables.PERMISSION, "bskyblock.island.maxhomes.[number]");
}
/**
@ -216,10 +223,10 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringMultiHomeSuccess() {
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(5);
when(user.getPermissionValue(anyString(), anyInt())).thenReturn(5);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.execute(user, "island", Collections.singletonList("3")));
Mockito.verify(user).sendMessage("commands.island.sethome.home-set");
verify(user).sendMessage("commands.island.sethome.home-set");
}
/**
@ -227,10 +234,10 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringMultiHomeTooHigh() {
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(5);
when(user.getPermissionValue(anyString(), anyInt())).thenReturn(5);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.execute(user, "island", Collections.singletonList("13")));
Mockito.verify(user).sendMessage(Mockito.eq("commands.island.sethome.num-homes"), Mockito.eq("[number]"), Mockito.eq("5"));
verify(user).sendMessage(eq("commands.island.sethome.num-homes"), eq("[number]"), eq("5"));
}
/**
@ -238,10 +245,10 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringMultiHomeTooLow() {
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(5);
when(user.getPermissionValue(anyString(), anyInt())).thenReturn(5);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.execute(user, "island", Collections.singletonList("-3")));
Mockito.verify(user).sendMessage(Mockito.eq("commands.island.sethome.num-homes"), Mockito.eq("[number]"), Mockito.eq("5"));
verify(user).sendMessage(eq("commands.island.sethome.num-homes"), eq("[number]"), eq("5"));
}
/**
@ -249,10 +256,10 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringMultiHomeNAN() {
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(5);
when(user.getPermissionValue(anyString(), anyInt())).thenReturn(5);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.execute(user, "island", Collections.singletonList("six")));
Mockito.verify(user).sendMessage(Mockito.eq("commands.island.sethome.num-homes"), Mockito.eq("[number]"), Mockito.eq("5"));
verify(user).sendMessage(eq("commands.island.sethome.num-homes"), eq("[number]"), eq("5"));
}
/**
@ -260,14 +267,14 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringNether() {
when(iwm.isNether(Mockito.any())).thenReturn(true);
when(iwm.isNether(any())).thenReturn(true);
WorldSettings ws = mock(WorldSettings.class);
when(ws.isAllowSetHomeInNether()).thenReturn(true);
when(ws.isRequireConfirmationToSetHomeInNether()).thenReturn(false);
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
when(iwm.getWorldSettings(any())).thenReturn(ws);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendMessage("commands.island.sethome.home-set");
verify(user).sendMessage("commands.island.sethome.home-set");
}
/**
@ -275,14 +282,14 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringNetherNotAllowed() {
when(iwm.isNether(Mockito.any())).thenReturn(true);
when(iwm.isNether(any())).thenReturn(true);
WorldSettings ws = mock(WorldSettings.class);
when(ws.isAllowSetHomeInNether()).thenReturn(false);
when(ws.isRequireConfirmationToSetHomeInNether()).thenReturn(false);
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
when(iwm.getWorldSettings(any())).thenReturn(ws);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendMessage("commands.island.sethome.nether.not-allowed");
verify(user).sendMessage("commands.island.sethome.nether.not-allowed");
}
/**
@ -290,15 +297,15 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringNetherConfirmation() {
when(iwm.isNether(Mockito.any())).thenReturn(true);
when(iwm.isNether(any())).thenReturn(true);
WorldSettings ws = mock(WorldSettings.class);
when(ws.isAllowSetHomeInNether()).thenReturn(true);
when(ws.isRequireConfirmationToSetHomeInNether()).thenReturn(true);
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
when(iwm.getWorldSettings(any())).thenReturn(ws);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendRawMessage(Mockito.eq("commands.island.sethome.nether.confirmation"));
Mockito.verify(user).sendMessage(Mockito.eq("commands.confirmation.confirm"), Mockito.eq("[seconds]"), Mockito.eq("0"));
verify(user).sendRawMessage(eq("commands.island.sethome.nether.confirmation"));
verify(user).sendMessage(eq("commands.confirmation.confirm"), eq("[seconds]"), eq("0"));
}
/**
@ -306,14 +313,14 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringEnd() {
when(iwm.isEnd(Mockito.any())).thenReturn(true);
when(iwm.isEnd(any())).thenReturn(true);
WorldSettings ws = mock(WorldSettings.class);
when(ws.isAllowSetHomeInTheEnd()).thenReturn(true);
when(ws.isRequireConfirmationToSetHomeInNether()).thenReturn(false);
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
when(iwm.getWorldSettings(any())).thenReturn(ws);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendMessage("commands.island.sethome.home-set");
verify(user).sendMessage("commands.island.sethome.home-set");
}
/**
@ -321,14 +328,14 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringEndNotAllowed() {
when(iwm.isEnd(Mockito.any())).thenReturn(true);
when(iwm.isEnd(any())).thenReturn(true);
WorldSettings ws = mock(WorldSettings.class);
when(ws.isAllowSetHomeInTheEnd()).thenReturn(false);
when(ws.isRequireConfirmationToSetHomeInTheEnd()).thenReturn(false);
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
when(iwm.getWorldSettings(any())).thenReturn(ws);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertFalse(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendMessage("commands.island.sethome.the-end.not-allowed");
verify(user).sendMessage("commands.island.sethome.the-end.not-allowed");
}
/**
@ -336,14 +343,14 @@ public class IslandSethomeCommandTest {
*/
@Test
public void testExecuteUserStringListOfStringEndConfirmation() {
when(iwm.isEnd(Mockito.any())).thenReturn(true);
when(iwm.isEnd(any())).thenReturn(true);
WorldSettings ws = mock(WorldSettings.class);
when(ws.isAllowSetHomeInTheEnd()).thenReturn(true);
when(ws.isRequireConfirmationToSetHomeInTheEnd()).thenReturn(true);
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
when(iwm.getWorldSettings(any())).thenReturn(ws);
IslandSethomeCommand isc = new IslandSethomeCommand(ic);
assertTrue(isc.execute(user, "island", Collections.emptyList()));
Mockito.verify(user).sendRawMessage(Mockito.eq("commands.island.sethome.the-end.confirmation"));
Mockito.verify(user).sendMessage(Mockito.eq("commands.confirmation.confirm"), Mockito.eq("[seconds]"), Mockito.eq("0"));
verify(user).sendRawMessage(eq("commands.island.sethome.the-end.confirmation"));
verify(user).sendMessage(eq("commands.confirmation.confirm"), eq("[seconds]"), eq("0"));
}
}