View Javadoc
1   package de.aikiit.game.kaiser;
2   
3   import org.junit.jupiter.api.BeforeEach;
4   import org.junit.jupiter.api.Test;
5   
6   import java.math.BigDecimal;
7   
8   import static org.assertj.core.api.Assertions.assertThat;
9   import static org.junit.jupiter.api.Assertions.assertThrows;
10  
11  public class KaiserEngineBuyLandTest {
12      private KaiserEngine engine;
13  
14      @BeforeEach
15      void createNewEngineUnderTest() {
16          this.engine = new KaiserEngine();
17      }
18  
19      @Test
20      void buyLandDoesNothingIfZeroIsGiven() {
21          BigDecimal costB4 = engine.getCost();
22          BigDecimal areaB4 = engine.getArea();
23          BigDecimal supplyB4 = engine.getSupplies();
24  
25          engine.buyLand(0L);
26  
27          assertThat(engine.getArea()).isEqualTo(areaB4);
28          assertThat(engine.getSupplies()).isEqualTo(supplyB4);
29          assertThat(engine.getCost()).isEqualTo(costB4);
30      }
31  
32      @Test
33      void buyLandDoesNothingIfNegativeInputIsGiven() {
34          BigDecimal costB4 = engine.getCost();
35          BigDecimal areaB4 = engine.getArea();
36          BigDecimal supplyB4 = engine.getSupplies();
37  
38          engine.buyLand(-3456L);
39  
40          assertThat(engine.getArea()).isEqualTo(areaB4);
41          assertThat(engine.getSupplies()).isEqualTo(supplyB4);
42          assertThat(engine.getCost()).isEqualTo(costB4);
43      }
44  
45      @Test
46      void buyLandWithMoreThanCashAsArgumentInducesNoChanges() {
47          BigDecimal costB4 = engine.getCost();
48          BigDecimal areaB4 = engine.getArea();
49          BigDecimal supplyB4 = engine.getSupplies();
50  
51          Exception exception = assertThrows(IllegalArgumentException.class, () -> engine.buyLand(Long.MAX_VALUE));
52  
53          String expectedMessage = "Not Enough Supplies";
54          assertThat(exception.getMessage()).contains(expectedMessage);
55          assertThat(engine.getArea()).isEqualTo(areaB4);
56          assertThat(engine.getSupplies()).isEqualTo(supplyB4);
57          assertThat(engine.getCost()).isEqualTo(costB4);
58      }
59  
60      @Test
61      void buyLandRegularUseCaseAndSetPriceToZeroAfterwards() {
62          BigDecimal areaB4 = engine.getArea();
63          BigDecimal supplyB4 = engine.getSupplies();
64          engine.buyLand(4L);
65  
66          assertThat(engine.getArea()).isEqualTo(areaB4.add(BigDecimal.valueOf(4L)));
67          assertThat(engine.getSupplies()).isEqualTo(supplyB4.subtract(engine.getYield().multiply(BigDecimal.valueOf(4L))));
68          assertThat(engine.getCost()).isEqualTo(BigDecimal.ZERO);
69      }
70  
71  }