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 }