killbill-aplcache

Merge pull request #594 from javier-gomez-hs/jgomez-issue-585 Issue

8/4/2016 8:53:25 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
index d9df67f..563e877 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
@@ -66,6 +66,7 @@ import org.killbill.billing.entitlement.api.SubscriptionBundle;
 import org.killbill.billing.events.BlockingTransitionInternalEvent;
 import org.killbill.billing.events.EffectiveSubscriptionInternalEvent;
 import org.killbill.billing.events.InvoiceCreationInternalEvent;
+import org.killbill.billing.events.InvoicePaymentErrorInternalEvent;
 import org.killbill.billing.events.NullInvoiceInternalEvent;
 import org.killbill.billing.events.PaymentErrorInternalEvent;
 import org.killbill.billing.events.PaymentInfoInternalEvent;
@@ -619,6 +620,12 @@ public class SubscriptionResource extends JaxRsResourceBase {
             log.info("Got event PaymentPluginError token='{}'", event.getUserToken());
             notifyForCompletion();
         }
+
+        @Override
+        public void onInvoicePaymentError(final InvoicePaymentErrorInternalEvent event) {
+            log.info("Got event InvoicePaymentError token='{}'", event.getUserToken());
+            notifyForCompletion();
+        }
     }
 
     private interface EntitlementCallCompletionCallback<T> {
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
index feac496..cdc1368 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
@@ -36,6 +36,7 @@ import org.killbill.billing.client.model.Bundle;
 import org.killbill.billing.client.model.Invoice;
 import org.killbill.billing.client.model.PhasePriceOverride;
 import org.killbill.billing.client.model.Subscription;
+import org.killbill.billing.client.model.Tags;
 import org.killbill.billing.entitlement.api.Entitlement.EntitlementActionPolicy;
 import org.killbill.billing.util.api.AuditLevel;
 import org.testng.Assert;
@@ -299,6 +300,36 @@ public class TestEntitlement extends TestJaxrsBase {
         Assert.assertTrue(objFromJson.equals(entitlementJson));
     }
 
+    @Test(groups = "slow", description = "Can create an entitlement with an account with autoPayOff")
+    public void testCreateEntitlementWithAutoPayOff() throws Exception {
+        final Account accountJson = createAccount();
+        assertNotNull(accountJson);
+
+        // assign autoPaymentOff tag to account
+        Tags tags = killBillClient.createAccountTag(accountJson.getAccountId(), new UUID(0L, 1L), requestOptions);
+        assertEquals(tags.get(0).getTagDefinitionName(), "AUTO_PAY_OFF");
+
+        // verify that number of invoices and payments for account is still 0
+        assertEquals(killBillClient.getInvoicesForAccount(accountJson.getAccountId(), requestOptions).size(), 0);
+        assertEquals(killBillClient.getPaymentsForAccount(accountJson.getAccountId(), requestOptions).size(), 0);
+
+        // create a subscription with no trial plan
+        final Subscription input = new Subscription();
+        input.setAccountId(accountJson.getAccountId());
+        input.setProductName("Blowdart");
+        input.setProductCategory(ProductCategory.BASE);
+        input.setBillingPeriod(BillingPeriod.MONTHLY);
+        input.setPriceList("notrial");
+        final Subscription subscriptionJson = killBillClient.createSubscription(input, null, 10, requestOptions);
+        assertNotNull(subscriptionJson);
+
+        // verify that number of invoices is now 1
+        assertEquals(killBillClient.getInvoicesForAccount(accountJson.getAccountId(), requestOptions).size(), 1);
+
+        // verify that number of payments is still 0 (no attempts)
+        assertEquals(killBillClient.getPaymentsForAccount(accountJson.getAccountId(), requestOptions).size(), 0);
+    }
+
     @Test(groups = "slow", description = "Verify we can move the BCD associated with the subscription")
     public void testMoveEntitlementBCD() throws Exception {
         final DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
diff --git a/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestBase.java b/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestBase.java
index 5114def..f48a2e8 100644
--- a/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestBase.java
+++ b/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestBase.java
@@ -29,6 +29,7 @@ import org.killbill.billing.events.BlockingTransitionInternalEvent;
 import org.killbill.billing.events.BusInternalEvent;
 import org.killbill.billing.events.EffectiveSubscriptionInternalEvent;
 import org.killbill.billing.events.InvoiceCreationInternalEvent;
+import org.killbill.billing.events.InvoicePaymentErrorInternalEvent;
 import org.killbill.billing.events.NullInvoiceInternalEvent;
 import org.killbill.billing.events.PaymentErrorInternalEvent;
 import org.killbill.billing.events.PaymentInfoInternalEvent;
@@ -131,6 +132,9 @@ public class CompletionUserRequestBase implements CompletionUserRequest {
             case PAYMENT_PLUGIN_ERROR:
                 onPaymentPluginError((PaymentPluginErrorInternalEvent) curEvent);
                 break;
+            case INVOICE_PAYMENT_ERROR:
+                onInvoicePaymentError((InvoicePaymentErrorInternalEvent) curEvent);
+                break;
             default:
                 throw new RuntimeException("Unexpected event type " + curEvent.getBusEventType());
         }
@@ -172,4 +176,8 @@ public class CompletionUserRequestBase implements CompletionUserRequest {
     @Override
     public void onPaymentPluginError(final PaymentPluginErrorInternalEvent curEvent) {
     }
+
+    @Override
+    public void onInvoicePaymentError(final InvoicePaymentErrorInternalEvent curEvent) {
+    }
 }
diff --git a/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestWaiter.java b/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestWaiter.java
index 294149c..6876550 100644
--- a/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestWaiter.java
+++ b/util/src/main/java/org/killbill/billing/util/userrequest/CompletionUserRequestWaiter.java
@@ -25,6 +25,7 @@ import org.killbill.billing.events.BlockingTransitionInternalEvent;
 import org.killbill.billing.events.BusInternalEvent;
 import org.killbill.billing.events.EffectiveSubscriptionInternalEvent;
 import org.killbill.billing.events.InvoiceCreationInternalEvent;
+import org.killbill.billing.events.InvoicePaymentErrorInternalEvent;
 import org.killbill.billing.events.NullInvoiceInternalEvent;
 import org.killbill.billing.events.PaymentErrorInternalEvent;
 import org.killbill.billing.events.PaymentInfoInternalEvent;
@@ -51,4 +52,6 @@ public interface CompletionUserRequestWaiter {
     public void onPaymentError(final PaymentErrorInternalEvent curEvent);
 
     public void onPaymentPluginError(final PaymentPluginErrorInternalEvent curEvent);
+
+    public void onInvoicePaymentError(final InvoicePaymentErrorInternalEvent curEvent);
 }