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 }