tdd-java-demo
tdd java demo with micro-commits
git clone https://9o.is/git/tdd-java-demo.git
commit 7dde13bda2ab804e164c14c86172c43c1369b000 parent 3499f695ebe17888a3b86751e89b3eba4ca2b6d4 Author: Jul <jul@9o.is> Date: Thu, 1 Apr 2021 01:04:01 +0800 invalidate discounts in Basket Diffstat:
| M | src/main/java/takehome/Basket.java | | | 11 | ++++++++++- |
| M | src/test/java/takehome/BasketTest.java | | | 16 | ++++++++++++++++ |
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/src/main/java/takehome/Basket.java b/src/main/java/takehome/Basket.java @@ -3,13 +3,16 @@ package takehome; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; +import java.time.LocalDate; import java.util.Map; public class Basket { private final Multiset<Item> items; + private LocalDate purchaseDate; public Basket(Map<Item, Integer> amounts) { this.items = toMultiset(amounts); + this.purchaseDate = LocalDate.MAX; } public Multiset<Item> getItems() { @@ -32,7 +35,9 @@ public class Basket { double getTotal(Discount[] discounts) { double total = getTotal(); for (Discount discount : discounts) { - total -= discount.getDiscount(this); + if (discount.isValid(purchaseDate)) { + total -= discount.getDiscount(this); + } } return total; } @@ -44,4 +49,8 @@ public class Basket { } return multiset; } + + public void setPurchaseDate(LocalDate purchaseDate) { + this.purchaseDate = purchaseDate; + } } diff --git a/src/test/java/takehome/BasketTest.java b/src/test/java/takehome/BasketTest.java @@ -4,6 +4,7 @@ import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import org.junit.jupiter.api.Test; +import java.time.LocalDate; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -44,6 +45,21 @@ class BasketTest { assertThat(basket.getTotal(discounts), is(1.85)); } + @Test + public void getTotalWithInvalidDiscount() { + LocalDate today = LocalDate.now(); + LocalDate tomorrow = today.plusDays(1); + LocalDate yesterday = today.minusDays(1); + + Basket basket = new Basket(getItemAmounts()); + basket.setPurchaseDate(tomorrow); + Discount[] discounts = { + new Discount(0.40, yesterday, today, SOUP, BREAD, BREAD) + }; + + assertThat(basket.getTotal(discounts), is(2.25)); + } + private Map<Item, Integer> getItemAmounts() { Map<Item, Integer> amounts = new HashMap<>(); amounts.put(SOUP, 1);