killbill-aplcache

beatrix tests

2/1/2012 7:29:50 PM

Details

diff --git a/entitlement/pom.xml b/entitlement/pom.xml
index 4d51904..83388f8 100644
--- a/entitlement/pom.xml
+++ b/entitlement/pom.xml
@@ -48,11 +48,12 @@
         <dependency>
             <groupId>com.ning.billing</groupId>
             <artifactId>killbill-catalog</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.ning.billing</groupId>
             <artifactId>killbill-catalog</artifactId>
-            <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
index 1010e59..100d184 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
@@ -17,12 +17,15 @@
 package com.ning.billing.entitlement.api.billing;
 
 import java.math.BigDecimal;
+import java.util.Iterator;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.UUID;
 
 import javax.annotation.Nullable;
 
 import org.joda.time.DateTime;
+import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.DefaultPrice;
@@ -39,18 +42,86 @@ import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
 
 public class TestDefaultBillingEvent {
+	public static final UUID ID_ZERO = new UUID(0L,0L);
+	public static final UUID ID_ONE = new UUID(0L,1L);
+	public static final UUID ID_TWO = new UUID(0L,2L);
 
 	@Test(groups={"fast"})
-	public void testEventOrdering() {
-		Subscription subscription = new BrainDeadSubscription();
-
-		BillingEvent event1 = createEvent(subscription, new DateTime("2012-01-31T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+	public void testEventOrderingSubscription() {
+	
+		BillingEvent event0 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-31T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		BillingEvent event1 = createEvent(subscription(ID_ONE), new DateTime("2012-01-31T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		BillingEvent event2 = createEvent(subscription(ID_TWO), new DateTime("2012-01-31T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		
+		SortedSet<BillingEvent> set = new TreeSet<BillingEvent>();
+		set.add(event2);
+		set.add(event1);
+		set.add(event0);
+		
+		Iterator<BillingEvent> it = set.iterator();
+		
+		Assert.assertEquals(event0, it.next());
+		Assert.assertEquals(event1, it.next());
+		Assert.assertEquals(event2, it.next());
+	}
+	
+	@Test(groups={"fast"})
+	public void testEventOrderingDate() {
+	
+		BillingEvent event0 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-01T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		BillingEvent event1 = createEvent(subscription(ID_ZERO), new DateTime("2012-02-01T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		BillingEvent event2 = createEvent(subscription(ID_ZERO), new DateTime("2012-03-01T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		
+		SortedSet<BillingEvent> set = new TreeSet<BillingEvent>();
+		set.add(event2);
+		set.add(event1);
+		set.add(event0);
+		
+		Iterator<BillingEvent> it = set.iterator();
+		
+		Assert.assertEquals(event0, it.next());
+		Assert.assertEquals(event1, it.next());
+		Assert.assertEquals(event2, it.next());
+	}
+	
+	@Test(groups={"fast"})
+	public void testEventOrderingType() {
+	
+		BillingEvent event0 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-01T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		BillingEvent event1 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-01T00:02:04.000Z"), SubscriptionTransitionType.CHANGE);
+		BillingEvent event2 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-01T00:02:04.000Z"), SubscriptionTransitionType.CANCEL);
 		
 		SortedSet<BillingEvent> set = new TreeSet<BillingEvent>();
+		set.add(event2);
+		set.add(event1);
+		set.add(event0);
+		
+		Iterator<BillingEvent> it = set.iterator();
+		
+		Assert.assertEquals(event0, it.next());
+		Assert.assertEquals(event1, it.next());
+		Assert.assertEquals(event2, it.next());
+	}
+	
+	@Test(groups={"fast"})
+	public void testEventOrderingMix() {
+	
+		BillingEvent event0 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-01T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		BillingEvent event1 = createEvent(subscription(ID_ZERO), new DateTime("2012-01-02T00:02:04.000Z"), SubscriptionTransitionType.CHANGE);
+		BillingEvent event2 = createEvent(subscription(ID_ONE), new DateTime("2012-01-01T00:02:04.000Z"), SubscriptionTransitionType.CANCEL);
 		
+		SortedSet<BillingEvent> set = new TreeSet<BillingEvent>();
+		set.add(event2);
 		set.add(event1);
+		set.add(event0);
 		
+		Iterator<BillingEvent> it = set.iterator();
+		
+		Assert.assertEquals(event0, it.next());
+		Assert.assertEquals(event1, it.next());
+		Assert.assertEquals(event2, it.next());
 	}
+
 	
 	private BillingEvent createEvent(Subscription sub, DateTime effectiveDate, SubscriptionTransitionType type) {
 		InternationalPrice zeroPrice = new MockInternationalPrice(new DefaultPrice(BigDecimal.ZERO, Currency.USD));
@@ -71,5 +142,13 @@ public class TestDefaultBillingEvent {
 				new MockInternationalPrice(new DefaultPrice(fixedRate, Currency.USD)),
 				BillingPeriod.MONTHLY, phaseType);
 	}
+	
+	private Subscription subscription(final UUID id) {
+		return new BrainDeadSubscription() {
+			public UUID getId() {
+				return id;
+			}
+		};
+	}
 
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
index 94e4065..9bbc0c7 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
@@ -165,7 +165,7 @@ public class DefaultInvoiceGenerator implements InvoiceGenerator {
             BigDecimal fixedPrice = firstEvent.getFixedPrice() == null ? null : firstEvent.getFixedPrice().getPrice(targetCurrency);
 
             BigDecimal numberOfBillingPeriods;
-            BigDecimal recurringAmount =null;
+            BigDecimal recurringAmount = null;
 
             if (recurringRate != null) {
                 numberOfBillingPeriods = calculateNumberOfBillingPeriods(firstEvent, secondEvent, targetDate);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceItem.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceItem.java
index b4aace1..508fab8 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceItem.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceItem.java
@@ -17,6 +17,8 @@
 package com.ning.billing.invoice.model;
 
 import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.invoice.api.InvoiceItem;
 import org.joda.time.DateTime;
 
@@ -153,7 +155,8 @@ public class DefaultInvoiceItem implements InvoiceItem {
                 return 1;
             }
 
-            return getStartDate().compareTo(that.getStartDate());
+            int compareStartDates = getStartDate().compareTo(that.getStartDate());
+            return compareStartDates;
         } else {
             return compareSubscriptions;
         }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java
index fa7921c..13ccb60 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemList.java
@@ -83,6 +83,8 @@ public class InvoiceItemList extends ArrayList<InvoiceItem> {
 
             if (fixedAmountNull && (recurringRateNull || recurringAmountZero)) {
                 iterator.remove();
+            } else if (item.getStartDate().compareTo(item.getEndDate()) == 0) {
+                iterator.remove();
             }
         }
     }