Skip to content

Commit

Permalink
test: adding ExchangeTest
Browse files Browse the repository at this point in the history
  • Loading branch information
martin committed Mar 6, 2026
1 parent 292c14b commit 6b33b97
Showing 1 changed file with 79 additions and 1 deletion.
80 changes: 79 additions & 1 deletion src/test/java/millions/ExchangeTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
}
}

0 comments on commit 6b33b97

Please sign in to comment.