tdd-java-demo

tdd java demo with micro-commits

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

Basket.java

(1433B)


      1 package takehome.model;
      2 
      3 import com.google.common.collect.HashMultiset;
      4 import com.google.common.collect.Multiset;
      5 
      6 import java.time.LocalDate;
      7 import java.util.Map;
      8 
      9 public class Basket {
     10     private final Multiset<Item> items;
     11     private LocalDate purchaseDate;
     12 
     13     public Basket(Map<Item, Integer> amounts) {
     14         this.items = toMultiset(amounts);
     15         this.purchaseDate = LocalDate.MAX;
     16     }
     17 
     18     public Multiset<Item> getItems() {
     19         return items;
     20     }
     21 
     22     public double getTotal() {
     23         double total = 0;
     24         for (Item item : items.elementSet()) {
     25             int amount = getAmount(item);
     26             total += item.getTotal(amount);
     27         }
     28         return total;
     29     }
     30 
     31     public Integer getAmount(Item item) {
     32         return items.count(item);
     33     }
     34 
     35     public double getTotal(Discount[] discounts) {
     36         double total = getTotal();
     37         for (Discount discount : discounts) {
     38             if (discount.isValid(purchaseDate)) {
     39                 total -= discount.getDiscount(this);
     40             }
     41         }
     42         return total;
     43     }
     44 
     45     private Multiset<Item> toMultiset(Map<Item, Integer> map) {
     46         Multiset<Item> multiset = HashMultiset.create();
     47         for (Item item : map.keySet()) {
     48             multiset.add(item, map.get(item));
     49         }
     50         return multiset;
     51     }
     52 
     53     public void setPurchaseDate(LocalDate purchaseDate) {
     54         this.purchaseDate = purchaseDate;
     55     }
     56 }