Begin adding unit tests for SaneEconomyCore - Don't want more bugs to creep in!

This commit is contained in:
AppleDash 2016-07-29 07:16:11 -04:00
parent c2bd61f286
commit 0acead2ea3
12 changed files with 294 additions and 16 deletions

View File

@ -11,6 +11,15 @@
<artifactId>SaneEconomyCore</artifactId>
<version>0.6.2-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>

View File

@ -61,17 +61,16 @@ public class EconomyAdminCommand extends SaneEconomyCommand {
return;
}
EconomyManager ecoMan = SaneEconomy.getInstance().getEconomyManager();
Economable economable = Economable.wrap(targetPlayer);
double amount = NumberUtils.parseAndFilter(sAmount);
double amount = NumberUtils.parseAndFilter(ecoMan.getCurrency(), sAmount);
if (amount <= 0) {
MessageUtils.sendMessage(sender, "%s is not a positive number.", (amount == -1 ? sAmount : amount + ""));
return;
}
EconomyManager ecoMan = SaneEconomy.getInstance().getEconomyManager();
if (subCommand.equalsIgnoreCase("give")) {
double newAmount = ecoMan.addBalance(economable, amount);

View File

@ -42,6 +42,7 @@ public class PayCommand extends SaneEconomyCommand {
throw new NeedPlayerException();
}
EconomyManager ecoMan = SaneEconomy.getInstance().getEconomyManager();
Player fromPlayer = (Player) sender;
String sToPlayer = args[0];
@ -58,15 +59,13 @@ public class PayCommand extends SaneEconomyCommand {
}
String sAmount = args[1];
double amount = NumberUtils.parseAndFilter(sAmount);
double amount = NumberUtils.parseAndFilter(ecoMan.getCurrency(), sAmount);
if (amount <= 0) {
MessageUtils.sendMessage(sender, "%s is not a positive number.", (amount == -1 ? sAmount : amount + ""));
return;
}
EconomyManager ecoMan = SaneEconomy.getInstance().getEconomyManager();
/* Perform the actual transfer. False == They didn't have enough money */
boolean result = ecoMan.transfer(Economable.wrap(fromPlayer), Economable.wrap(toPlayer), amount);

View File

@ -15,7 +15,7 @@ public class Currency {
private final String namePlural;
private final DecimalFormat format;
private Currency(String nameSingular, String namePlural, DecimalFormat format) {
public Currency(String nameSingular, String namePlural, DecimalFormat format) {
this.nameSingular = nameSingular;
this.namePlural = namePlural;
this.format = format;

View File

@ -79,7 +79,7 @@ public class EconomyManager {
* @throws IllegalArgumentException If amount is negative
*/
public double addBalance(Economable targetPlayer, double amount) {
amount = NumberUtils.filterAmount(amount);
amount = NumberUtils.filterAmount(currency, amount);
if (amount < 0) {
throw new IllegalArgumentException("Cannot add a negative amount!");
@ -101,7 +101,7 @@ public class EconomyManager {
* @throws IllegalArgumentException If amount is negative
*/
public double subtractBalance(Economable targetPlayer, double amount) {
amount = NumberUtils.filterAmount(amount);
amount = NumberUtils.filterAmount(currency, amount);
if (amount < 0) {
throw new IllegalArgumentException("Cannot subtract a negative amount!");
@ -127,7 +127,7 @@ public class EconomyManager {
* @throws IllegalArgumentException If amount is negative
*/
public void setBalance(Economable targetPlayer, double amount) {
amount = NumberUtils.filterAmount(amount);
amount = NumberUtils.filterAmount(currency, amount);
if (amount < 0) {
throw new IllegalArgumentException("Cannot set balance to a negative value!");
@ -145,7 +145,7 @@ public class EconomyManager {
* @throws IllegalArgumentException If amount is negative
*/
public boolean transfer(Economable fromPlayer, Economable toPlayer, double amount) {
amount = NumberUtils.filterAmount(amount);
amount = NumberUtils.filterAmount(currency, amount);
if (amount < 0) {
throw new IllegalArgumentException("Cannot transfer a negative amount!");

View File

@ -1,7 +1,7 @@
package org.appledash.saneeconomy.utils;
import com.google.common.base.Strings;
import org.appledash.saneeconomy.SaneEconomy;
import org.appledash.saneeconomy.economy.Currency;
/**
* Created by AppleDash on 6/14/2016.
@ -32,11 +32,11 @@ public class NumberUtils {
}
}
public static double filterAmount(double amount) {
return Double.valueOf(SaneEconomy.getInstance().getEconomyManager().getCurrency().getFormat().format(amount));
public static double filterAmount(Currency currency, double amount) {
return Double.valueOf(currency.getFormat().format(amount));
}
public static double parseAndFilter(String sDouble) {
return filterAmount(parsePositiveDouble(sDouble));
public static double parseAndFilter(Currency currency, String sDouble) {
return filterAmount(currency, parsePositiveDouble(sDouble));
}
}

View File

@ -0,0 +1,20 @@
package org.appledash.saneeconomy.test;
import org.appledash.saneeconomy.economy.Currency;
import org.junit.Assert;
import org.junit.Test;
import java.text.DecimalFormat;
/**
* Created by AppleDash on 7/29/2016.
* Blackjack is still best pony.
*/
public class CurrencyTest {
@Test
public void testCurrencyFormat() {
Currency currency = new Currency("test dollar", "test dollars", new DecimalFormat("0.00"));
Assert.assertEquals(currency.formatAmount(1.0D), "1.00 test dollar");
Assert.assertEquals(currency.formatAmount(1337.0D), "1337.00 test dollars");
}
}

View File

@ -0,0 +1,41 @@
package org.appledash.saneeconomy.test;
import org.appledash.saneeconomy.economy.economable.Economable;
import org.appledash.saneeconomy.economy.economable.EconomableFaction;
import org.appledash.saneeconomy.economy.economable.EconomableGeneric;
import org.appledash.saneeconomy.economy.economable.EconomablePlayer;
import org.appledash.saneeconomy.test.mock.MockOfflinePlayer;
import org.bukkit.OfflinePlayer;
import org.junit.Assert;
import org.junit.Test;
import java.util.UUID;
/**
* Created by AppleDash on 7/29/2016.
* Blackjack is still best pony.
*/
public class EconomableTest {
@Test
public void testWrapFaction() {
UUID uuid = UUID.randomUUID();
Economable economable = Economable.wrap(String.format("faction-%s", uuid.toString()));
Assert.assertEquals(economable.getClass(), EconomableFaction.class);
Assert.assertEquals(economable.getUniqueIdentifier(), String.format("faction:%s", uuid.toString()));
}
@Test
public void testWrapPlayer() {
OfflinePlayer dummy = new MockOfflinePlayer("Dummy");
Economable economable = Economable.wrap(dummy);
Assert.assertEquals(economable.getClass(), EconomablePlayer.class);
Assert.assertEquals(economable.getUniqueIdentifier(), String.format("player:%s", dummy.getUniqueId()));
}
@Test
public void testWrapGeneric() {
Economable economable = Economable.wrap("something");
Assert.assertEquals(economable.getClass(), EconomableGeneric.class);
Assert.assertEquals(economable.getUniqueIdentifier(), "generic:something");
}
}

View File

@ -0,0 +1,55 @@
package org.appledash.saneeconomy.test;
import org.appledash.saneeconomy.economy.Currency;
import org.appledash.saneeconomy.economy.EconomyManager;
import org.appledash.saneeconomy.economy.economable.Economable;
import org.appledash.saneeconomy.test.mock.MockEconomyStorageBackend;
import org.appledash.saneeconomy.test.mock.MockOfflinePlayer;
import org.junit.Assert;
import org.junit.Test;
import java.text.DecimalFormat;
/**
* Created by AppleDash on 7/29/2016.
* Blackjack is still best pony.
*/
public class EconomyManagerTest {
@Test
public void testEconomyManager() {
EconomyManager economyManager = new EconomyManager(new Currency("test dollar", "test dollars", new DecimalFormat("0.00")), new MockEconomyStorageBackend());
Economable playerOne = Economable.wrap(new MockOfflinePlayer("One"));
Economable playerTwo = Economable.wrap(new MockOfflinePlayer("Two"));
// Accounts should not exist
Assert.assertFalse(economyManager.accountExists(playerOne));
Assert.assertFalse(economyManager.accountExists(playerTwo));
Assert.assertEquals(economyManager.getBalance(playerOne), 0.0D, 0.0);
Assert.assertEquals(economyManager.getBalance(playerTwo), 0.0D, 0.0);
economyManager.setBalance(playerOne, 100.0D);
// Now one should have an account, but two should not
Assert.assertTrue(economyManager.accountExists(playerOne));
Assert.assertFalse(economyManager.accountExists(playerTwo));
// One should have balance, two should not
Assert.assertEquals(economyManager.getBalance(playerOne), 100.0, 0.0);
Assert.assertEquals(economyManager.getBalance(playerTwo), 0.0, 0.0);
// One should be able to transfer to two
Assert.assertTrue(economyManager.transfer(playerOne, playerTwo, 50.0));
// One should now have only 50 left, two should have 50 now
Assert.assertEquals(economyManager.getBalance(playerOne), 50.0, 0.0);
Assert.assertEquals(economyManager.getBalance(playerTwo), 50.0, 0.0);
// Ensure that balance addition and subtraction works...
Assert.assertEquals(economyManager.subtractBalance(playerOne, 25.0), 25.0, 0.0);
Assert.assertEquals(economyManager.addBalance(playerOne, 25.0), 50.0, 0.0);
// Ensure that hasBalance works
Assert.assertTrue(economyManager.hasBalance(playerOne, 50.0));
Assert.assertFalse(economyManager.hasBalance(playerOne, 51.0));
}
}

View File

@ -0,0 +1,32 @@
package org.appledash.saneeconomy.test;
import org.appledash.saneeconomy.economy.Currency;
import org.appledash.saneeconomy.utils.NumberUtils;
import org.junit.Assert;
import org.junit.Test;
import java.text.DecimalFormat;
/**
* Created by AppleDash on 7/29/2016.
* Blackjack is still best pony.
*/
public class NumberUtilsTest {
@Test
public void testParsePositive() {
// Valid input
Assert.assertEquals(NumberUtils.parsePositiveDouble("69.0"), 69.0, 0.0);
// Valid but not positive
Assert.assertEquals(NumberUtils.parsePositiveDouble("-10.0"), -1.0, 0.0);
// Invalid
Assert.assertEquals(NumberUtils.parsePositiveDouble("nan"), -1.0, 0.0);
Assert.assertEquals(NumberUtils.parsePositiveDouble("ponies"), -1.0, 0.0);
}
@Test
public void testFilter() {
Currency currency = new Currency(null, null, new DecimalFormat("0.00"));
Assert.assertEquals(NumberUtils.filterAmount(currency, 1337.420D), 1337.42, 0.0);
}
}

View File

@ -0,0 +1,20 @@
package org.appledash.saneeconomy.test.mock;
import org.appledash.saneeconomy.economy.backend.type.EconomyStorageBackendCaching;
import org.appledash.saneeconomy.economy.economable.Economable;
/**
* Created by AppleDash on 7/29/2016.
* Blackjack is still best pony.
*/
public class MockEconomyStorageBackend extends EconomyStorageBackendCaching {
@Override
public void setBalance(Economable player, double newBalance) {
balances.put(player.getUniqueIdentifier(), newBalance);
}
@Override
public void reloadDatabase() {
System.out.println("Reloading mock economy database (doing nothing).");
}
}

View File

@ -0,0 +1,103 @@
package org.appledash.saneeconomy.test.mock;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import java.util.Map;
import java.util.UUID;
/**
* Created by AppleDash on 7/29/2016.
* Blackjack is still best pony.
*
* Implemented: Name and UUID
*/
public class MockOfflinePlayer implements OfflinePlayer {
private final UUID uuid;
private final String name;
public MockOfflinePlayer(UUID uuid, String name) {
this.uuid = uuid;
this.name = name;
}
public MockOfflinePlayer(String name) {
this(UUID.randomUUID(), name);
}
@Override
public boolean isOnline() {
return false;
}
@Override
public String getName() {
return name;
}
@Override
public UUID getUniqueId() {
return uuid;
}
@Override
public boolean isBanned() {
return false;
}
@Override
public void setBanned(boolean banned) {
}
@Override
public boolean isWhitelisted() {
return false;
}
@Override
public void setWhitelisted(boolean value) {
}
@Override
public Player getPlayer() {
return null;
}
@Override
public long getFirstPlayed() {
return 0;
}
@Override
public long getLastPlayed() {
return 0;
}
@Override
public boolean hasPlayedBefore() {
return false;
}
@Override
public Location getBedSpawnLocation() {
return null;
}
@Override
public Map<String, Object> serialize() {
return null;
}
@Override
public boolean isOp() {
return false;
}
@Override
public void setOp(boolean value) {
}
}