killbill-aplcache

Merge branch 'inv-ent-integration' of github.com:ning/killbill

2/1/2012 5:16:13 PM

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
index a1cf572..2628b36 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
@@ -23,6 +23,7 @@ import com.ning.billing.catalog.api.InternationalPrice;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
 
 public interface BillingEvent extends Comparable<BillingEvent> {
 
@@ -88,4 +89,9 @@ public interface BillingEvent extends Comparable<BillingEvent> {
      * @return the recurring price for the phase
      */
     public InternationalPrice getRecurringPrice();
+
+	/**
+	 * @return the transition type of the underlying subscription event that triggered this
+	 */
+	public SubscriptionTransitionType getTransitionType();
 }
diff --git a/beatrix/src/test/resources/resource.properties b/beatrix/src/test/resources/resource.properties
index 1cf5ad0..cc82754 100644
--- a/beatrix/src/test/resources/resource.properties
+++ b/beatrix/src/test/resources/resource.properties
@@ -1,4 +1,4 @@
-killbill.catalog.uri=file:beatrix/src/test/resources/catalogSample.xml
+killbill.catalog.uri=file:src/test/resources/catalogSample.xml
 killbill.entitlement.dao.claim.time=60000
 killbill.entitlement.dao.ready.max=1
 killbill.entitlement.engine.notifications.sleep=500
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadSubscription.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadSubscription.java
new file mode 100644
index 0000000..e55ba79
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadSubscription.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.billing;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
+
+public class BrainDeadSubscription implements Subscription {
+
+	@Override
+	public void cancel(DateTime requestedDate, boolean eot)
+			throws EntitlementUserApiException {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void uncancel() throws EntitlementUserApiException {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void changePlan(String productName, BillingPeriod term,
+			String planSet, DateTime requestedDate)
+			throws EntitlementUserApiException {
+		throw new UnsupportedOperationException();
+
+		
+	}
+
+	@Override
+	public void pause() throws EntitlementUserApiException {
+		throw new UnsupportedOperationException();
+
+		
+	}
+
+	@Override
+	public void resume() throws EntitlementUserApiException {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public UUID getId() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public UUID getBundleId() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public SubscriptionState getState() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public DateTime getStartDate() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public DateTime getEndDate() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public Plan getCurrentPlan() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public String getCurrentPriceList() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public PlanPhase getCurrentPhase() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public DateTime getChargedThroughDate() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public DateTime getPaidThroughDate() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public List<SubscriptionTransition> getActiveTransitions() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public List<SubscriptionTransition> getAllTransitions() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public SubscriptionTransition getPendingTransition() {
+		throw new UnsupportedOperationException();
+		
+	}
+
+}
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
new file mode 100644
index 0000000..15a9061
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultBillingEvent.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.billing;
+
+import java.math.BigDecimal;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+import org.joda.time.DateTime;
+import org.testng.annotations.Test;
+
+import com.ning.billing.catalog.DefaultPrice;
+import com.ning.billing.catalog.MockInternationalPrice;
+import com.ning.billing.catalog.MockPlan;
+import com.ning.billing.catalog.MockPlanPhase;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.catalog.api.InternationalPrice;
+import com.ning.billing.catalog.api.PhaseType;
+import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
+
+public class TestDefaultBillingEvent {
+
+	@Test(groups={"fast"})
+	public void testEventOrdering() {
+		Subscription subscription = new BrainDeadSubscription();
+		;
+		BillingEvent event1 = createEvent(subscription, new DateTime("2012-01-31T00:02:04.000Z"), SubscriptionTransitionType.CREATE);
+		
+		SortedSet<BillingEvent> set = new TreeSet<BillingEvent>();
+		
+		set.add(event1);
+		
+	}
+	
+	private BillingEvent createEvent(Subscription sub, DateTime effectiveDate, SubscriptionTransitionType type) {
+		InternationalPrice zeroPrice = new MockInternationalPrice(new DefaultPrice(BigDecimal.ZERO, Currency.USD));
+		int billCycleDay = 1;
+
+		Plan shotgun = new MockPlan();
+		PlanPhase shotgunMonthly = createMockMonthlyPlanPhase(null, BigDecimal.ZERO, PhaseType.TRIAL);
+		
+		return new DefaultBillingEvent(sub , effectiveDate,
+				shotgun, shotgunMonthly,
+				zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
+				BillingModeType.IN_ADVANCE, "Test Event 1", type);
+	}
+
+	private MockPlanPhase createMockMonthlyPlanPhase(@Nullable final BigDecimal recurringRate,
+			final BigDecimal fixedRate, PhaseType phaseType) {
+		return new MockPlanPhase(new MockInternationalPrice(new DefaultPrice(recurringRate, Currency.USD)),
+				new MockInternationalPrice(new DefaultPrice(fixedRate, Currency.USD)),
+				BillingPeriod.MONTHLY, phaseType);
+	}
+
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
index 8ed9ece..2369467 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTests.java
@@ -27,6 +27,7 @@ import com.ning.billing.entitlement.api.billing.BillingEvent;
 import com.ning.billing.entitlement.api.billing.BillingModeType;
 import com.ning.billing.entitlement.api.billing.DefaultBillingEvent;
 import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePayment;
@@ -487,7 +488,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
         DateTime effectiveDate1 = new DateTime(2011, 2, 1, 0, 0, 0, 0);
         BillingEvent event1 = new DefaultBillingEvent(subscription, effectiveDate1, plan1, phase1, null,
                                                       recurringPrice, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                                                      "testEvent1");
+                                                      "testEvent1", SubscriptionTransitionType.CREATE);
 
         BillingEventSet events = new BillingEventSet();
         events.add(event1);
@@ -505,7 +506,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
         DateTime effectiveDate2 = new DateTime(2011, 2, 15, 0, 0, 0, 0);
         BillingEvent event2 = new DefaultBillingEvent(subscription, effectiveDate2, plan2, phase2, null,
                                                       recurringPrice2, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                                                      "testEvent2");
+                                                      "testEvent2", SubscriptionTransitionType.CREATE);
         events.add(event2);
 
         // second invoice should be for one half (14/28 days) the difference between the rate plans
@@ -536,7 +537,7 @@ public class InvoiceDaoTests extends InvoiceDaoTestBase {
 
         BillingEvent event = new DefaultBillingEvent(subscription, effectiveDate, plan, phase, null,
                                                      recurringPrice, BillingPeriod.MONTHLY, 15, BillingModeType.IN_ADVANCE,
-                                                     "testEvent");
+                                                     "testEvent", SubscriptionTransitionType.CREATE);
         BillingEventSet events = new BillingEventSet();
         events.add(event);
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
index 7f7f391..a61690f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
@@ -32,6 +32,7 @@ import com.ning.billing.entitlement.api.billing.DefaultBillingEvent;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
 import com.ning.billing.entitlement.api.user.SubscriptionFactory.SubscriptionBuilder;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.dao.MockSubscription;
@@ -459,7 +460,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
         BillingEvent event1 = new DefaultBillingEvent(subscription, new DateTime("2012-01-31T00:02:04.000Z"),
                                                       shotgun, shotgunMonthly,
                                                       zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
-                                                      BillingModeType.IN_ADVANCE, "Test Event 1");
+                                                      BillingModeType.IN_ADVANCE, "Test Event 1", SubscriptionTransitionType.CREATE);
         events.add(event1);
 
 
@@ -468,7 +469,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
         BillingEvent event2 = new DefaultBillingEvent(subscription, new DateTime("2012-01-31T00:02:04.000Z"),
                                                       assaultRifle, assaultRifleMonthly,
                                                       zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
-                                                      BillingModeType.IN_ADVANCE, "Test Event 2");
+                                                      BillingModeType.IN_ADVANCE, "Test Event 2", SubscriptionTransitionType.CREATE);
         events.add(event2);
 
         Plan pistol = new MockPlan();
@@ -479,14 +480,14 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
         BillingEvent event3 = new DefaultBillingEvent(subscription, new DateTime("2012-01-31T00:02:05.000Z"),
                                                       pistol, pistolMonthlyTrial,
                                                       zeroPrice, null, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
-                                                      BillingModeType.IN_ADVANCE, "Test Event 3");
+                                                      BillingModeType.IN_ADVANCE, "Test Event 3", SubscriptionTransitionType.CREATE);
         events.add(event3);
 
 
         BillingEvent event4 = new DefaultBillingEvent(subscription, new DateTime("2012-03-01T00:02:04.000Z"),
                                                       pistol, pistolMonthlyEvergreen,
                                                       null, pistolEvergreenPrice, BillingPeriod.MONTHLY, billCycleDay,
-                                                      BillingModeType.IN_ADVANCE, "Test Event 4");
+                                                      BillingModeType.IN_ADVANCE, "Test Event 4",SubscriptionTransitionType.CREATE);
         events.add(event4);
 
         InvoiceItemList items = new InvoiceItemList();
@@ -571,7 +572,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
         return new DefaultBillingEvent(sub, startDate, plan, planPhase,
                                        planPhase.getFixedPrice(),
                                        planPhase.getRecurringPrice(), planPhase.getBillingPeriod(),
-                                       billCycleDay, BillingModeType.IN_ADVANCE,"Test");
+                                       billCycleDay, BillingModeType.IN_ADVANCE,"Test", SubscriptionTransitionType.CREATE);
     }
 
     private void testInvoiceGeneration(final BillingEventSet events, final InvoiceItemList existingInvoiceItems,