tdd-java-demo

tdd java demo with micro-commits

git clone https://9o.is/git/tdd-java-demo.git

BasketTest.java

(1950B)


      1 package takehome.model;
      2 
      3 import com.google.common.collect.HashMultiset;
      4 import com.google.common.collect.Multiset;
      5 import org.junit.jupiter.api.Test;
      6 
      7 import java.time.LocalDate;
      8 import java.util.Arrays;
      9 import java.util.HashMap;
     10 import java.util.Map;
     11 
     12 import static org.hamcrest.MatcherAssert.assertThat;
     13 import static org.hamcrest.Matchers.is;
     14 
     15 class BasketTest {
     16 
     17     public static final Item SOUP = new Item("soup", 0.65);
     18     public static final Item BREAD = new Item("bread", 0.80);
     19 
     20     @Test
     21     public void getAmounts() {
     22         Basket basket = createBasket();
     23         assertThat(basket.getItems(), is(items()));
     24     }
     25 
     26     @Test
     27     public void getTotal() {
     28         Basket basket = createBasket();
     29         assertThat(basket.getTotal(), is(2.25));
     30     }
     31 
     32     @Test
     33     public void getAmount() {
     34         Basket basket = createBasket();
     35         assertThat(basket.getAmount(BREAD), is(2));
     36     }
     37 
     38     @Test
     39     public void getTotalWithDiscounts() {
     40         Discount discount = new Discount(0.40, SOUP, BREAD, BREAD);
     41         Discount[] discounts = { discount };
     42         Basket basket = createBasket();
     43 
     44         assertThat(basket.getTotal(discounts), is(1.85));
     45     }
     46 
     47     @Test
     48     public void getTotalWithInvalidDiscount() {
     49         LocalDate today = LocalDate.now();
     50         LocalDate tomorrow = today.plusDays(1);
     51         LocalDate yesterday = today.minusDays(1);
     52 
     53         Basket basket = createBasket();
     54         basket.setPurchaseDate(tomorrow);
     55         Discount[] discounts = {
     56                 new Discount(0.40, yesterday, today, SOUP, BREAD, BREAD)
     57         };
     58 
     59         assertThat(basket.getTotal(discounts), is(2.25));
     60     }
     61 
     62     private Basket createBasket() {
     63         Map<Item, Integer> amounts = new HashMap<>();
     64         amounts.put(SOUP, 1);
     65         amounts.put(BREAD, 2);
     66 
     67         return new Basket(amounts);
     68     }
     69 
     70     private Multiset<Item> items() {
     71         return HashMultiset.create(Arrays.asList(SOUP, BREAD, BREAD));
     72     }
     73 }