Skip to content

Commit

Permalink
Added test class for AdminSetCommand.
Browse files Browse the repository at this point in the history
Improved other tests.
  • Loading branch information
tastybento committed Oct 23, 2020
1 parent c8e2c3f commit 454436a
Show file tree
Hide file tree
Showing 11 changed files with 274 additions and 16 deletions.
16 changes: 16 additions & 0 deletions src/main/java/world/bentobox/bank/BankManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -155,17 +155,33 @@ public CompletableFuture<BankResponse> withdraw(User user, Island island, double
return this.set(user, island.getUniqueId(), amount, (account.getBalance() - amount), type);
}

/**
* Get balance for island
* @param island - island
* @return balance. 0 if unknown
*/
public double getBalance(@Nullable Island island) {
if (island == null) {
return 0D;
}
return balances.getOrDefault(island.getUniqueId(), 0D);
}

/**
* Get balance for user in world
* @param user - user
* @param world - world
* @return balance. 0 if unknown
*/
public double getBalance(User user, World world) {
return getBalance(addon.getIslands().getIsland(world, user));
}

/**
* Get history for island
* @param island - island
* @return list of {@link AccountHistory}
*/
public List<AccountHistory> getHistory(Island island) {
try {
BankAccounts account = getAccount(island.getUniqueId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public boolean execute(User user, String label, List<String> args) {
.thenAccept(result -> {
if (result == BankResponse.SUCCESS) {
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(user, getWorld())));
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
} else {
user.sendMessage("bank.errors.bank-error");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,13 @@ public boolean canExecute(User user, String label, List<String> args) {
@Override
public boolean execute(User user, String label, List<String> args) {
// Success
((Bank)getAddon()).getBankManager().set(user, island.getUniqueId(), value, value, TxType.SET).thenAccept(result -> {
((Bank)getAddon())
.getBankManager()
.set(user, island.getUniqueId(), value, value, TxType.SET)
.thenAccept(result -> {
if (result == BankResponse.SUCCESS) {
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.admin.set.success", TextVariables.NAME, target.getName(), TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(user, getWorld())));
user.sendMessage("bank.admin.set.success", TextVariables.NAME, target.getName(), TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
} else {
user.sendMessage("bank.errors.bank-error");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public boolean execute(User user, String label, List<String> args) {
break;
case SUCCESS:
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.withdraw.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(user, getWorld())));
user.sendMessage("bank.withdraw.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
break;
default:
user.sendMessage("bank.errors.bank-error");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public boolean execute(User user, String label, List<String> args) {
.getVault()
.format(((Bank)getAddon())
.getBankManager()
.getBalance(user, getWorld())));
.getBalance(island)));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public boolean execute(User user, String label, List<String> args) {
user.sendMessage("general.errors.no-island");
break;
case SUCCESS:
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(user, getWorld())));
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
break;
default:
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public boolean execute(User user, String label, List<String> args) {
break;
default:
vault.deposit(user, value, getWorld());
user.sendMessage("bank.withdraw.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(user, getWorld())));
user.sendMessage("bank.withdraw.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
break;

}
Expand Down
13 changes: 10 additions & 3 deletions src/main/java/world/bentobox/bank/data/AccountHistory.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package world.bentobox.bank.data;

/**
* Account history entry class
* @author tastybento
*
*/
public class AccountHistory {
private final long timestamp;
private final String name;
private final double amount;
private final TxType type;
/**
* @param timestamp
* @param name
* @param amount
* Account history entry
* @param timestamp - time stamp
* @param name - name of user making the change
* @param amount - amount of change
* @type - type of change
*/
public AccountHistory(long timestamp, String name, double amount, TxType type) {
super();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
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.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
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.Arrays;
import java.util.Collections;
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.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.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;

/**
* @author tastybento
*
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(BentoBox.class)
public class AdminSetCommandTest {

@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;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
// Set up plugin
BentoBox plugin = mock(BentoBox.class);
Whitebox.setInternalState(BentoBox.class, "instance", plugin);

when(ic.getWorld()).thenReturn(world);
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(plugin.getIWM()).thenReturn(iwm);
when(iwm.inWorld(any(World.class))).thenReturn(true);

// Islands
when(plugin.getIslands()).thenReturn(im);
when(im.getIsland(eq(world), eq(user))).thenReturn(island);

// Players
when(addon.getPlayers()).thenReturn(pm);
when(pm.getUser(eq("tastybento"))).thenReturn(user);

// 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);
// Always successful setting
when(bankManager.set(eq(user), anyString(), anyDouble(), anyDouble(), eq(TxType.SET))).thenReturn(CompletableFuture.completedFuture(BankResponse.SUCCESS));
when(bankManager.getBalance(eq(island))).thenReturn(100D);
// Island
when(island.getUniqueId()).thenReturn(UUID.randomUUID().toString());

bc = new AdminSetCommand(ic);
}

/**
* Test method for {@link world.bentobox.bank.commands.admin.AdminSetCommand#setup()}.
*/
@Test
public 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() {
assertFalse(bc.canExecute(user, "set", Collections.emptyList()));
verify(user).sendMessage(eq("commands.help.header"), eq(TextVariables.LABEL), eq("BSkyBlock"));
}

/**
* 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() {
assertFalse(bc.canExecute(user, "set", Collections.singletonList("tastybento")));
verify(user).sendMessage(eq("commands.help.header"), eq(TextVariables.LABEL), eq("BSkyBlock"));
}

/**
* 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() {
when(im.getIsland(eq(world), eq(user))).thenReturn(null);
assertFalse(bc.canExecute(user, "set", Arrays.asList("tastybento", "100")));
verify(user).sendMessage(eq("general.errors.no-island"));
}

/**
* 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() {
when(im.getIsland(eq(world), eq(user))).thenReturn(null);
assertFalse(bc.canExecute(user, "set", Arrays.asList("bonne", "100")));
verify(user).sendMessage(eq("general.errors.no-island"));
}

/**
* 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() {
assertFalse(bc.canExecute(user, "set", Arrays.asList("tastybento", "xxx")));
verify(user).sendMessage(eq("bank.errors.must-be-a-number"));
}

/**
* 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() {
assertFalse(bc.canExecute(user, "set", Arrays.asList("tastybento", "-99")));
verify(user).sendMessage(eq("bank.errors.value-must-be-positive"));
}

/**
* 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() {
// 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")));
}

/**
* 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() {
assertTrue(bc.canExecute(user, "set", Arrays.asList("tastybento", "100")));
}

/**
* 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() {
testCanExecuteSuccess();
assertTrue(bc.execute(user, "set", Arrays.asList("tastybento", "100")));
verify(user).sendMessage(eq("bank.admin.set.success"), eq(TextVariables.NAME), eq("tastybento"), eq(TextVariables.NUMBER), eq("100.0"));
}

/**
* 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() {
testCanExecuteSuccess();
when(bankManager.set(eq(user), any(), anyDouble(), anyDouble(), eq(TxType.SET))).thenReturn(CompletableFuture.completedFuture(BankResponse.FAILURE_LOAD_ERROR));
assertTrue(bc.execute(user, "set", Arrays.asList("tastybento", "100")));
verify(user).sendMessage(eq("bank.errors.bank-error"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,9 @@ public void setUp() throws Exception {

when(ic.getAddon()).thenReturn(addon);
when(addon.getBankManager()).thenReturn(bankManager);
when(bankManager.getBalance(eq(island))).thenReturn(100D);
when(addon.getVault()).thenReturn(vh);
when(vh.getBalance(eq(user), eq(world))).thenReturn(1000D);
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);
Expand Down Expand Up @@ -220,10 +222,11 @@ public void testExecuteUserStringListOfStringNoIsland() {
*/
@Test
public void testExecuteUserStringListOfStringSuccess() {
testCanExecuteOneArgNumberSuccess();
when(bankManager.deposit(eq(user), anyDouble(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.SUCCESS));
assertTrue(dct.execute(user, "deposit", Collections.emptyList()));
verify(vh).withdraw(eq(user), eq(0D), eq(world));
verify(user).sendMessage(eq("bank.deposit.success"), eq(TextVariables.NUMBER), eq("0.0"));
assertTrue(dct.execute(user, "deposit", Collections.singletonList("123.30")));
verify(vh).withdraw(eq(user), eq(123.3D), eq(world));
verify(user).sendMessage(eq("bank.deposit.success"), eq(TextVariables.NUMBER), eq("100.0"));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ public void setUp() throws Exception {

when(ic.getAddon()).thenReturn(addon);
when(addon.getBankManager()).thenReturn(bankManager);
when(bankManager.getBalance(eq(island))).thenReturn(100D);
when(addon.getVault()).thenReturn(vh);
when(vh.format(anyDouble())).thenAnswer(i -> String.valueOf(i.getArgument(0, Double.class)));

Expand Down Expand Up @@ -217,10 +218,11 @@ public void testExecuteUserStringListOfStringNoIsland() {
*/
@Test
public void testExecuteUserStringListOfStringSuccess() {
testCanExecuteOneArgNumberSuccess();
when(bankManager.withdraw(eq(user), anyDouble(), eq(world))).thenReturn(CompletableFuture.completedFuture(BankResponse.SUCCESS));
//testCanExecuteOneArgNumberSuccess();
assertTrue(wct.execute(user, "withdraw", Collections.emptyList()));
verify(vh).deposit(eq(user), eq(0D), eq(world));
verify(user).sendMessage(eq("bank.withdraw.success"), eq(TextVariables.NUMBER), eq("0.0"));
assertTrue(wct.execute(user, "withdraw", Collections.singletonList("123.30")));
verify(vh).deposit(eq(user), eq(123.3D), eq(world));
verify(user).sendMessage(eq("bank.withdraw.success"), eq(TextVariables.NUMBER), eq("100.0"));
}
}

0 comments on commit 454436a

Please sign in to comment.