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 }