diff --git a/src/test/java/millions/ExchangeTest.java b/src/test/java/millions/ExchangeTest.java index a852a0d..f0479b2 100644 --- a/src/test/java/millions/ExchangeTest.java +++ b/src/test/java/millions/ExchangeTest.java @@ -2,4 +2,82 @@ import static org.junit.jupiter.api.Assertions.*; -class ExchangeTest {} +import java.math.BigDecimal; +import java.util.List; +import org.junit.jupiter.api.Test; + +class ExchangeTest { + @Test + public void testGetters() { + Stock s1 = new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(300)); + Stock s2 = new Stock("DOGL", "DOOGLE Inc.", BigDecimal.valueOf(200.00)); + Stock s3 = new Stock("MSFT", "EpsteinSoft Inc.", BigDecimal.valueOf(0.02)); + + Exchange exchange = new Exchange("exchange", List.of(s1, s2)); + + assertFalse(exchange.hasStock("MSFT")); + assertTrue(exchange.getStock("DOGL").equals(s2)); + assertNull(exchange.getStock("XYZ")); + assertTrue(exchange.findStocks("Amozon").isEmpty()); + + assertTrue(exchange.hasStock("DOGL")); + assertFalse(exchange.findStocks("Pear").isEmpty()); + assertFalse(exchange.findStocks("PE").isEmpty()); + + assertTrue(exchange.findStocks("Inc").size() == 2); + } + + @Test + public void happyPath() { + Stock s1 = new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(300)); + Stock s2 = new Stock("DOGL", "DOOGLE Inc.", BigDecimal.valueOf(200.00)); + Stock s3 = new Stock("MSFT", "EpsteinSoft Inc.", BigDecimal.valueOf(0.02)); + + Exchange exchange = new Exchange("exchange", List.of(s1, s2, s3)); + Player player = new Player("name", BigDecimal.valueOf(1000)); + + BigDecimal previousMoney = player.getMoney(); + exchange.buy("PEAR", player, 2); + assertTrue(previousMoney.compareTo(player.getMoney()) > 0); + + BigDecimal previousPrice = s1.getSalesPrice(); + exchange.advance(); + assertFalse(previousPrice.equals(s1.getSalesPrice())); + + Share share = player.getPortfolio().getShares().getFirst(); + + previousMoney = player.getMoney(); + exchange.sell(share, player); + assertTrue(previousMoney.compareTo(player.getMoney()) < 0); + assertTrue(player.getPortfolio().getShares().isEmpty()); + } + + @Test + public void testNullsAndInvalid() { + Stock s1 = new Stock("MSFT", "EpsteinSoft Inc.", BigDecimal.valueOf(0.02)); + + Exchange exchange = new Exchange("exchange", List.of(s1)); + Player player = new Player("name", BigDecimal.valueOf(1000)); + + Share unownedShare = new Share(s1, BigDecimal.valueOf(1), s1.getSalesPrice()); + assertThrows(IllegalStateException.class, () -> exchange.sell(unownedShare, player)); + + Player noMoney = new Player("nomoney", BigDecimal.valueOf(0)); + assertThrows(IllegalStateException.class, () -> exchange.buy("MSFT", noMoney, 1)); + + assertThrows( + IllegalArgumentException.class, + () -> new Exchange("", List.of(new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(300))))); + + assertThrows( + IllegalArgumentException.class, + () -> new Exchange(null, List.of(new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(300))))); + + assertThrows(IllegalArgumentException.class, () -> exchange.buy("DOGL", player, 2)); + + assertThrows(IllegalArgumentException.class, () -> exchange.buy("DOGL", player, -2)); + + assertThrows( + IllegalArgumentException.class, () -> exchange.buy("DOGL", player, BigDecimal.valueOf(-2))); + } +}