tdd-java-demo
tdd java demo with micro-commits
git clone https://9o.is/git/tdd-java-demo.git
Discount.java
(1517B)
1 package takehome.model;
2
3 import com.google.common.collect.HashMultiset;
4 import com.google.common.collect.Multiset;
5 import com.google.common.collect.Multisets;
6
7 import java.time.LocalDate;
8 import java.util.Arrays;
9
10 public class Discount {
11 private final Multiset<Item> items;
12 private final double amount;
13 private final LocalDate startDate;
14 private final LocalDate endDate;
15
16 public Discount(double amount, Item ...items) {
17 this(amount, LocalDate.MIN, LocalDate.MAX, items);
18 }
19
20 public Discount(double amount, LocalDate startDate, LocalDate endDate, Item... items) {
21 this.amount = amount;
22 this.startDate = startDate;
23 this.endDate = endDate;
24 this.items = HashMultiset.create(Arrays.asList(items));
25 }
26
27 public double getAmount() {
28 return amount;
29 }
30
31 @SuppressWarnings("UnstableApiUsage")
32 public double getDiscount(Basket basket) {
33 Multiset<Item> basketSet = basket.getItems();
34
35 int occurrences = 0;
36 boolean occurrence = Multisets.containsOccurrences(basketSet, items);
37
38 while (occurrence) {
39 occurrences++;
40 basketSet = Multisets.difference(basketSet, items);
41 occurrence = Multisets.containsOccurrences(basketSet, items);
42 }
43
44 return amount * occurrences;
45 }
46
47 public boolean isValid(LocalDate date) {
48 return date.equals(startDate) || date.equals(endDate) ||
49 (date.isAfter(startDate) && date.isBefore(endDate));
50 }
51 }