diff --git a/pom.xml b/pom.xml index 1129ed8..22c446f 100644 --- a/pom.xml +++ b/pom.xml @@ -50,13 +50,14 @@ UTF-8 UTF-8 - 17 + 21 1.7 - - 2.0.9 - 1.21.3-R0.1-SNAPSHOT - 2.7.1-SNAPSHOT + 1.21.11-R0.1-SNAPSHOT + 3.14.0-SNAPSHOT + 5.10.2 + 5.11.0 + 4.110.0 ${build.version}-SNAPSHOT @@ -112,8 +113,8 @@ - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots + papermc + https://repo.papermc.io/repository/maven-public/ bentoboxworld @@ -124,8 +125,8 @@ https://repo.codemc.org/repository/maven-public/ - codemc-public - https://repo.codemc.org/repository/maven-public/ + codemc + https://repo.codemc.org/repository/maven-snapshots/ jitpack.io @@ -135,37 +136,51 @@ - + - org.spigotmc - spigot-api - ${spigot.version} + io.papermc.paper + paper-api + ${paper.version} provided - - org.mockito - mockito-core - 3.0.0 + world.bentobox + bentobox + ${bentobox.version} + provided + + + + org.mockbukkit.mockbukkit + mockbukkit-v1.21 + ${mock-bukkit.version} test + - org.powermock - powermock-module-junit4 - ${powermock.version} + org.junit.jupiter + junit-jupiter-api + ${junit.version} test - org.powermock - powermock-api-mockito2 - ${powermock.version} + org.junit.jupiter + junit-jupiter-engine + ${junit.version} test + - world.bentobox - bentobox - ${bentobox.version} - provided + org.mockito + mockito-core + ${mockito.version} + test + + + org.mockito + mockito-junit-jupiter + ${mockito.version} + test @@ -222,6 +237,7 @@ 3.15.0 ${java.version} + true org.apache.maven.plugins diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 15889a6..32ef19b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: BentoBox-Bank main: world.bentobox.bank.BankPladdon version: ${project.version}${build.number} -api-version: "1.16" +api-version: "1.21" authors: [tastybento] contributors: ["The BentoBoxWorld Community"] diff --git a/src/test/java/world/bentobox/bank/BankManagerTest.java b/src/test/java/world/bentobox/bank/BankManagerTest.java index dcf7077..9dfebf6 100644 --- a/src/test/java/world/bentobox/bank/BankManagerTest.java +++ b/src/test/java/world/bentobox/bank/BankManagerTest.java @@ -1,43 +1,27 @@ package world.bentobox.bank; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.beans.IntrospectionException; -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Comparator; import java.util.UUID; import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; +import org.mockito.MockedStatic; 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.bank.data.BankAccounts; import world.bentobox.bank.data.Money; import world.bentobox.bank.data.TxType; -import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.events.IslandBaseEvent; import world.bentobox.bentobox.api.events.island.IslandEvent; import world.bentobox.bentobox.api.events.island.IslandEvent.Reason; @@ -45,82 +29,56 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.DatabaseSetup; -import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType; import world.bentobox.bentobox.database.objects.Island; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, DatabaseSetup.class, Util.class, IslandsManager.class }) -public class BankManagerTest { +class BankManagerTest extends CommonTestSetup { @Mock private Bank addon; // Class under test private BankManager bm; - private static AbstractDatabaseHandler h; - @Mock - private BentoBox plugin; - @Mock - private Settings pluginSettings; + @SuppressWarnings("rawtypes") + private AbstractDatabaseHandler h; @Mock private User user; - @Mock - private World world; private Island island; - @Mock - private IslandsManager im; private String uniqueId; - @Mock - private Location location; private world.bentobox.bank.Settings settings; - + private MockedStatic mockDb; @SuppressWarnings("unchecked") - @BeforeClass - public static void beforeClass() throws IllegalAccessException, InvocationTargetException, IntrospectionException { - // This has to be done beforeClass otherwise the tests will interfere with each other + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); + + // Database mock h = mock(AbstractDatabaseHandler.class); - // Database - PowerMockito.mockStatic(DatabaseSetup.class); + mockDb = Mockito.mockStatic(DatabaseSetup.class); DatabaseSetup dbSetup = mock(DatabaseSetup.class); - when(DatabaseSetup.getDatabase()).thenReturn(dbSetup); + mockDb.when(DatabaseSetup::getDatabase).thenReturn(dbSetup); when(dbSetup.getHandler(any())).thenReturn(h); when(h.saveObject(any())).thenReturn(CompletableFuture.completedFuture(true)); - } - /** - */ - @Before - public void setUp() { when(addon.getPlugin()).thenReturn(plugin); - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); - - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); - // The database type has to be created one line before the thenReturn() to work! - DatabaseType value = DatabaseType.JSON; - when(plugin.getSettings()).thenReturn(pluginSettings); - when(pluginSettings.getDatabaseType()).thenReturn(value); + // Island manager when(addon.getIslands()).thenReturn(im); uniqueId = UUID.randomUUID().toString(); island = new Island(); island.setUniqueId(uniqueId); - when(location.getWorld()).thenReturn(world); - when(location.clone()).thenReturn(location); island.setCenter(location); when(im.getIsland(world, user)).thenReturn(island); - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); // Addon settings settings = new world.bentobox.bank.Settings(); @@ -129,75 +87,63 @@ public void setUp() { bm = new BankManager(addon); } - /** - * @throws java.lang.Exception - exception - */ - @After + @Override + @AfterEach public void tearDown() throws Exception { - deleteAll(new File("database")); - User.clearUsers(); - Mockito.framework().clearInlineMocks(); - } - - private static void deleteAll(File file) throws IOException { - if (file.exists()) { - Files.walk(file.toPath()) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); + if (mockDb != null) { + mockDb.closeOnDemand(); } + super.tearDown(); } /** * Test method for {@link world.bentobox.bank.BankManager#BankManager(world.bentobox.bank.Bank)}. */ @Test - public void testBankManager() { - PowerMockito.verifyStatic(Bukkit.class); - Bukkit.getScheduler(); + void testBankManager() { + mockedBukkit.verify(Bukkit::getScheduler); } /** * Test method for {@link world.bentobox.bank.BankManager#loadBalances()}. */ @Test - public void testLoadBalances() { + void testLoadBalances() { bm.loadBalances(); - PowerMockito.verifyStatic(Bukkit.class, times(2)); - Bukkit.getScheduler(); + mockedBukkit.verify(Bukkit::getScheduler, times(2)); } /** - * Test method for {@link world.bentobox.bank.BankManager#deposit(world.bentobox.bentobox.api.user.User, double, org.bukkit.World)}. + * Test method for {@link world.bentobox.bank.BankManager#deposit(world.bentobox.bentobox.api.user.User, world.bentobox.bank.data.Money, org.bukkit.World)}. */ @Test - public void testDepositUserDoubleWorld() { + void testDepositUserDoubleWorld() { bm.deposit(user, new Money(100), world).thenAccept(r -> assertEquals(BankResponse.SUCCESS, r)); } /** - * Test method for {@link world.bentobox.bank.BankManager#deposit(world.bentobox.bentobox.api.user.User, world.bentobox.bentobox.database.objects.Island, double, world.bentobox.bank.data.TxType)}. + * Test method for {@link world.bentobox.bank.BankManager#deposit(world.bentobox.bentobox.api.user.User, world.bentobox.bentobox.database.objects.Island, world.bentobox.bank.data.Money, world.bentobox.bank.data.TxType)}. */ @Test - public void testDepositUserIslandDoubleTxType() { + void testDepositUserIslandDoubleTxType() { for (TxType type : TxType.values()) { bm.deposit(user, island, new Money(100), type).thenAccept(r -> assertEquals(BankResponse.SUCCESS, r)); } } /** - * Test method for {@link world.bentobox.bank.BankManager#withdraw(world.bentobox.bentobox.api.user.User, double, org.bukkit.World)}. + * Test method for {@link world.bentobox.bank.BankManager#withdraw(world.bentobox.bentobox.api.user.User, world.bentobox.bank.data.Money, org.bukkit.World)}. */ @Test - public void testWithdrawUserDoubleWorld() { + void testWithdrawUserDoubleWorld() { bm.withdraw(user, new Money(100), world).thenAccept(r -> assertEquals(BankResponse.SUCCESS, r)); } /** - * Test method for {@link world.bentobox.bank.BankManager#withdraw(world.bentobox.bentobox.api.user.User, world.bentobox.bentobox.database.objects.Island, double, world.bentobox.bank.data.TxType)}. + * Test method for {@link world.bentobox.bank.BankManager#withdraw(world.bentobox.bentobox.api.user.User, world.bentobox.bentobox.database.objects.Island, world.bentobox.bank.data.Money, world.bentobox.bank.data.TxType)}. */ @Test - public void testWithdrawUserIslandDoubleTxType() { + void testWithdrawUserIslandDoubleTxType() { for (TxType type : TxType.values()) { bm.withdraw(user, island, new Money(100), type).thenAccept(r -> assertEquals(BankResponse.SUCCESS, r)); } @@ -207,7 +153,7 @@ public void testWithdrawUserIslandDoubleTxType() { * Test method for {@link world.bentobox.bank.BankManager#getBalance(world.bentobox.bentobox.database.objects.Island)}. */ @Test - public void testGetBalanceIsland() { + void testGetBalanceIsland() { assertEquals(0D, bm.getBalance(island).getValue(), 0D); } @@ -215,7 +161,7 @@ public void testGetBalanceIsland() { * Test method for {@link world.bentobox.bank.BankManager#getBalance(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetBalanceUserWorld() { + void testGetBalanceUserWorld() { assertEquals(0D, bm.getBalance(user, world).getValue(), 0D); } @@ -223,23 +169,23 @@ public void testGetBalanceUserWorld() { * Test method for {@link world.bentobox.bank.BankManager#getHistory(world.bentobox.bentobox.database.objects.Island)}. */ @Test - public void testGetHistory() { + void testGetHistory() { assertTrue(bm.getHistory(island).isEmpty()); } /** - * Test method for {@link world.bentobox.bank.BankManager#getBalances(World)}. + * Test method for {@link world.bentobox.bank.BankManager#getBalances(org.bukkit.World)}. */ @Test - public void testGetBalances() { + void testGetBalances() { assertTrue(bm.getBalances(world).isEmpty()); } /** - * Test method for {@link world.bentobox.bank.BankManager#set(world.bentobox.bentobox.api.user.User, java.lang.String, double, double, world.bentobox.bank.data.TxType)}. + * Test method for {@link world.bentobox.bank.BankManager#set(world.bentobox.bentobox.api.user.User, java.lang.String, world.bentobox.bank.data.Money, world.bentobox.bank.data.Money, world.bentobox.bank.data.TxType)}. */ @Test - public void testSet() { + void testSet() { String islandID = ""; for (TxType type : TxType.values()) { bm.set(user, islandID, new Money(10), new Money(100), type).thenAccept(r -> assertEquals(BankResponse.SUCCESS, r)); @@ -250,12 +196,12 @@ public void testSet() { * Test method for {@link world.bentobox.bank.BankManager#onIslandDelete(world.bentobox.bentobox.api.events.island.IslandEvent.IslandPreclearEvent)}. */ @Test - public void testOnIslandDelete() { + void testOnIslandDelete() { IslandBaseEvent e = new IslandEvent.IslandEventBuilder().oldIsland(island).reason(Reason.PRECLEAR).island(island).build(); if (e.getNewEvent().isPresent()) { e = e.getNewEvent().get(); } - bm.onIslandDelete((IslandPreclearEvent)e); + bm.onIslandDelete((IslandPreclearEvent) e); verify(h).deleteID(uniqueId); } @@ -263,7 +209,7 @@ public void testOnIslandDelete() { * Test method for {@link world.bentobox.bank.BankManager#calculateInterest(world.bentobox.bank.data.BankAccounts)}. */ @Test - public void testOnCalculateInterestZeroBalance() { + void testOnCalculateInterestZeroBalance() { BankAccounts ba = new BankAccounts(); assertEquals(0D, bm.calculateInterest(ba).getValue(), 0D); } @@ -272,7 +218,7 @@ public void testOnCalculateInterestZeroBalance() { * Test method for {@link world.bentobox.bank.BankManager#calculateInterest(world.bentobox.bank.data.BankAccounts)}. */ @Test - public void testOnCalculateInterestOneYear10() { + void testOnCalculateInterestOneYear10() { calculate(10, 11051.56D, BankManager.MILLISECONDS_IN_YEAR); BankAccounts ba = new BankAccounts(); settings.setInterestRate(10); // 10% @@ -285,15 +231,15 @@ public void testOnCalculateInterestOneYear10() { * Test method for {@link world.bentobox.bank.BankManager#calculateInterest(world.bentobox.bank.data.BankAccounts)}. */ @Test - public void testOnCalculateInterestOneDay10() { - calculate(10, 10002.74D, (long)24 * 60 * 60 * 1000); + void testOnCalculateInterestOneDay10() { + calculate(10, 10002.74D, (long) 24 * 60 * 60 * 1000); } /** * Test method for {@link world.bentobox.bank.BankManager#calculateInterest(world.bentobox.bank.data.BankAccounts)}. */ @Test - public void testOnCalculateInterestOneYear25() { + void testOnCalculateInterestOneYear25() { calculate(25, 12839.16D, BankManager.MILLISECONDS_IN_YEAR); } @@ -301,17 +247,16 @@ public void testOnCalculateInterestOneYear25() { * Test method for {@link world.bentobox.bank.BankManager#calculateInterest(world.bentobox.bank.data.BankAccounts)}. */ @Test - public void testOnCalculateInterestOneYear0() { + void testOnCalculateInterestOneYear0() { calculate(0, 10000D, BankManager.MILLISECONDS_IN_YEAR); } private void calculate(int i, double d, long milliseconds) { BankAccounts ba = new BankAccounts(); - settings.setInterestRate(i); // 10% + settings.setInterestRate(i); ba.setBalance(new Money(10000)); ba.setInterestLastPaid(System.currentTimeMillis() - milliseconds); assertEquals(d, bm.calculateInterest(ba).getValue(), 0D); - } } diff --git a/src/test/java/world/bentobox/bank/BankTest.java b/src/test/java/world/bentobox/bank/BankTest.java index 303b7aa..72318fc 100644 --- a/src/test/java/world/bentobox/bank/BankTest.java +++ b/src/test/java/world/bentobox/bank/BankTest.java @@ -1,266 +1,145 @@ package world.bentobox.bank; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; 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.verify; import static org.mockito.Mockito.when; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collections; -import java.util.Comparator; import java.util.Optional; -import java.util.UUID; +import java.util.concurrent.CompletableFuture; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; -import java.util.logging.Logger; -import org.bukkit.Bukkit; -import org.bukkit.Server; -import org.bukkit.UnsafeValues; -import org.bukkit.World; -import org.bukkit.entity.Player; -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.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; +import org.mockito.MockedStatic; 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.Settings; import world.bentobox.bentobox.api.addons.AddonDescription; 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.DatabaseSetup.DatabaseType; -import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.database.AbstractDatabaseHandler; +import world.bentobox.bentobox.database.DatabaseSetup; import world.bentobox.bentobox.hooks.VaultHook; import world.bentobox.bentobox.managers.AddonsManager; import world.bentobox.bentobox.managers.CommandsManager; -import world.bentobox.bentobox.managers.FlagsManager; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; -import world.bentobox.bentobox.managers.PlaceholdersManager; +/** + * Tests for {@link Bank}. + */ +class BankTest extends CommonTestSetup { -@SuppressWarnings("deprecation") -@RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, IslandsManager.class }) -public class BankTest { - - private static File jFile; - @Mock - private User user; - @Mock - private IslandsManager im; - @Mock - private Island island; - @Mock - private BentoBox plugin; - @Mock - private FlagsManager fm; @Mock private GameModeAddon gameMode; @Mock private AddonsManager am; @Mock - private BukkitScheduler scheduler; - - @Mock - private Settings pluginSettings; - - private Bank addon; - - @Mock - private Logger logger; - @Mock - private PlaceholdersManager phm; - @Mock private CompositeCommand cmd; @Mock private CompositeCommand adminCmd; @Mock - private World world; - private UUID uuid; - - @Mock - private PluginManager pim; - @Mock private VaultHook vh; - @BeforeClass - public static void beforeClass() throws IOException { - // Make the addon jar - jFile = new File("addon.jar"); - // Copy over config file from src folder - Path fromPath = Paths.get("src/main/resources/config.yml"); - Path path = Paths.get("config.yml"); - Files.copy(fromPath, path); - try (JarOutputStream tempJarOutputStream = new JarOutputStream(new FileOutputStream(jFile))) { - //Added the new files to the jar. - try (FileInputStream fis = new FileInputStream(path.toFile())) { - byte[] buffer = new byte[1024]; - int bytesRead = 0; - JarEntry entry = new JarEntry(path.toString()); - tempJarOutputStream.putNextEntry(entry); - while((bytesRead = fis.read(buffer)) != -1) { - tempJarOutputStream.write(buffer, 0, bytesRead); - } - } - } - } + private Bank addon; + private File jFile; + private MockedStatic mockDb; - @Before + @SuppressWarnings("unchecked") + @Override + @BeforeEach public void setUp() throws Exception { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); - // Set up plugin - Whitebox.setInternalState(BentoBox.class, "instance", plugin); + super.setUp(); - // The database type has to be created one line before the thenReturn() to work! - DatabaseType value = DatabaseType.JSON; - when(plugin.getSettings()).thenReturn(pluginSettings); - when(pluginSettings.getDatabaseType()).thenReturn(value); + // Database mock + AbstractDatabaseHandler h = mock(AbstractDatabaseHandler.class); + mockDb = Mockito.mockStatic(DatabaseSetup.class); + DatabaseSetup dbSetup = mock(DatabaseSetup.class); + mockDb.when(DatabaseSetup::getDatabase).thenReturn(dbSetup); + when(dbSetup.getHandler(any())).thenReturn(h); + when(h.saveObject(any())).thenReturn(CompletableFuture.completedFuture(true)); // Command manager CommandsManager cm = mock(CommandsManager.class); when(plugin.getCommandsManager()).thenReturn(cm); - // Player - Player p = mock(Player.class); - when(user.isOp()).thenReturn(false); - uuid = UUID.randomUUID(); - when(user.getUniqueId()).thenReturn(uuid); - when(user.getPlayer()).thenReturn(p); - when(user.getName()).thenReturn("tastybento"); - User.setPlugin(plugin); - - // Island World Manager - IslandWorldManager iwm = mock(IslandWorldManager.class); - when(plugin.getIWM()).thenReturn(iwm); - - // Player has island to begin with - when(im.getIsland(any(), any(UUID.class))).thenReturn(island); - when(plugin.getIslands()).thenReturn(im); - - // Locales - // Return the reference (USE THIS IN THE FUTURE) - when(user.getTranslation(anyString())).thenAnswer((Answer) invocation -> invocation.getArgument(0, String.class)); - - // Server - Server server = mock(Server.class); - when(Bukkit.getServer()).thenReturn(server); - when(Bukkit.getLogger()).thenReturn(Logger.getAnonymousLogger()); - when(Bukkit.getPluginManager()).thenReturn(mock(PluginManager.class)); - - // Addon - addon = new Bank(); - File dataFolder = new File("addons/Bank"); - addon.setDataFolder(dataFolder); - addon.setFile(jFile); - AddonDescription desc = new AddonDescription.Builder("bentobox", "Bank", "1.3").description("test").authors("tastybento").build(); - addon.setDescription(desc); - // Addons manager + // Addons manager - one game mode (BSkyBlock) when(plugin.getAddonsManager()).thenReturn(am); - // One game mode when(am.getGameModeAddons()).thenReturn(Collections.singletonList(gameMode)); - AddonDescription desc2 = new AddonDescription.Builder("bentobox", "BSkyBlock", "1.3").description("test").authors("tasty").build(); + AddonDescription desc2 = new AddonDescription.Builder("bentobox", "BSkyBlock", "1.3").description("test") + .authors("tasty").build(); when(gameMode.getDescription()).thenReturn(desc2); when(gameMode.getOverWorld()).thenReturn(world); - - // Player command - @NonNull - Optional opCmd = Optional.of(cmd); - when(gameMode.getPlayerCommand()).thenReturn(opCmd); - // Admin command - Optional opAdminCmd = Optional.of(adminCmd); - when(gameMode.getAdminCommand()).thenReturn(opAdminCmd); + when(gameMode.getPlayerCommand()).thenReturn(Optional.of(cmd)); + when(gameMode.getAdminCommand()).thenReturn(Optional.of(adminCmd)); // Flags manager when(plugin.getFlagsManager()).thenReturn(fm); when(fm.getFlags()).thenReturn(Collections.emptyList()); - - // Bukkit - when(Bukkit.getScheduler()).thenReturn(scheduler); - ItemMeta meta = mock(ItemMeta.class); - ItemFactory itemFactory = mock(ItemFactory.class); - when(itemFactory.getItemMeta(any())).thenReturn(meta); - when(Bukkit.getItemFactory()).thenReturn(itemFactory); - UnsafeValues unsafe = mock(UnsafeValues.class); - when(unsafe.getDataVersion()).thenReturn(777); - when(Bukkit.getUnsafe()).thenReturn(unsafe); - when(Bukkit.getPluginManager()).thenReturn(pim); - - // placeholders + // Placeholders when(plugin.getPlaceholdersManager()).thenReturn(phm); // World when(world.getName()).thenReturn("bskyblock-world"); - // Island - when(island.getWorld()).thenReturn(world); - when(island.getOwner()).thenReturn(uuid); // Vault when(plugin.getVault()).thenReturn(Optional.of(vh)); - } - /** - * @throws java.lang.Exception - */ - @After - public void tearDown() throws Exception { - deleteAll(new File("database")); + // Build the addon jar containing the real config.yml + jFile = new File("addon.jar"); + String configYml = new String(Files.readAllBytes(Paths.get("src/main/resources/config.yml")), + StandardCharsets.UTF_8); + try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(jFile))) { + addJarEntry(jos, "config.yml", configYml); + } + + addon = new Bank(); + addon.setDataFolder(new File("addons/Bank")); + addon.setFile(jFile); + AddonDescription desc = new AddonDescription.Builder("bentobox", "Bank", "1.3").description("test") + .authors("tastybento").build(); + addon.setDescription(desc); } - @AfterClass - public static void cleanUp() throws Exception { + @Override + @AfterEach + public void tearDown() throws Exception { + if (mockDb != null) { + mockDb.closeOnDemand(); + } + super.tearDown(); new File("addon.jar").delete(); new File("config.yml").delete(); deleteAll(new File("addons")); } - private static void deleteAll(File file) throws IOException { - if (file.exists()) { - Files.walk(file.toPath()) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); - } + private static void addJarEntry(JarOutputStream jos, String name, String content) throws Exception { + JarEntry entry = new JarEntry(name); + jos.putNextEntry(entry); + jos.write(content.getBytes(StandardCharsets.UTF_8)); + jos.closeEntry(); } @Test - public void testOnEnableNoVault() { + void testOnEnableNoVault() { when(plugin.getVault()).thenReturn(Optional.empty()); addon.onEnable(); verify(plugin).logError("[Bank] Vault is required - disabling Bank - please install the Vault plugin"); } @Test - public void testOnEnableNoPlaceholderManager() { + void testOnEnableNoPlaceholderManager() { when(plugin.getPlaceholdersManager()).thenReturn(null); addon.onEnable(); verify(plugin).log("[Bank] Hooking into BSkyBlock"); @@ -268,7 +147,7 @@ public void testOnEnableNoPlaceholderManager() { } @Test - public void testOnEnable() { + void testOnEnable() { addon.onEnable(); verify(plugin).log("[Bank] Hooking into BSkyBlock"); // Placeholders @@ -278,26 +157,21 @@ public void testOnEnable() { verify(phm).registerPlaceholder(eq(addon), eq("bskyblock_top_name_" + i), any()); verify(phm).registerPlaceholder(eq(addon), eq("bskyblock_top_value_" + i), any()); } - } - @Rule - public ExpectedException exceptionRule = ExpectedException.none(); - @Test - public void testGetSettings() { - exceptionRule.expect(NullPointerException.class); - exceptionRule.expectMessage("Settings not initialized?"); - addon.getSettings(); + void testGetSettings() { + NullPointerException ex = assertThrows(NullPointerException.class, () -> addon.getSettings()); + org.junit.jupiter.api.Assertions.assertEquals("Settings not initialized?", ex.getMessage()); } @Test - public void testGetVault() { + void testGetVault() { assertNull(addon.getVault()); } @Test - public void testGetBankManager() { + void testGetBankManager() { assertNull(addon.getBankManager()); } diff --git a/src/test/java/world/bentobox/bank/CommonTestSetup.java b/src/test/java/world/bentobox/bank/CommonTestSetup.java new file mode 100644 index 0000000..1393916 --- /dev/null +++ b/src/test/java/world/bentobox/bank/CommonTestSetup.java @@ -0,0 +1,221 @@ +package world.bentobox.bank; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Comparator; +import java.util.Optional; +import java.util.UUID; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Player.Spigot; +import org.bukkit.inventory.ItemFactory; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.plugin.PluginManager; +import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.util.Vector; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.mockbukkit.mockbukkit.MockBukkit; +import org.mockbukkit.mockbukkit.ServerMock; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.stubbing.Answer; + +import com.google.common.collect.ImmutableSet; + +import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.api.configuration.WorldSettings; +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.managers.BlueprintsManager; +import world.bentobox.bentobox.managers.FlagsManager; +import world.bentobox.bentobox.managers.HooksManager; +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.util.Util; + +/** + * Common test setup for Bank tests. Call super.setUp() in subclass @BeforeEach. + */ +public abstract class CommonTestSetup { + + protected UUID uuid = UUID.randomUUID(); + + @Mock + protected Player mockPlayer; + @Mock + protected PluginManager pim; + @Mock + protected ItemFactory itemFactory; + @Mock + protected Location location; + @Mock + protected World world; + @Mock + protected IslandWorldManager iwm; + @Mock + protected IslandsManager im; + @Mock + protected Island island; + @Mock + protected BentoBox plugin; + @Mock + protected PlayerInventory inv; + @Mock + protected Notifier notifier; + @Mock + protected FlagsManager fm; + @Mock + protected Spigot spigot; + @Mock + protected HooksManager hooksManager; + @Mock + protected BlueprintsManager bm; + @Mock + protected BukkitScheduler sch; + @Mock + protected LocalesManager lm; + @Mock + protected PlaceholdersManager phm; + + protected ServerMock server; + protected MockedStatic mockedBukkit; + protected MockedStatic mockedUtil; + protected AutoCloseable closeable; + + @BeforeEach + @SuppressWarnings("java:S1130") + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + server = MockBukkit.mock(); + + // Inject BentoBox singleton + WhiteBox.setInternalState(BentoBox.class, "instance", plugin); + + // Force Tag static fields to initialise under the real server + @SuppressWarnings("unused") + var unusedTagRef = org.bukkit.Tag.LEAVES; + + // Static Bukkit mock + mockedBukkit = Mockito.mockStatic(Bukkit.class, Mockito.RETURNS_DEEP_STUBS); + mockedBukkit.when(Bukkit::getMinecraftVersion).thenReturn("1.21.10"); + mockedBukkit.when(Bukkit::getBukkitVersion).thenReturn(""); + mockedBukkit.when(Bukkit::getPluginManager).thenReturn(pim); + mockedBukkit.when(Bukkit::getItemFactory).thenReturn(itemFactory); + mockedBukkit.when(Bukkit::getServer).thenReturn(server); + mockedBukkit.when(Bukkit::getScheduler).thenReturn(sch); + + // Location + when(location.getWorld()).thenReturn(world); + when(location.getBlockX()).thenReturn(0); + when(location.getBlockY()).thenReturn(0); + when(location.getBlockZ()).thenReturn(0); + when(location.toVector()).thenReturn(new Vector(0, 0, 0)); + when(location.clone()).thenReturn(location); + + // PlayersManager + PlayersManager pm = mock(PlayersManager.class); + when(plugin.getPlayers()).thenReturn(pm); + Players players = mock(Players.class); + when(players.getMetaData()).thenReturn(Optional.empty()); + when(pm.getPlayer(any(UUID.class))).thenReturn(players); + + // Player + when(mockPlayer.getUniqueId()).thenReturn(uuid); + when(mockPlayer.getLocation()).thenReturn(location); + when(mockPlayer.getWorld()).thenReturn(world); + when(mockPlayer.getName()).thenReturn("tastybento"); + when(mockPlayer.getInventory()).thenReturn(inv); + when(mockPlayer.spigot()).thenReturn(spigot); + when(mockPlayer.getType()).thenReturn(EntityType.PLAYER); + + User.setPlugin(plugin); + User.clearUsers(); + User.getInstance(mockPlayer); + + // IWM + when(plugin.getIWM()).thenReturn(iwm); + when(iwm.inWorld(any(Location.class))).thenReturn(true); + when(iwm.inWorld(any(World.class))).thenReturn(true); + when(iwm.getFriendlyName(any())).thenReturn("Bank"); + when(iwm.getAddon(any())).thenReturn(Optional.empty()); + + // WorldSettings + WorldSettings worldSet = new TestWorldSettings(); + when(iwm.getWorldSettings(any())).thenReturn(worldSet); + + // IslandsManager + when(plugin.getIslands()).thenReturn(im); + when(im.getProtectedIslandAt(any())).thenReturn(Optional.of(island)); + when(island.isAllowed(any())).thenReturn(false); + when(island.isAllowed(any(User.class), any())).thenReturn(false); + when(island.getOwner()).thenReturn(uuid); + when(island.getMemberSet()).thenReturn(ImmutableSet.of(uuid)); + + // Locales & Placeholders + when(lm.get(any(), any())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); + when(plugin.getPlaceholdersManager()).thenReturn(phm); + when(phm.replacePlaceholders(any(), any())).thenAnswer((Answer) invocation -> invocation.getArgument(1, String.class)); + when(plugin.getLocalesManager()).thenReturn(lm); + + // Notifier + when(plugin.getNotifier()).thenReturn(notifier); + + // Logger — Addon.getLogger() delegates to plugin.getLogger() + when(plugin.getLogger()).thenReturn(Logger.getLogger("Bank-test")); + + // BentoBox settings + world.bentobox.bentobox.Settings settings = new world.bentobox.bentobox.Settings(); + when(plugin.getSettings()).thenReturn(settings); + + // Util static mock + mockedUtil = Mockito.mockStatic(Util.class, Mockito.CALLS_REAL_METHODS); + mockedUtil.when(() -> Util.getWorld(any())).thenReturn(mock(World.class)); + Util.setPlugin(plugin); + mockedUtil.when(() -> Util.findFirstMatchingEnum(any(), any())).thenCallRealMethod(); + + // Hooks + when(hooksManager.getHook(anyString())).thenReturn(Optional.empty()); + when(plugin.getHooks()).thenReturn(hooksManager); + + // BlueprintsManager + when(plugin.getBlueprintsManager()).thenReturn(bm); + } + + @AfterEach + public void tearDown() throws Exception { + mockedBukkit.closeOnDemand(); + mockedUtil.closeOnDemand(); + closeable.close(); + MockBukkit.unmock(); + User.clearUsers(); + Mockito.framework().clearInlineMocks(); + deleteAll(new File("database")); + deleteAll(new File("database_backup")); + } + + protected static void deleteAll(File file) throws IOException { + if (file.exists()) { + Files.walk(file.toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete); + } + } +} diff --git a/src/test/java/world/bentobox/bank/PhManagerTest.java b/src/test/java/world/bentobox/bank/PhManagerTest.java index e31100c..6819ce8 100644 --- a/src/test/java/world/bentobox/bank/PhManagerTest.java +++ b/src/test/java/world/bentobox/bank/PhManagerTest.java @@ -1,8 +1,8 @@ package world.bentobox.bank; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyString; @@ -17,18 +17,16 @@ import java.util.Optional; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.Location; 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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; 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.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; +import org.mockito.quality.Strictness; import world.bentobox.bank.data.AccountHistory; import world.bentobox.bank.data.Money; @@ -37,7 +35,6 @@ import world.bentobox.bentobox.api.addons.AddonDescription; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.user.User; -import world.bentobox.bentobox.database.DatabaseSetup; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.hooks.VaultHook; import world.bentobox.bentobox.managers.IslandsManager; @@ -48,9 +45,9 @@ * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, DatabaseSetup.class, IslandsManager.class }) -public class PhManagerTest { +@ExtendWith(MockitoExtension.class) +@MockitoSettings(strictness = Strictness.LENIENT) +class PhManagerTest { // Class under test private PhManager pm; @@ -78,11 +75,8 @@ public class PhManagerTest { @Mock private PlayersManager plm; - @Before + @BeforeEach public void setUp() { - - PowerMockito.mockStatic(IslandsManager.class, Mockito.RETURNS_MOCKS); - AddonDescription desc = new AddonDescription.Builder("main", "AcidIsland", "1.0.2").build(); when(gm.getDescription()).thenReturn(desc); when(addon.getPlugin()).thenReturn(plugin); @@ -119,16 +113,16 @@ public void setUp() { * Test method for {@link world.bentobox.bank.PhManager#registerPlaceholders(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test - public void testRegisterPlaceholdersNoPHM() { + void testRegisterPlaceholdersNoPHM() { when(plugin.getPlaceholdersManager()).thenReturn(null); assertFalse(pm.registerPlaceholders(gm)); - } + /** * Test method for {@link world.bentobox.bank.PhManager#registerPlaceholders(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test - public void testRegisterPlaceholders() { + void testRegisterPlaceholders() { assertTrue(pm.registerPlaceholders(gm)); verify(phm).registerPlaceholder(eq(addon), eq("acidisland_island_balance"), any()); for (int i = 1; i < 11; i++) { @@ -140,10 +134,10 @@ public void testRegisterPlaceholders() { } /** - * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User)}. + * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User, boolean, boolean)}. */ @Test - public void testGetVisitedIslandBalanceWrongWorld() { + void testGetVisitedIslandBalanceWrongWorld() { when(gm.inWorld(world)).thenReturn(false); assertEquals("$0.0", pm.getVisitedIslandBalance(gm, user, false, false)); assertEquals("$0.0", pm.getVisitedIslandBalance(gm, user, true, false)); @@ -152,10 +146,10 @@ public void testGetVisitedIslandBalanceWrongWorld() { } /** - * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User)}. + * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User, boolean, boolean)}. */ @Test - public void testGetVisitedIslandBalanceNoIsland() { + void testGetVisitedIslandBalanceNoIsland() { when(im.getIslandAt(location)).thenReturn(Optional.empty()); assertEquals("$0.0", pm.getVisitedIslandBalance(gm, user, false, false)); assertEquals("$0.0", pm.getVisitedIslandBalance(gm, user, true, false)); @@ -164,10 +158,10 @@ public void testGetVisitedIslandBalanceNoIsland() { } /** - * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User)}. + * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User, boolean, boolean)}. */ @Test - public void testGetVisitedIslandBalance() { + void testGetVisitedIslandBalance() { assertEquals("$1234.56", pm.getVisitedIslandBalance(gm, user, false, false)); assertEquals("1.2k", pm.getVisitedIslandBalance(gm, user, true, false)); assertEquals("1234.56", pm.getVisitedIslandBalance(gm, user, false, true)); @@ -175,39 +169,38 @@ public void testGetVisitedIslandBalance() { } /** - * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User)}. + * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User, boolean, boolean)}. */ @Test - public void testGetVisitedIslandBalanceLargest() { + void testGetVisitedIslandBalanceLargest() { when(bm.getBalance(island)).thenReturn(new Money(Double.MAX_VALUE)); assertEquals("9223372T", pm.getVisitedIslandBalance(gm, user, true, false)); assertEquals("1.7976931348623157E308", pm.getVisitedIslandBalance(gm, user, true, true)); } /** - * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User)}. + * Test method for {@link world.bentobox.bank.PhManager#getVisitedIslandBalance(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.api.user.User, boolean, boolean)}. */ @Test - public void testGetVisitedIslandBalanceBig() { + void testGetVisitedIslandBalanceBig() { when(bm.getBalance(island)).thenReturn(new Money(123456789D)); assertEquals("123.5M", pm.getVisitedIslandBalance(gm, user, true, false)); assertEquals("1.23456789E8", pm.getVisitedIslandBalance(gm, user, true, true)); } - /** * Test method for {@link world.bentobox.bank.PhManager#getRankName(org.bukkit.World, int)}. */ @Test - public void testGetRankNameSub0() { - assertEquals("",pm.getRankName(world, -1)); + void testGetRankNameSub0() { + assertEquals("", pm.getRankName(world, -1)); } /** * Test method for {@link world.bentobox.bank.PhManager#getRankName(org.bukkit.World, int)}. */ @Test - public void testGetRankNameOverMax() { + void testGetRankNameOverMax() { assertEquals("", pm.getRankName(world, 100)); } @@ -215,7 +208,7 @@ public void testGetRankNameOverMax() { * Test method for {@link world.bentobox.bank.PhManager#getRankName(org.bukkit.World, int)}. */ @Test - public void testGetRankNameNone() { + void testGetRankNameNone() { for (int i = 1; i < 11; i++) { assertEquals("", pm.getRankName(world, i)); } @@ -225,7 +218,7 @@ public void testGetRankNameNone() { * Test method for {@link world.bentobox.bank.PhManager#getRankName(org.bukkit.World, int)}. */ @Test - public void testGetRankName() { + void testGetRankName() { assertEquals("", pm.getRankName(world, 5)); } @@ -233,7 +226,7 @@ public void testGetRankName() { * Test method for {@link world.bentobox.bank.PhManager#getRankIsland(org.bukkit.World, int)}. */ @Test - public void testGetRankIsland() { + void testGetRankIsland() { assertEquals("", pm.getRankIsland(world, 5)); } @@ -241,24 +234,24 @@ public void testGetRankIsland() { * Test method for {@link world.bentobox.bank.PhManager#getRankBalance(org.bukkit.World, int)}. */ @Test - public void testGetRankBalance() { + void testGetRankBalance() { assertEquals("", pm.getRankBalance(world, 5)); } /** - * Test method for {@link world.bentobox.bank.PhManager#checkCache(World, int)}. + * Test method for {@link world.bentobox.bank.PhManager#checkCache(org.bukkit.World, int)}. */ @Test - public void testCheckCache() { + void testCheckCache() { assertEquals(5, pm.checkCache(world, 5)); verify(bm).getBalances(world); } /** - * Test method for {@link world.bentobox.bank.PhManager#checkCache(World, int)}. + * Test method for {@link world.bentobox.bank.PhManager#checkCache(org.bukkit.World, int)}. */ @Test - public void testCheckCacheWithBalances() { + void testCheckCacheWithBalances() { map.put(UUID.randomUUID().toString(), new Money(123.45)); map.put(UUID.randomUUID().toString(), new Money(1230.45)); map.put(UUID.randomUUID().toString(), new Money(12300.45)); @@ -275,26 +268,26 @@ public void testCheckCacheWithBalances() { when(bm.getBalances(world)).thenReturn(map); for (int i = 1; i < 11; i++) { pm.checkCache(world, i); - assertEquals(pm.getBalances().get(i-1), "$" + map.get(pm.getNames().get(i - 1)).getValue()); - assertEquals(pm.getBalances().get(i-1), "$" + map.get(pm.getIslands().get(i - 1)).getValue()); + assertEquals(pm.getBalances().get(i - 1), "$" + map.get(pm.getNames().get(i - 1)).getValue()); + assertEquals(pm.getBalances().get(i - 1), "$" + map.get(pm.getIslands().get(i - 1)).getValue()); } } /** - * Test method for {@link world.bentobox.bank.PhManager#checkCache(World, int)}. + * Test method for {@link world.bentobox.bank.PhManager#checkCache(org.bukkit.World, int)}. */ @Test - public void testCheckCacheNoNamesChange() { + void testCheckCacheNoNamesChange() { pm.setLastSorted(System.currentTimeMillis() + 10000); assertEquals(5, pm.checkCache(world, 5)); verify(bm).getBalances(world); } /** - * Test method for {@link world.bentobox.bank.PhManager#checkCache(World, int)}. + * Test method for {@link world.bentobox.bank.PhManager#checkCache(org.bukkit.World, int)}. */ @Test - public void testCheckCacheNoChange() { + void testCheckCacheNoChange() { // Cache should not refresh because there is a name and the time is in the future pm.setNames(Collections.singletonList("tastybento")); pm.setLastSorted(System.currentTimeMillis() + 10000); @@ -304,10 +297,10 @@ public void testCheckCacheNoChange() { } /** - * Test method for {@link world.bentobox.bank.PhManager#registerPlaceholders(world.bentobox.bentobox.api.addons.GameModeAddon)}. + * Test method for {@link world.bentobox.bank.PhManager#checkCache(org.bukkit.World, int)}. */ @Test - public void testCheckCacheOutOfBounds() { + void testCheckCacheOutOfBounds() { assertEquals(1, pm.checkCache(world, 0)); assertEquals(10, pm.checkCache(world, 100)); } @@ -316,7 +309,7 @@ public void testCheckCacheOutOfBounds() { * Test method for {@link world.bentobox.bank.PhManager#getLatestTransaction(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetLatestTransactionDeposit() { + void testGetLatestTransactionDeposit() { AccountHistory ah = new AccountHistory(System.currentTimeMillis(), "tastybento", 500.0, TxType.DEPOSIT); when(bm.getLatestHistory(eq(island))).thenReturn(ah); assertEquals("tastybento Deposited $500.0", pm.getLatestTransaction(user, world)); @@ -326,7 +319,7 @@ public void testGetLatestTransactionDeposit() { * Test method for {@link world.bentobox.bank.PhManager#getLatestTransaction(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetLatestTransactionWithdraw() { + void testGetLatestTransactionWithdraw() { AccountHistory ah = new AccountHistory(System.currentTimeMillis(), "tastybento", 200.0, TxType.WITHDRAW); when(bm.getLatestHistory(eq(island))).thenReturn(ah); assertEquals("tastybento Withdrew $200.0", pm.getLatestTransaction(user, world)); @@ -336,7 +329,7 @@ public void testGetLatestTransactionWithdraw() { * Test method for {@link world.bentobox.bank.PhManager#getLatestTransaction(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetLatestTransactionNoHistory() { + void testGetLatestTransactionNoHistory() { when(bm.getLatestHistory(eq(island))).thenReturn(null); assertEquals("", pm.getLatestTransaction(user, world)); } @@ -345,7 +338,7 @@ public void testGetLatestTransactionNoHistory() { * Test method for {@link world.bentobox.bank.PhManager#getLatestTransaction(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetLatestTransactionNoIsland() { + void testGetLatestTransactionNoIsland() { when(im.getIsland(any(World.class), any(User.class))).thenReturn(null); assertEquals("", pm.getLatestTransaction(user, world)); } @@ -354,7 +347,7 @@ public void testGetLatestTransactionNoIsland() { * Test method for {@link world.bentobox.bank.PhManager#getLatestTransaction(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetLatestTransactionNullUser() { + void testGetLatestTransactionNullUser() { assertEquals("", pm.getLatestTransaction(null, world)); } @@ -362,7 +355,7 @@ public void testGetLatestTransactionNullUser() { * Test method for {@link world.bentobox.bank.PhManager#getLatestTransaction(world.bentobox.bentobox.api.user.User, org.bukkit.World)}. */ @Test - public void testGetLatestTransactionNotPlayer() { + void testGetLatestTransactionNotPlayer() { when(user.isPlayer()).thenReturn(false); assertEquals("", pm.getLatestTransaction(user, world)); } @@ -372,7 +365,7 @@ public void testGetLatestTransactionNotPlayer() { * Verifies that the latest_transaction placeholder is registered. */ @Test - public void testRegisterPlaceholdersLatestTransaction() { + void testRegisterPlaceholdersLatestTransaction() { assertTrue(pm.registerPlaceholders(gm)); verify(phm).registerPlaceholder(eq(addon), eq("acidisland_latest_transaction"), any()); } diff --git a/src/test/java/world/bentobox/bank/TestWorldSettings.java b/src/test/java/world/bentobox/bank/TestWorldSettings.java new file mode 100644 index 0000000..0ce8699 --- /dev/null +++ b/src/test/java/world/bentobox/bank/TestWorldSettings.java @@ -0,0 +1,345 @@ +package world.bentobox.bank; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.Difficulty; +import org.bukkit.GameMode; +import org.bukkit.entity.EntityType; +import org.eclipse.jdt.annotation.NonNull; + +import world.bentobox.bentobox.api.configuration.WorldSettings; +import world.bentobox.bentobox.api.flags.Flag; + +/** + * Minimal WorldSettings implementation for use in tests. + */ +public class TestWorldSettings implements WorldSettings { + + private long epoch; + + @Override + public GameMode getDefaultGameMode() { + return GameMode.SURVIVAL; + } + + @SuppressWarnings("removal") + @Override + public Map getDefaultIslandFlags() { + return Collections.emptyMap(); + } + + @SuppressWarnings("removal") + @Override + public Map getDefaultIslandSettings() { + return Collections.emptyMap(); + } + + @Override + public Difficulty getDifficulty() { + return Difficulty.NORMAL; + } + + @Override + public void setDifficulty(Difficulty difficulty) { + // unused + } + + @Override + public String getFriendlyName() { + return "Bank"; + } + + @Override + public int getIslandDistance() { + return 0; + } + + @Override + public int getIslandHeight() { + return 0; + } + + @Override + public int getIslandProtectionRange() { + return 0; + } + + @Override + public int getIslandStartX() { + return 0; + } + + @Override + public int getIslandStartZ() { + return 0; + } + + @Override + public int getIslandXOffset() { + return 0; + } + + @Override + public int getIslandZOffset() { + return 0; + } + + @Override + public List getIvSettings() { + return Collections.emptyList(); + } + + @Override + public int getMaxHomes() { + return 3; + } + + @Override + public int getMaxIslands() { + return 0; + } + + @Override + public int getMaxTeamSize() { + return 4; + } + + @Override + public int getNetherSpawnRadius() { + return 10; + } + + @Override + public String getPermissionPrefix() { + return "bank."; + } + + @Override + public Set getRemoveMobsWhitelist() { + return Collections.emptySet(); + } + + @Override + public int getSeaHeight() { + return 0; + } + + @Override + public List getHiddenFlags() { + return Collections.emptyList(); + } + + @Override + public List getVisitorBannedCommands() { + return Collections.emptyList(); + } + + @Override + public Map getWorldFlags() { + return new HashMap<>(); + } + + @Override + public String getWorldName() { + return "bank-world"; + } + + @Override + public boolean isDragonSpawn() { + return false; + } + + @Override + public boolean isEndGenerate() { + return true; + } + + @Override + public boolean isEndIslands() { + return true; + } + + @Override + public boolean isNetherGenerate() { + return true; + } + + @Override + public boolean isNetherIslands() { + return true; + } + + @Override + public boolean isOnJoinResetEnderChest() { + return false; + } + + @Override + public boolean isOnJoinResetInventory() { + return false; + } + + @Override + public boolean isOnJoinResetMoney() { + return false; + } + + @Override + public boolean isOnJoinResetHealth() { + return false; + } + + @Override + public boolean isOnJoinResetHunger() { + return false; + } + + @Override + public boolean isOnJoinResetXP() { + return false; + } + + @Override + public @NonNull List getOnJoinCommands() { + return Collections.emptyList(); + } + + @Override + public boolean isOnLeaveResetEnderChest() { + return false; + } + + @Override + public boolean isOnLeaveResetInventory() { + return false; + } + + @Override + public boolean isOnLeaveResetMoney() { + return false; + } + + @Override + public boolean isOnLeaveResetHealth() { + return false; + } + + @Override + public boolean isOnLeaveResetHunger() { + return false; + } + + @Override + public boolean isOnLeaveResetXP() { + return false; + } + + @Override + public @NonNull List getOnLeaveCommands() { + return Collections.emptyList(); + } + + @Override + public boolean isUseOwnGenerator() { + return false; + } + + @Override + public boolean isWaterUnsafe() { + return false; + } + + @Override + public List getGeoLimitSettings() { + return Collections.emptyList(); + } + + @Override + public int getResetLimit() { + return 0; + } + + @Override + public long getResetEpoch() { + return epoch; + } + + @Override + public void setResetEpoch(long timestamp) { + this.epoch = timestamp; + } + + @Override + public boolean isTeamJoinDeathReset() { + return false; + } + + @Override + public int getDeathsMax() { + return 0; + } + + @Override + public boolean isDeathsCounted() { + return true; + } + + @Override + public boolean isDeathsResetOnNewIsland() { + return true; + } + + @Override + public boolean isAllowSetHomeInNether() { + return false; + } + + @Override + public boolean isAllowSetHomeInTheEnd() { + return false; + } + + @Override + public boolean isRequireConfirmationToSetHomeInNether() { + return false; + } + + @Override + public boolean isRequireConfirmationToSetHomeInTheEnd() { + return false; + } + + @Override + public int getBanLimit() { + return 10; + } + + @Override + public boolean isLeaversLoseReset() { + return true; + } + + @Override + public boolean isKickedKeepInventory() { + return true; + } + + @Override + public boolean isCreateIslandOnFirstLoginEnabled() { + return false; + } + + @Override + public int getCreateIslandOnFirstLoginDelay() { + return 0; + } + + @Override + public boolean isCreateIslandOnFirstLoginAbortOnLogout() { + return false; + } +} diff --git a/src/test/java/world/bentobox/bank/WhiteBox.java b/src/test/java/world/bentobox/bank/WhiteBox.java new file mode 100644 index 0000000..84e614c --- /dev/null +++ b/src/test/java/world/bentobox/bank/WhiteBox.java @@ -0,0 +1,13 @@ +package world.bentobox.bank; + +public class WhiteBox { + public static void setInternalState(Class targetClass, String fieldName, Object value) { + try { + java.lang.reflect.Field field = targetClass.getDeclaredField(fieldName); + field.setAccessible(true); + field.set(null, value); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException("Failed to set static field '" + fieldName + "' on class " + targetClass.getName(), e); + } + } +} diff --git a/src/test/java/world/bentobox/bank/commands/admin/AdminBalanceCommandTest.java b/src/test/java/world/bentobox/bank/commands/admin/AdminBalanceCommandTest.java index 7411ed4..85264b8 100644 --- a/src/test/java/world/bentobox/bank/commands/admin/AdminBalanceCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/admin/AdminBalanceCommandTest.java @@ -1,44 +1,31 @@ package world.bentobox.bank.commands.admin; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; 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 net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.data.Money; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.util.Util; @@ -46,51 +33,36 @@ * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ BentoBox.class, Util.class, Bukkit.class }) -public class AdminBalanceCommandTest { +class AdminBalanceCommandTest extends CommonTestSetup { @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @Mock private VaultHook vh; - // Class under test - private AdminBalanceCommand bc; @Mock private PlayersManager pm; + // Class under test + private AdminBalanceCommand bc; - @Before - public void setUp() { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); // Players @@ -100,39 +72,36 @@ public void setUp() { // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); EconomyResponse er = new EconomyResponse(0, 0, ResponseType.SUCCESS, ""); when(vh.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(er); - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); // Default 0 balance for unknown islands when(bankManager.getBalance(any())).thenReturn(new Money()); bc = new AdminBalanceCommand(ic); } - /** * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertFalse(bc.isOnlyPlayer()); assertEquals("bank.admin.balance", bc.getPermission()); assertEquals("bank.admin.balance.parameters", bc.getParameters()); assertEquals("bank.admin.balance.description", bc.getDescription()); - } /** * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsNoArgs() { + void testCanExecuteArgsNoArgs() { assertFalse(bc.canExecute(user, "balance", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -141,7 +110,7 @@ public void testCanExecuteArgsNoArgs() { * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(bc.canExecute(user, "balance", Collections.singletonList("tastybento"))); verify(user).sendMessage("general.errors.no-island"); @@ -151,7 +120,7 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteUnknownTarget() { + void testCanExecuteUnknownTarget() { when(pm.getUser(anyString())).thenReturn(null); assertFalse(bc.canExecute(user, "balance", Collections.singletonList("bonne"))); verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "bonne"); @@ -161,7 +130,7 @@ public void testCanExecuteUnknownTarget() { * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { // Should be ignored because this is an admin command when(island.isAllowed(eq(user), any())).thenReturn(false); assertTrue(bc.canExecute(user, "balance", Collections.singletonList("tastybento"))); @@ -171,7 +140,7 @@ public void testCanExecuteNoRank() { * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(bc.canExecute(user, "balance", Collections.singletonList("tastybento"))); } @@ -179,10 +148,9 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.admin.AdminBalanceCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { assertTrue(bc.execute(user, "balance", Collections.singletonList("tastybento"))); verify(user).sendMessage("bank.balance.island-balance", TextVariables.NUMBER, "0.0"); } - } diff --git a/src/test/java/world/bentobox/bank/commands/admin/AdminGiveCommandTest.java b/src/test/java/world/bentobox/bank/commands/admin/AdminGiveCommandTest.java index 7d0a7ae..f351bfe 100644 --- a/src/test/java/world/bentobox/bank/commands/admin/AdminGiveCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/admin/AdminGiveCommandTest.java @@ -1,13 +1,12 @@ package world.bentobox.bank.commands.admin; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -15,92 +14,69 @@ import java.util.Collections; import java.util.concurrent.CompletableFuture; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; import net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; import world.bentobox.bank.BankResponse; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.data.Money; import world.bentobox.bank.data.TxType; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest(BentoBox.class) -public class AdminGiveCommandTest { +class AdminGiveCommandTest extends CommonTestSetup { @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @Mock private VaultHook vh; - // Class under test - private AdminGiveCommand bc; @Mock private PlayersManager pm; + // Class under test + private AdminGiveCommand bc; - @Before - public void setUp() { - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); + when(user.getName()).thenReturn("tastybento"); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); // Players when(addon.getPlayers()).thenReturn(pm); when(pm.getUser("tastybento")).thenReturn(user); - when(user.getName()).thenReturn("tastybento"); // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); @@ -111,6 +87,9 @@ public void setUp() { // Default 0 balance for unknown islands when(bankManager.getBalance(any())).thenReturn(new Money()); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); + bc = new AdminGiveCommand(ic); } @@ -118,19 +97,18 @@ public void setUp() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertFalse(bc.isOnlyPlayer()); assertEquals("bank.admin.give", bc.getPermission()); assertEquals("bank.admin.give.parameters", bc.getParameters()); assertEquals("bank.admin.give.description", bc.getDescription()); - } /** * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsNoArgs() { + void testCanExecuteArgsNoArgs() { assertFalse(bc.canExecute(user, "give", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -139,7 +117,7 @@ public void testCanExecuteArgsNoArgs() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsOneArg() { + void testCanExecuteArgsOneArg() { assertFalse(bc.canExecute(user, "give", Collections.singletonList("tastybento"))); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -148,7 +126,7 @@ public void testCanExecuteArgsOneArg() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(bc.canExecute(user, "give", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("general.errors.no-island"); @@ -158,7 +136,7 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteUnknownTarget() { + void testCanExecuteUnknownTarget() { when(pm.getUser(anyString())).thenReturn(null); assertFalse(bc.canExecute(user, "give", Arrays.asList("bonne", "100"))); verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "bonne"); @@ -168,7 +146,7 @@ public void testCanExecuteUnknownTarget() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNotANumber() { + void testCanExecuteNotANumber() { assertFalse(bc.canExecute(user, "give", Arrays.asList("tastybento", "xxx"))); verify(user).sendMessage("bank.errors.must-be-a-number"); } @@ -177,7 +155,7 @@ public void testCanExecuteNotANumber() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNegativeNumber() { + void testCanExecuteNegativeNumber() { assertFalse(bc.canExecute(user, "give", Arrays.asList("tastybento", "-99"))); verify(user).sendMessage("bank.errors.value-must-be-positive"); } @@ -186,7 +164,7 @@ public void testCanExecuteNegativeNumber() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { // Should be ignored because this is an admin command when(island.isAllowed(eq(user), any())).thenReturn(false); assertTrue(bc.canExecute(user, "give", Arrays.asList("tastybento", "100"))); @@ -196,7 +174,7 @@ public void testCanExecuteNoRank() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(bc.canExecute(user, "give", Arrays.asList("tastybento", "100"))); } @@ -204,7 +182,7 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { assertTrue(bc.canExecute(user, "give", Arrays.asList("tastybento", "100"))); assertTrue(bc.execute(user, "give", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("bank.admin.give.success", @@ -216,7 +194,7 @@ public void testExecuteUserStringListOfString() { * Test method for {@link world.bentobox.bank.commands.admin.AdminGiveCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringError() { + void testExecuteUserStringListOfStringError() { when(bankManager.deposit(eq(user), any(), any(Money.class), eq(TxType.GIVE))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOAD_ERROR)); assertTrue(bc.execute(user, "give", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("bank.errors.bank-error"); diff --git a/src/test/java/world/bentobox/bank/commands/admin/AdminSetCommandTest.java b/src/test/java/world/bentobox/bank/commands/admin/AdminSetCommandTest.java index 120b5ca..771f4cc 100644 --- a/src/test/java/world/bentobox/bank/commands/admin/AdminSetCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/admin/AdminSetCommandTest.java @@ -1,13 +1,12 @@ package world.bentobox.bank.commands.admin; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -16,82 +15,60 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; import net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; import world.bentobox.bank.BankResponse; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.data.Money; import world.bentobox.bank.data.TxType; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest(BentoBox.class) -public class AdminSetCommandTest { +class AdminSetCommandTest extends CommonTestSetup { @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @Mock private VaultHook vh; - // Class under test - private AdminSetCommand bc; @Mock private PlayersManager pm; + // Class under test + private AdminSetCommand bc; - @Before - public void setUp() { - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); when(user.getName()).thenReturn("tastybento"); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); // Players @@ -101,7 +78,6 @@ public void setUp() { // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); @@ -113,6 +89,9 @@ public void setUp() { // Island when(island.getUniqueId()).thenReturn(UUID.randomUUID().toString()); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); + bc = new AdminSetCommand(ic); } @@ -120,19 +99,18 @@ public void setUp() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertFalse(bc.isOnlyPlayer()); assertEquals("bank.admin.set", bc.getPermission()); assertEquals("bank.admin.set.parameters", bc.getParameters()); assertEquals("bank.admin.set.description", bc.getDescription()); - } /** * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsNoArgs() { + void testCanExecuteArgsNoArgs() { assertFalse(bc.canExecute(user, "set", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -141,7 +119,7 @@ public void testCanExecuteArgsNoArgs() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsOneArg() { + void testCanExecuteArgsOneArg() { assertFalse(bc.canExecute(user, "set", Collections.singletonList("tastybento"))); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -150,7 +128,7 @@ public void testCanExecuteArgsOneArg() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(bc.canExecute(user, "set", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("general.errors.no-island"); @@ -160,7 +138,7 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteUnknownTarget() { + void testCanExecuteUnknownTarget() { when(pm.getUser(anyString())).thenReturn(null); assertFalse(bc.canExecute(user, "set", Arrays.asList("bonne", "100"))); verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "bonne"); @@ -170,7 +148,7 @@ public void testCanExecuteUnknownTarget() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNotANumber() { + void testCanExecuteNotANumber() { assertFalse(bc.canExecute(user, "set", Arrays.asList("tastybento", "xxx"))); verify(user).sendMessage("bank.errors.must-be-a-number"); } @@ -179,7 +157,7 @@ public void testCanExecuteNotANumber() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNegativeNumber() { + void testCanExecuteNegativeNumber() { assertFalse(bc.canExecute(user, "set", Arrays.asList("tastybento", "-99"))); verify(user).sendMessage("bank.errors.value-must-be-positive"); } @@ -188,7 +166,7 @@ public void testCanExecuteNegativeNumber() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { // Should be ignored because this is an admin command when(island.isAllowed(eq(user), any())).thenReturn(false); assertTrue(bc.canExecute(user, "set", Arrays.asList("tastybento", "100"))); @@ -198,7 +176,7 @@ public void testCanExecuteNoRank() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(bc.canExecute(user, "set", Arrays.asList("tastybento", "100"))); } @@ -206,7 +184,7 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { testCanExecuteSuccess(); assertTrue(bc.execute(user, "set", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("bank.admin.set.success", TextVariables.NAME, "tastybento", TextVariables.NUMBER, "100.0"); @@ -216,7 +194,7 @@ public void testExecuteUserStringListOfString() { * Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringError() { + void testExecuteUserStringListOfStringError() { testCanExecuteSuccess(); when(bankManager.set(eq(user), any(), any(), any(), eq(TxType.SET))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOAD_ERROR)); assertTrue(bc.execute(user, "set", Arrays.asList("tastybento", "100"))); diff --git a/src/test/java/world/bentobox/bank/commands/admin/AdminStatementCommandTest.java b/src/test/java/world/bentobox/bank/commands/admin/AdminStatementCommandTest.java index 5822c17..17b9727 100644 --- a/src/test/java/world/bentobox/bank/commands/admin/AdminStatementCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/admin/AdminStatementCommandTest.java @@ -1,46 +1,32 @@ package world.bentobox.bank.commands.admin; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; -import org.bukkit.Bukkit; -import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; -import org.eclipse.jdt.annotation.Nullable; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; 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 net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; -import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.Settings; +import world.bentobox.bank.CommonTestSetup; 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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.util.Util; @@ -48,54 +34,39 @@ * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, Util.class}) -public class AdminStatementCommandTest { +class AdminStatementCommandTest extends CommonTestSetup { @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @Mock private VaultHook vh; - // Class under test - private AdminStatementCommand bc; @Mock private PlayersManager pm; @Mock private Player player; - /** - */ - @Before - public void setUp() { - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + // Class under test + private AdminStatementCommand bc; + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); when(user.getPlayer()).thenReturn(player); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); // Players @@ -105,42 +76,34 @@ public void setUp() { // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); EconomyResponse er = new EconomyResponse(0, 0, ResponseType.SUCCESS, ""); when(vh.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(er); - // Settings - when(pluginMock.getSettings()).thenReturn(new Settings()); - - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); bc = new AdminStatementCommand(ic); } - /** * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertTrue(bc.isOnlyPlayer()); assertEquals("bank.admin.statement", bc.getPermission()); assertEquals("bank.admin.statement.parameters", bc.getParameters()); assertEquals("bank.admin.statement.description", bc.getDescription()); - } /** * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsNoArgs() { + void testCanExecuteArgsNoArgs() { assertFalse(bc.canExecute(user, "statement", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -149,7 +112,7 @@ public void testCanExecuteArgsNoArgs() { * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(bc.canExecute(user, "statement", Collections.singletonList("tastybento"))); verify(user).sendMessage("general.errors.no-island"); @@ -159,16 +122,17 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteUnknownTarget() { + void testCanExecuteUnknownTarget() { when(pm.getUser(anyString())).thenReturn(null); assertFalse(bc.canExecute(user, "statement", Collections.singletonList("bonne"))); - verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "bonne"); } + verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "bonne"); + } /** * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { // Should be ignored because this is an admin command when(island.isAllowed(eq(user), any())).thenReturn(false); assertTrue(bc.canExecute(user, "statement", Collections.singletonList("tastybento"))); @@ -178,7 +142,7 @@ public void testCanExecuteNoRank() { * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(bc.canExecute(user, "statement", Collections.singletonList("tastybento"))); } @@ -186,11 +150,10 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.admin.AdminStatementCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { assertTrue(bc.execute(user, "statement", Collections.singletonList("tastybento"))); verify(user).closeInventory(); verify(player).openInventory(any(Inventory.class)); } - } diff --git a/src/test/java/world/bentobox/bank/commands/admin/AdminTakeCommandTest.java b/src/test/java/world/bentobox/bank/commands/admin/AdminTakeCommandTest.java index 0cb94fe..4d80807 100644 --- a/src/test/java/world/bentobox/bank/commands/admin/AdminTakeCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/admin/AdminTakeCommandTest.java @@ -1,13 +1,12 @@ package world.bentobox.bank.commands.admin; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -15,93 +14,69 @@ import java.util.Collections; import java.util.concurrent.CompletableFuture; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; import net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; import world.bentobox.bank.BankResponse; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.data.Money; import world.bentobox.bank.data.TxType; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest(BentoBox.class) -public class AdminTakeCommandTest { +class AdminTakeCommandTest extends CommonTestSetup { @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @Mock private VaultHook vh; - // Class under test - private AdminTakeCommand bc; @Mock private PlayersManager pm; - /** - */ - @Before - public void setUp() { - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + // Class under test + private AdminTakeCommand bc; + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); + when(user.getName()).thenReturn("tastybento"); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); // Players when(addon.getPlayers()).thenReturn(pm); when(pm.getUser("tastybento")).thenReturn(user); - when(user.getName()).thenReturn("tastybento"); // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); @@ -112,6 +87,9 @@ public void setUp() { // set default balance to 0 for unknown island when(bankManager.getBalance(any())).thenReturn(new Money()); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); + bc = new AdminTakeCommand(ic); } @@ -119,19 +97,18 @@ public void setUp() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertFalse(bc.isOnlyPlayer()); assertEquals("bank.admin.take", bc.getPermission()); assertEquals("bank.admin.take.parameters", bc.getParameters()); assertEquals("bank.admin.take.description", bc.getDescription()); - } /** * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsNoArgs() { + void testCanExecuteArgsNoArgs() { assertFalse(bc.canExecute(user, "take", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -140,7 +117,7 @@ public void testCanExecuteArgsNoArgs() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgsOneArg() { + void testCanExecuteArgsOneArg() { assertFalse(bc.canExecute(user, "take", Collections.singletonList("tastybento"))); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -149,7 +126,7 @@ public void testCanExecuteArgsOneArg() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(bc.canExecute(user, "take", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("general.errors.no-island"); @@ -159,7 +136,7 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteUnknownTarget() { + void testCanExecuteUnknownTarget() { when(pm.getUser(anyString())).thenReturn(null); assertFalse(bc.canExecute(user, "take", Arrays.asList("bonne", "100"))); verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "bonne"); @@ -169,7 +146,7 @@ public void testCanExecuteUnknownTarget() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNotANumber() { + void testCanExecuteNotANumber() { assertFalse(bc.canExecute(user, "take", Arrays.asList("tastybento", "xxx"))); verify(user).sendMessage("bank.errors.must-be-a-number"); } @@ -178,7 +155,7 @@ public void testCanExecuteNotANumber() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNegativeNumber() { + void testCanExecuteNegativeNumber() { assertFalse(bc.canExecute(user, "take", Arrays.asList("tastybento", "-99"))); verify(user).sendMessage("bank.errors.value-must-be-positive"); } @@ -187,7 +164,7 @@ public void testCanExecuteNegativeNumber() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { // Should be ignored because this is an admin command when(island.isAllowed(eq(user), any())).thenReturn(false); assertTrue(bc.canExecute(user, "take", Arrays.asList("tastybento", "100"))); @@ -197,7 +174,7 @@ public void testCanExecuteNoRank() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(bc.canExecute(user, "take", Arrays.asList("tastybento", "100"))); } @@ -205,7 +182,7 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { testCanExecuteSuccess(); assertTrue(bc.execute(user, "take", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("bank.admin.give.success", @@ -217,7 +194,7 @@ public void testExecuteUserStringListOfString() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringLowBalance() { + void testExecuteUserStringListOfStringLowBalance() { testCanExecuteSuccess(); when(bankManager.withdraw(eq(user), any(), any(), eq(TxType.TAKE))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOW_BALANCE)); assertTrue(bc.execute(user, "take", Arrays.asList("tastybento", "100"))); @@ -228,11 +205,10 @@ public void testExecuteUserStringListOfStringLowBalance() { * Test method for {@link world.bentobox.bank.commands.admin.AdminTakeCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringError() { + void testExecuteUserStringListOfStringError() { when(bankManager.withdraw(eq(user), any(), any(), eq(TxType.TAKE))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOAD_ERROR)); assertTrue(bc.execute(user, "take", Arrays.asList("tastybento", "100"))); verify(user).sendMessage("bank.errors.bank-error"); } - } diff --git a/src/test/java/world/bentobox/bank/commands/user/BalanceCommandTest.java b/src/test/java/world/bentobox/bank/commands/user/BalanceCommandTest.java index 5524d4e..eb6a90c 100644 --- a/src/test/java/world/bentobox/bank/commands/user/BalanceCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/user/BalanceCommandTest.java @@ -1,66 +1,43 @@ package world.bentobox.bank.commands.user; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; 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 net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.data.Money; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ BentoBox.class, Util.class, Bukkit.class }) -public class BalanceCommandTest { +class BalanceCommandTest extends CommonTestSetup { @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @@ -68,40 +45,32 @@ public class BalanceCommandTest { private VaultHook vh; // Class under test private BalanceCommand bc; - /** - */ - @Before - public void setUp() { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); - // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); EconomyResponse er = new EconomyResponse(0, 0, ResponseType.SUCCESS, ""); when(vh.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(er); - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); when(bankManager.getBalance(any())).thenReturn(new Money()); @@ -112,7 +81,7 @@ public void setUp() { * Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertTrue(bc.isOnlyPlayer()); assertEquals("bank.user.balance", bc.getPermission()); assertEquals("bank.balance.description", bc.getDescription()); @@ -122,7 +91,7 @@ public void testSetup() { * Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgs() { + void testCanExecuteArgs() { assertFalse(bc.canExecute(user, "balance", Collections.singletonList("fff"))); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -131,7 +100,7 @@ public void testCanExecuteArgs() { * Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(bc.canExecute(user, "balance", Collections.emptyList())); verify(user).sendMessage("general.errors.no-island"); @@ -141,18 +110,17 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { when(island.isAllowed(eq(user), any())).thenReturn(false); assertFalse(bc.canExecute(user, "balance", Collections.emptyList())); verify(user).sendMessage("bank.errors.no-rank"); - } /** * Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(bc.canExecute(user, "balance", Collections.emptyList())); } @@ -160,7 +128,7 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { assertTrue(bc.execute(user, "balance", Collections.emptyList())); verify(user).sendMessage("bank.balance.island-balance", TextVariables.NUMBER, "0.0"); } diff --git a/src/test/java/world/bentobox/bank/commands/user/DepositCommandTest.java b/src/test/java/world/bentobox/bank/commands/user/DepositCommandTest.java index b7120f5..99eef24 100644 --- a/src/test/java/world/bentobox/bank/commands/user/DepositCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/user/DepositCommandTest.java @@ -1,12 +1,11 @@ package world.bentobox.bank.commands.user; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; 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; @@ -17,43 +16,29 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; 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 net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; import world.bentobox.bank.BankResponse; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.Settings; import world.bentobox.bank.data.Money; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ BentoBox.class, Util.class, Bukkit.class }) -public class DepositCommandTest { +class DepositCommandTest extends CommonTestSetup { /** * Class under test @@ -64,14 +49,6 @@ public class DepositCommandTest { @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @@ -79,30 +56,21 @@ public class DepositCommandTest { private VaultHook vh; private Settings settings; - /** - */ - @Before - public void setUp() { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); when(user.getUniqueId()).thenReturn(UUID.randomUUID()); - // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); - // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); @@ -110,7 +78,6 @@ public void setUp() { settings = new Settings(); when(addon.getSettings()).thenReturn(settings); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(bankManager.getBalance(island)).thenReturn(new Money(100D)); when(addon.getVault()).thenReturn(vh); @@ -118,18 +85,18 @@ public void setUp() { when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); EconomyResponse er = new EconomyResponse(0, 0, ResponseType.SUCCESS, ""); when(vh.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(er); - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); - dct = new DepositCommand(ic); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); + dct = new DepositCommand(ic); } /** * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertTrue(dct.isOnlyPlayer()); assertEquals("bank.user.deposit", dct.getPermission()); assertEquals("bank.deposit.parameters", dct.getParameters()); @@ -140,7 +107,7 @@ public void testSetup() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoArgs() { + void testCanExecuteNoArgs() { assertFalse(dct.canExecute(user, "deposit", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -149,7 +116,7 @@ public void testCanExecuteNoArgs() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNotANumber() { + void testCanExecuteOneArgNotANumber() { assertFalse(dct.canExecute(user, "deposit", Collections.singletonList("hello"))); verify(user).sendMessage("bank.errors.must-be-a-number"); } @@ -158,7 +125,7 @@ public void testCanExecuteOneArgNotANumber() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNegativeNumber() { + void testCanExecuteOneArgNegativeNumber() { assertFalse(dct.canExecute(user, "deposit", Collections.singletonList("-50"))); verify(user).sendMessage("bank.errors.value-must-be-positive"); } @@ -167,7 +134,7 @@ public void testCanExecuteOneArgNegativeNumber() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberNoRank() { + void testCanExecuteOneArgNumberNoRank() { when(island.isAllowed(eq(user), any())).thenReturn(false); assertFalse(dct.canExecute(user, "deposit", Collections.singletonList("123.30"))); verify(user).sendMessage("bank.errors.no-rank"); @@ -177,7 +144,7 @@ public void testCanExecuteOneArgNumberNoRank() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberNoIsland() { + void testCanExecuteOneArgNumberNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(dct.canExecute(user, "deposit", Collections.singletonList("123.30"))); verify(user).sendMessage("general.errors.no-island"); @@ -187,7 +154,7 @@ public void testCanExecuteOneArgNumberNoIsland() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteAllSuccess() { + void testCanExecuteAllSuccess() { when(bankManager.getBalance(user, world)).thenReturn(new Money(555D)); assertTrue(dct.canExecute(user, "deposit", Collections.singletonList("all"))); verify(user, never()).sendMessage(any()); @@ -197,7 +164,7 @@ public void testCanExecuteAllSuccess() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberSuccess() { + void testCanExecuteOneArgNumberSuccess() { when(bankManager.getBalance(user, world)).thenReturn(new Money(555D)); assertTrue(dct.canExecute(user, "deposit", Collections.singletonList("123.30"))); verify(user, never()).sendMessage(any()); @@ -207,7 +174,7 @@ public void testCanExecuteOneArgNumberSuccess() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringLoadError() { + void testExecuteUserStringListOfStringLoadError() { when(bankManager.deposit(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOAD_ERROR)); assertTrue(dct.execute(user, "deposit", Collections.emptyList())); @@ -218,7 +185,7 @@ public void testExecuteUserStringListOfStringLoadError() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringVaultError() { + void testExecuteUserStringListOfStringVaultError() { EconomyResponse er = new EconomyResponse(0, 0, ResponseType.FAILURE, ""); when(vh.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(er); assertFalse(dct.execute(user, "deposit", Collections.emptyList())); @@ -229,7 +196,7 @@ public void testExecuteUserStringListOfStringVaultError() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringLowBalance() { + void testExecuteUserStringListOfStringLowBalance() { when(bankManager.deposit(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOW_BALANCE)); assertTrue(dct.execute(user, "deposit", Collections.emptyList())); @@ -240,7 +207,7 @@ public void testExecuteUserStringListOfStringLowBalance() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringNoIsland() { + void testExecuteUserStringListOfStringNoIsland() { when(bankManager.deposit(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_NO_ISLAND)); assertTrue(dct.execute(user, "deposit", Collections.emptyList())); verify(user).sendMessage("general.errors.no-island"); @@ -250,7 +217,7 @@ public void testExecuteUserStringListOfStringNoIsland() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringSuccess() { + void testExecuteUserStringListOfStringSuccess() { testCanExecuteOneArgNumberSuccess(); when(bankManager.deposit(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.SUCCESS)); assertTrue(dct.execute(user, "deposit", Collections.singletonList("123.30"))); @@ -262,17 +229,17 @@ public void testExecuteUserStringListOfStringSuccess() { * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberLowBalance() { + void testCanExecuteOneArgNumberLowBalance() { when(bankManager.deposit(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOW_BALANCE)); assertTrue(dct.execute(user, "deposit", Collections.singletonList("123.30"))); verify(user).sendMessage("bank.errors.low-balance"); } /** - * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#tabComplete(User, String, java.util.List) + * Test method for {@link world.bentobox.bank.commands.user.DepositCommand#tabComplete(User, String, java.util.List)}. */ @Test - public void testTabComplete() { + void testTabComplete() { Optional> value = dct.tabComplete(user, "", Collections.emptyList()); assertTrue(value.isPresent()); assertEquals("1000.0", value.get().get(0)); diff --git a/src/test/java/world/bentobox/bank/commands/user/StatementCommandTest.java b/src/test/java/world/bentobox/bank/commands/user/StatementCommandTest.java index 77df048..9bb7ca8 100644 --- a/src/test/java/world/bentobox/bank/commands/user/StatementCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/user/StatementCommandTest.java @@ -1,115 +1,80 @@ package world.bentobox.bank.commands.user; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; -import org.bukkit.Bukkit; -import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; -import org.eclipse.jdt.annotation.Nullable; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; 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 net.milkbowl.vault.economy.EconomyResponse; import net.milkbowl.vault.economy.EconomyResponse.ResponseType; import world.bentobox.bank.Bank; import world.bentobox.bank.BankManager; -import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.Settings; +import world.bentobox.bank.CommonTestSetup; 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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({Bukkit.class, BentoBox.class, Util.class}) -public class StatementCommandTest { +class StatementCommandTest extends CommonTestSetup { + @Mock private CompositeCommand ic; @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @Mock private VaultHook vh; - // Class under test - private StatementCommand sc; @Mock private Player player; + // Class under test + private StatementCommand sc; - /** - */ - @Before - public void setUp() { - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); when(user.getPlayer()).thenReturn(player); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); - // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); EconomyResponse er = new EconomyResponse(0, 0, ResponseType.SUCCESS, ""); when(vh.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(er); - // Settings - when(pluginMock.getSettings()).thenReturn(new Settings()); - - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); sc = new StatementCommand(ic); } @@ -118,18 +83,17 @@ public void setUp() { * Test method for {@link world.bentobox.bank.commands.user.StatementCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertTrue(sc.isOnlyPlayer()); assertEquals("bank.user.statement", sc.getPermission()); assertEquals("bank.statement.description", sc.getDescription()); - } /** * Test method for {@link world.bentobox.bank.commands.user.StatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteArgs() { + void testCanExecuteArgs() { assertFalse(sc.canExecute(user, "statement", Collections.singletonList("fff"))); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -138,7 +102,7 @@ public void testCanExecuteArgs() { * Test method for {@link world.bentobox.bank.commands.user.StatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoIsland() { + void testCanExecuteNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(sc.canExecute(user, "statement", Collections.emptyList())); verify(user).sendMessage("general.errors.no-island"); @@ -148,18 +112,17 @@ public void testCanExecuteNoIsland() { * Test method for {@link world.bentobox.bank.commands.user.StatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoRank() { + void testCanExecuteNoRank() { when(island.isAllowed(eq(user), any())).thenReturn(false); assertFalse(sc.canExecute(user, "statement", Collections.emptyList())); verify(user).sendMessage("bank.errors.no-rank"); - } /** * Test method for {@link world.bentobox.bank.commands.user.StatementCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteSuccess() { + void testCanExecuteSuccess() { assertTrue(sc.canExecute(user, "statement", Collections.emptyList())); } @@ -167,7 +130,7 @@ public void testCanExecuteSuccess() { * Test method for {@link world.bentobox.bank.commands.user.StatementCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfString() { + void testExecuteUserStringListOfString() { assertTrue(sc.execute(user, "statement", Collections.emptyList())); verify(user).closeInventory(); verify(player).openInventory(any(Inventory.class)); diff --git a/src/test/java/world/bentobox/bank/commands/user/WithdrawCommandTest.java b/src/test/java/world/bentobox/bank/commands/user/WithdrawCommandTest.java index aaa9969..b51c7a4 100644 --- a/src/test/java/world/bentobox/bank/commands/user/WithdrawCommandTest.java +++ b/src/test/java/world/bentobox/bank/commands/user/WithdrawCommandTest.java @@ -1,11 +1,11 @@ package world.bentobox.bank.commands.user; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; 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; @@ -16,41 +16,27 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; -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.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; 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.bank.Bank; import world.bentobox.bank.BankManager; import world.bentobox.bank.BankResponse; +import world.bentobox.bank.CommonTestSetup; import world.bentobox.bank.Settings; import world.bentobox.bank.data.Money; -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.hooks.VaultHook; -import world.bentobox.bentobox.managers.IslandWorldManager; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.util.Util; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ BentoBox.class, Util.class, Bukkit.class }) -public class WithdrawCommandTest { +class WithdrawCommandTest extends CommonTestSetup { /** * Class under test @@ -61,14 +47,6 @@ public class WithdrawCommandTest { @Mock private User user; @Mock - private World world; - @Mock - private BentoBox plugin; - @Mock - private IslandsManager im; - @Mock - private @Nullable Island island; - @Mock private Bank addon; @Mock private BankManager bankManager; @@ -76,30 +54,21 @@ public class WithdrawCommandTest { private VaultHook vh; private Settings settings; - - /** - */ - @Before - public void setUp() { - PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); - // Set up plugin - BentoBox pluginMock = mock(BentoBox.class); - Whitebox.setInternalState(BentoBox.class, "instance", pluginMock); + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); when(ic.getWorld()).thenReturn(world); + when(ic.getAddon()).thenReturn(addon); when(user.getWorld()).thenReturn(world); when(user.getUniqueId()).thenReturn(UUID.randomUUID()); // IWM friendly name - IslandWorldManager iwm = mock(IslandWorldManager.class); when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock"); - when(pluginMock.getIWM()).thenReturn(iwm); - when(iwm.inWorld(any(World.class))).thenReturn(true); // Islands - when(pluginMock.getIslands()).thenReturn(im); when(im.getIsland(world, user)).thenReturn(island); - // Island flag allowed when(island.isAllowed(eq(user), any())).thenReturn(true); @@ -107,28 +76,23 @@ public void setUp() { settings = new Settings(); when(addon.getSettings()).thenReturn(settings); - - when(ic.getAddon()).thenReturn(addon); when(addon.getBankManager()).thenReturn(bankManager); when(bankManager.getBalance(any(), any())).thenReturn(new Money()); when(bankManager.getBalance(island)).thenReturn(new Money(100D)); when(addon.getVault()).thenReturn(vh); when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class))); - PowerMockito.mockStatic(Util.class); - when(Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, World.class)); - - when(ic.getWorld()).thenReturn(world); + // Util.getWorld returns the world passed in + mockedUtil.when(() -> Util.getWorld(any())).thenAnswer(arg -> arg.getArgument(0, org.bukkit.World.class)); wct = new WithdrawCommand(ic); - } /** * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#setup()}. */ @Test - public void testSetup() { + void testSetup() { assertTrue(wct.isOnlyPlayer()); assertEquals("bank.user.withdraw", wct.getPermission()); assertEquals("bank.withdraw.parameters", wct.getParameters()); @@ -139,7 +103,7 @@ public void testSetup() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteNoArgs() { + void testCanExecuteNoArgs() { assertFalse(wct.canExecute(user, "withdraw", Collections.emptyList())); verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock"); } @@ -148,7 +112,7 @@ public void testCanExecuteNoArgs() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNotANumber() { + void testCanExecuteOneArgNotANumber() { assertFalse(wct.canExecute(user, "withdraw", Collections.singletonList("hello"))); verify(user).sendMessage("bank.errors.must-be-a-number"); } @@ -157,7 +121,7 @@ public void testCanExecuteOneArgNotANumber() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNegativeNumber() { + void testCanExecuteOneArgNegativeNumber() { assertFalse(wct.canExecute(user, "withdraw", Collections.singletonList("-50"))); verify(user).sendMessage("bank.errors.value-must-be-positive"); } @@ -166,7 +130,7 @@ public void testCanExecuteOneArgNegativeNumber() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberLowBalance() { + void testCanExecuteOneArgNumberLowBalance() { assertFalse(wct.canExecute(user, "withdraw", Collections.singletonList("123.30"))); verify(user, never()).sendMessage("bank.errors.must-be-a-number"); verify(user).sendMessage("bank.errors.low-balance"); @@ -176,7 +140,7 @@ public void testCanExecuteOneArgNumberLowBalance() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteAllArg() { + void testCanExecuteAllArg() { when(bankManager.getBalance(user, world)).thenReturn(new Money(555D)); assertTrue(wct.canExecute(user, "withdraw", Collections.singletonList("all"))); verify(user, never()).sendMessage("bank.errors.must-be-a-number"); @@ -187,7 +151,7 @@ public void testCanExecuteAllArg() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberNoRank() { + void testCanExecuteOneArgNumberNoRank() { when(island.isAllowed(eq(user), any())).thenReturn(false); assertFalse(wct.canExecute(user, "withdraw", Collections.singletonList("123.30"))); verify(user).sendMessage("bank.errors.no-rank"); @@ -197,7 +161,7 @@ public void testCanExecuteOneArgNumberNoRank() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberNoIsland() { + void testCanExecuteOneArgNumberNoIsland() { when(im.getIsland(world, user)).thenReturn(null); assertFalse(wct.canExecute(user, "withdraw", Collections.singletonList("123.30"))); verify(user).sendMessage("general.errors.no-island"); @@ -207,7 +171,7 @@ public void testCanExecuteOneArgNumberNoIsland() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testCanExecuteOneArgNumberSuccess() { + void testCanExecuteOneArgNumberSuccess() { when(bankManager.getBalance(user, world)).thenReturn(new Money(555D)); assertTrue(wct.canExecute(user, "withdraw", Collections.singletonList("123.30"))); verify(user, never()).sendMessage(any()); @@ -217,7 +181,7 @@ public void testCanExecuteOneArgNumberSuccess() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringLoadError() { + void testExecuteUserStringListOfStringLoadError() { when(bankManager.withdraw(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOAD_ERROR)); assertTrue(wct.execute(user, "withdraw", Collections.emptyList())); verify(user).sendMessage("bank.errors.bank-error"); @@ -227,7 +191,7 @@ public void testExecuteUserStringListOfStringLoadError() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringLowBalance() { + void testExecuteUserStringListOfStringLowBalance() { when(bankManager.withdraw(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOW_BALANCE)); assertTrue(wct.execute(user, "withdraw", Collections.emptyList())); verify(user).sendMessage("bank.errors.low-balance"); @@ -237,7 +201,7 @@ public void testExecuteUserStringListOfStringLowBalance() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringNoIsland() { + void testExecuteUserStringListOfStringNoIsland() { when(bankManager.withdraw(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_NO_ISLAND)); assertTrue(wct.execute(user, "withdraw", Collections.emptyList())); verify(user).sendMessage("general.errors.no-island"); @@ -247,7 +211,7 @@ public void testExecuteUserStringListOfStringNoIsland() { * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - public void testExecuteUserStringListOfStringSuccess() { + void testExecuteUserStringListOfStringSuccess() { testCanExecuteOneArgNumberSuccess(); when(bankManager.withdraw(eq(user), any(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.SUCCESS)); assertTrue(wct.execute(user, "withdraw", Collections.singletonList("123.30"))); @@ -256,10 +220,10 @@ public void testExecuteUserStringListOfStringSuccess() { } /** - * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#tabComplete(User, String, java.util.List) + * Test method for {@link world.bentobox.bank.commands.user.WithdrawCommand#tabComplete(User, String, java.util.List)}. */ @Test - public void testTabComplete() { + void testTabComplete() { Optional> value = wct.tabComplete(user, "", Collections.emptyList()); assertTrue(value.isPresent()); assertEquals("0.0", value.get().get(0)); diff --git a/src/test/java/world/bentobox/bank/data/MoneyTest.java b/src/test/java/world/bentobox/bank/data/MoneyTest.java index f5f835a..5722f6a 100644 --- a/src/test/java/world/bentobox/bank/data/MoneyTest.java +++ b/src/test/java/world/bentobox/bank/data/MoneyTest.java @@ -1,37 +1,29 @@ package world.bentobox.bank.data; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.math.BigDecimal; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.modules.junit4.PowerMockRunner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; /** * @author tastybento * */ -@RunWith(PowerMockRunner.class) public class MoneyTest { Money m; - @Before + @BeforeEach public void setUp() { m = new Money(); } - @After - public void tearDown() { - // Nothing to tear down - } - /** * Test method for {@link world.bentobox.bank.data.Money#hashCode()}. */ @@ -175,17 +167,17 @@ public void testIsPositive() { /** * Test method for {@link world.bentobox.bank.data.Money#parseMoney(java.lang.String)}. */ - @Test(expected = NullPointerException.class) + @Test public void testParseMoneyNPE() { - Money.parseMoney(null); + assertThrows(NullPointerException.class, () -> Money.parseMoney(null)); } /** * Test method for {@link world.bentobox.bank.data.Money#parseMoney(java.lang.String)}. */ - @Test(expected = NumberFormatException.class) + @Test public void testParseMoneyNFE() { - Money.parseMoney("tastybento"); + assertThrows(NumberFormatException.class, () -> Money.parseMoney("tastybento")); } /**