killbill-memoizeit

jaxrs: add tests for closeAccount Signed-off-by: Pierre-Alexandre

5/2/2017 11:16:27 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index f826983..b702d09 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -34,7 +34,6 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -398,18 +397,16 @@ public class AccountResource extends JaxRsResourceBase {
     @DELETE
     @Path("/{accountId:" + UUID_PATTERN + "}")
     @Produces(APPLICATION_JSON)
-    @ApiOperation(value = "Delete account", hidden = true)
+    @ApiOperation(value = "Close account")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied")})
-    public Response closeAccount(@PathParam("accountId") final String accountIdStr,
-                                 @QueryParam(QUERY_CANCEL_ALL_SUBSCRPTIONS) @DefaultValue("false") final Boolean cancelAllSubscriptions,
+    public Response closeAccount(@PathParam(QUERY_ACCOUNT_ID) final String accountIdStr,
+                                 @QueryParam(QUERY_CANCEL_ALL_SUBSCRIPTIONS) @DefaultValue("false") final Boolean cancelAllSubscriptions,
                                  @QueryParam(QUERY_WRITE_OFF_UNPAID_INVOICES) @DefaultValue("false") final Boolean writeOffUnpaidInvoices,
                                  @QueryParam(QUERY_ITEM_ADJUST_UNPAID_INVOICES) @DefaultValue("false") final Boolean itemAdjustUnpaidInvoices,
                                  @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                  @HeaderParam(HDR_REASON) final String reason,
                                  @HeaderParam(HDR_COMMENT) final String comment,
                                  @javax.ws.rs.core.Context final HttpServletRequest request) throws SubscriptionApiException, AccountApiException, EntitlementApiException, InvoiceApiException, TagApiException {
-
-
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
         final UUID accountId = UUID.fromString(accountIdStr);
 
@@ -433,7 +430,7 @@ public class AccountResource extends JaxRsResourceBase {
             }
         }
 
-        final Collection<Invoice> unpaidInvoices =  writeOffUnpaidInvoices || itemAdjustUnpaidInvoices ? invoiceApi.getUnpaidInvoicesByAccountId(accountId, null, callContext) : ImmutableList.<Invoice>of();
+        final Collection<Invoice> unpaidInvoices = writeOffUnpaidInvoices || itemAdjustUnpaidInvoices ? invoiceApi.getUnpaidInvoicesByAccountId(accountId, null, callContext) : ImmutableList.<Invoice>of();
         if (writeOffUnpaidInvoices) {
             for (final Invoice cur : unpaidInvoices) {
                 invoiceApi.tagInvoiceAsWrittenOff(cur.getId(), callContext);
@@ -441,21 +438,21 @@ public class AccountResource extends JaxRsResourceBase {
         } else if (itemAdjustUnpaidInvoices) {
 
             final List<InvoiceItemType> ADJUSTABLE_TYPES = ImmutableList.<InvoiceItemType>of(InvoiceItemType.EXTERNAL_CHARGE,
-                                              InvoiceItemType.FIXED,
-                                              InvoiceItemType.RECURRING,
-                                              InvoiceItemType.TAX,
-                                              InvoiceItemType.USAGE,
-                                              InvoiceItemType.PARENT_SUMMARY);
+                                                                                             InvoiceItemType.FIXED,
+                                                                                             InvoiceItemType.RECURRING,
+                                                                                             InvoiceItemType.TAX,
+                                                                                             InvoiceItemType.USAGE,
+                                                                                             InvoiceItemType.PARENT_SUMMARY);
             final String description = comment != null ? comment : "Close Account";
             for (final Invoice invoice : unpaidInvoices) {
-                for (InvoiceItem item : invoice.getInvoiceItems()) {
+                for (final InvoiceItem item : invoice.getInvoiceItems()) {
                     if (ADJUSTABLE_TYPES.contains(item.getInvoiceItemType())) {
                         invoiceApi.insertInvoiceItemAdjustment(accountId, invoice.getId(), item.getId(), clock.getUTCToday(), description, callContext);
                     }
                 }
             }
         }
-        
+
         final BlockingStateJson blockingState = new BlockingStateJson(accountIdStr, "CLOSE_ACCOUNT", "account-service", true, false, false, null, BlockingStateType.ACCOUNT, null);
         addBlockingState(blockingState, accountIdStr, BlockingStateType.ACCOUNT, null, ImmutableList.<String>of(), createdBy, reason, comment, request);
 
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
index 0f9bb6f..b7d6a38 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
@@ -96,7 +96,7 @@ public interface JaxrsResource {
 
     public static final String QUERY_ACCOUNT_ID = "accountId";
 
-    public static final String QUERY_CANCEL_ALL_SUBSCRPTIONS = "cancelAllSubscriptions";
+    public static final String QUERY_CANCEL_ALL_SUBSCRIPTIONS = "cancelAllSubscriptions";
     public static final String QUERY_WRITE_OFF_UNPAID_INVOICES = "writeOffUnpaidInvoices";
     public static final String QUERY_ITEM_ADJUST_UNPAID_INVOICES = "itemAdjustUnpaidInvoices";
 

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index e614230..4334c33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>killbill-oss-parent</artifactId>
         <groupId>org.kill-bill.billing</groupId>
-        <version>0.140.27</version>
+        <version>0.140.28</version>
     </parent>
     <artifactId>killbill</artifactId>
     <version>0.18.8-SNAPSHOT</version>
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 9b64984..1378fd1 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
@@ -1,7 +1,7 @@
 /*
  * Copyright 2010-2013 Ning, Inc.
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
  *
  * The Billing Project 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
@@ -41,15 +41,14 @@ 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.EntitlementTransitionType;
 import org.killbill.billing.entitlement.api.Entitlement.EntitlementActionPolicy;
+import org.killbill.billing.entitlement.api.Entitlement.EntitlementState;
 import org.killbill.billing.entitlement.api.SubscriptionEventType;
 import org.killbill.billing.util.api.AuditLevel;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -323,11 +322,11 @@ public class TestEntitlement extends TestJaxrsBase {
     }
 
     @Test(groups = "slow", description = "Create a base entitlement and also addOns entitlements under the same bundle")
-    public void testEntitlementWithAddOns() throws Exception {
+    public void testEntitlementWithAddOnsWithWRITTEN_OFF() throws Exception {
         final DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
         clock.setDeltaFromReality(initialDate.getMillis() - clock.getUTCNow().getMillis());
 
-        final Account accountJson = createAccountWithDefaultPaymentMethod();
+        final Account accountJson = createAccount();
 
         final Subscription base = new Subscription();
         base.setAccountId(accountJson.getAccountId());
@@ -357,23 +356,43 @@ public class TestEntitlement extends TestJaxrsBase {
         subscriptions.add(base);
         subscriptions.add(addOn1);
         subscriptions.add(addOn2);
+
         final Bundle bundle = killBillClient.createSubscriptionWithAddOns(subscriptions, null, 10, requestOptions);
         assertNotNull(bundle);
         assertEquals(bundle.getExternalKey(), "base");
         assertEquals(bundle.getSubscriptions().size(), 3);
 
-        final List<Invoice> invoices = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, AuditLevel.FULL, requestOptions);
+        final List<Invoice> invoices = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, requestOptions);
         assertEquals(invoices.size(), 1);
+        assertEquals(invoices.get(0).getBalance().compareTo(BigDecimal.ZERO), 1);
+        assertEquals(killBillClient.getInvoiceTags(invoices.get(0).getInvoiceId(), requestOptions).size(), 0);
+
+        final Bundles accountBundles = killBillClient.getAccountBundles(accountJson.getAccountId(), requestOptions);
+        assertEquals(accountBundles.size(), 1);
+        for (final Subscription subscription : accountBundles.get(0).getSubscriptions()) {
+            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        }
+
+        killBillClient.closeAccount(accountJson.getAccountId(), true, true, false, requestOptions);
+
+        final Bundles accountBundlesAfterClose = killBillClient.getAccountBundles(accountJson.getAccountId(), requestOptions);
+        assertEquals(accountBundlesAfterClose.size(), 1);
+        for (final Subscription subscription : accountBundlesAfterClose.get(0).getSubscriptions()) {
+            assertEquals(subscription.getState(), EntitlementState.CANCELLED);
+        }
+
+        final List<Invoice> invoicesAfterClose = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, requestOptions);
+        assertEquals(invoicesAfterClose.size(), 1);
+        assertEquals(invoicesAfterClose.get(0).getBalance().compareTo(BigDecimal.ZERO), 0);
+        assertEquals(killBillClient.getInvoiceTags(invoicesAfterClose.get(0).getInvoiceId(), requestOptions).size(), 1);
     }
 
-
-
     @Test(groups = "slow", description = "Create a bulk of base entitlement and addOns under the same transaction")
-    public void testCreateEntitlementsWithAddOns() throws Exception {
+    public void testCreateEntitlementsWithAddOnsThenCloseAccountWithItemAdjustment() throws Exception {
         final DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
         clock.setDeltaFromReality(initialDate.getMillis() - clock.getUTCNow().getMillis());
 
-        final Account accountJson = createAccountWithDefaultPaymentMethod();
+        final Account accountJson = createAccount();
 
         final Subscription base = new Subscription();
         base.setAccountId(accountJson.getAccountId());
@@ -406,13 +425,37 @@ public class TestEntitlement extends TestJaxrsBase {
         bulkList.add(new BulkBaseSubscriptionAndAddOns(subscriptions));
 
         final Bundles bundles = killBillClient.createSubscriptionsWithAddOns(bulkList, null, 10, requestOptions);
-
         assertNotNull(bundles);
         assertEquals(bundles.size(), 2);
         assertFalse(bundles.get(0).getExternalKey().equals(bundles.get(1).getExternalKey()));
 
         final List<Invoice> invoices = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, requestOptions);
         assertEquals(invoices.size(), 1);
+        assertEquals(invoices.get(0).getBalance().compareTo(BigDecimal.ZERO), 1);
+        assertEquals(killBillClient.getInvoiceTags(invoices.get(0).getInvoiceId(), requestOptions).size(), 0);
+
+        final Bundles accountBundles = killBillClient.getAccountBundles(accountJson.getAccountId(), requestOptions);
+        assertEquals(accountBundles.size(), 2);
+        for (final Bundle bundle : accountBundles) {
+            for (final Subscription subscription : bundle.getSubscriptions()) {
+                assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+            }
+        }
+
+        killBillClient.closeAccount(accountJson.getAccountId(), true, false, true, requestOptions);
+
+        final Bundles accountBundlesAfterClose = killBillClient.getAccountBundles(accountJson.getAccountId(), requestOptions);
+        assertEquals(accountBundlesAfterClose.size(), 2);
+        for (final Bundle bundle : accountBundlesAfterClose) {
+            for (final Subscription subscription : bundle.getSubscriptions()) {
+                assertEquals(subscription.getState(), EntitlementState.CANCELLED);
+            }
+        }
+
+        final List<Invoice> invoicesAfterClose = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, requestOptions);
+        assertEquals(invoicesAfterClose.size(), 1);
+        assertEquals(invoicesAfterClose.get(0).getBalance().compareTo(BigDecimal.ZERO), 0);
+        assertEquals(killBillClient.getInvoiceTags(invoicesAfterClose.get(0).getInvoiceId(), requestOptions).size(), 0);
     }
 
     @Test(groups = "slow", description = "Create a bulk of base entitlements and addOns under the same transaction",
@@ -497,7 +540,6 @@ public class TestEntitlement extends TestJaxrsBase {
         assertEquals(invoices.size(), 2);
     }
 
-
     @Test(groups = "slow", description = "Can create an entitlement in the future")
     public void testCreateEntitlementInTheFuture() throws Exception {
         final DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);
@@ -594,8 +636,6 @@ public class TestEntitlement extends TestJaxrsBase {
         Assert.assertEquals(result2.getBillCycleDayLocal(), new Integer(9));
     }
 
-
-
     @Test(groups = "slow", description = "Can create subscription and change plan using planName")
     public void testEntitlementUsingPlanName() throws Exception {
         final DateTime initialDate = new DateTime(2012, 4, 25, 0, 3, 42, 0);