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 KaiserEngineSellLandTest {
12      private KaiserEngine engine;
13  
14      @BeforeEach
15      void createNewEngineUnderTest() {
16          this.engine = new KaiserEngine();
17      }
18  
19      @Test
20      void sellLandDoesNothingIfZeroIsGiven() {
21          BigDecimal costB4 = engine.getCost();
22          BigDecimal areaB4 = engine.getArea();
23          BigDecimal supplyB4 = engine.getSupplies();
24  
25          engine.sellLand(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 sellLandDoesNothingIfNegativeValueIsGiven() {
34          BigDecimal costB4 = engine.getCost();
35          BigDecimal areaB4 = engine.getArea();
36          BigDecimal supplyB4 = engine.getSupplies();
37  
38          engine.sellLand(-1234L);
39  
40          assertThat(engine.getArea()).isEqualTo(areaB4);
41          assertThat(engine.getSupplies()).isEqualTo(supplyB4);
42          assertThat(engine.getCost()).isEqualTo(costB4);
43      }
44      @Test
45      void sellLandWithNotEnoughLandAsArgumentInducesNoChanges() {
46          BigDecimal costB4 = engine.getCost();
47          BigDecimal areaB4 = engine.getArea();
48          BigDecimal supplyB4 = engine.getSupplies();
49  
50          Exception exception = assertThrows(IllegalArgumentException.class, () -> engine.sellLand(Long.MAX_VALUE));
51  
52          String expectedMessage = "Not Enough Land";
53          assertThat(exception.getMessage()).contains(expectedMessage);
54          assertThat(engine.getArea()).isEqualTo(areaB4);
55          assertThat(engine.getSupplies()).isEqualTo(supplyB4);
56          assertThat(engine.getCost()).isEqualTo(costB4);
57      }
58  
59      @Test
60      void sellLandRegularUseCaseAndSetPriceToZeroAfterwards() {
61          BigDecimal areaB4 = engine.getArea();
62          BigDecimal supplyB4 = engine.getSupplies();
63          engine.sellLand(4L);
64  
65          assertThat(engine.getArea()).isEqualTo(areaB4.subtract(BigDecimal.valueOf(4L)));
66          assertThat(engine.getSupplies()).isEqualTo(supplyB4.add(engine.getYield().multiply(BigDecimal.valueOf(4L))));
67          assertThat(engine.getCost()).isEqualTo(BigDecimal.ZERO);
68      }
69  }