killbill-memoizeit

server: fix tests failures Signed-off-by: Pierre-Alexandre

1/2/2014 2:27:16 PM

Details

diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 6d0feb4..d3b627f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -147,7 +147,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
 
     @Override
     public Invoice getInvoiceByNumber(final Integer number, final TenantContext context) throws InvoiceApiException {
-        // TODO (PIERRE) Populate accountRecordId in callcontext
+        // The account record id will be populated in the DAO
         return new DefaultInvoice(dao.getByNumber(number, internalCallContextFactory.createInternalTenantContext(context)));
     }
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index 1ea4350..754b74d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -43,6 +43,7 @@ import com.ning.billing.invoice.api.InvoicePaymentType;
 import com.ning.billing.invoice.api.user.DefaultInvoiceAdjustmentEvent;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.util.cache.CacheControllerDispatcher;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.dao.NonEntityDao;
 import com.ning.billing.util.entity.dao.EntityDaoBase;
 import com.ning.billing.util.entity.dao.EntitySqlDao;
@@ -71,6 +72,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
 
     private final NextBillingDatePoster nextBillingDatePoster;
     private final PersistentBus eventBus;
+    private final InternalCallContextFactory internalCallContextFactory;
     private final InvoiceDaoHelper invoiceDaoHelper;
     private final CBADao cbaDao;
 
@@ -80,10 +82,12 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
                              final PersistentBus eventBus,
                              final Clock clock,
                              final CacheControllerDispatcher cacheControllerDispatcher,
-                             final NonEntityDao nonEntityDao) {
+                             final NonEntityDao nonEntityDao,
+                             final InternalCallContextFactory internalCallContextFactory) {
         super(new EntitySqlDaoTransactionalJdbiWrapper(dbi, clock, cacheControllerDispatcher, nonEntityDao), InvoiceSqlDao.class);
         this.nextBillingDatePoster = nextBillingDatePoster;
         this.eventBus = eventBus;
+        this.internalCallContextFactory = internalCallContextFactory;
         this.invoiceDaoHelper = new InvoiceDaoHelper();
         this.cbaDao = new CBADao();
     }
@@ -180,7 +184,12 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
                 if (invoice == null) {
                     throw new InvoiceApiException(ErrorCode.INVOICE_NUMBER_NOT_FOUND, number.longValue());
                 }
-                invoiceDaoHelper.populateChildren(invoice, entitySqlDaoWrapperFactory, context);
+
+                // The context may not contain the account record id at this point - we couldn't do it in the API above
+                // as we couldn't get access to the invoice object until now.
+                final InternalTenantContext contextWithAccountRecordId = internalCallContextFactory.createInternalTenantContext(invoice.getAccountId(), context);
+                invoiceDaoHelper.populateChildren(invoice, entitySqlDaoWrapperFactory, contextWithAccountRecordId);
+
                 return invoice;
             }
         });
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJson.java
index f142361..b3ed9d8 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJson.java
@@ -80,11 +80,7 @@ public class InvoiceJson extends JsonBase {
     }
 
     public InvoiceJson(final Invoice input) {
-        this(input, null, null, null);
-    }
-
-    public InvoiceJson(final Invoice input, @Nullable final List<AuditLog> auditLogs) {
-        this(input, null, null, auditLogs);
+        this(input, false, null);
     }
 
     public InvoiceJson(final Invoice input, final String bundleKeys, final List<CreditJson> credits, final List<AuditLog> auditLogs) {
@@ -93,11 +89,13 @@ public class InvoiceJson extends JsonBase {
              input.getBalance(), input.getAccountId().toString(), bundleKeys, credits, null, toAuditLogJson(auditLogs));
     }
 
-    public InvoiceJson(final Invoice input, final AccountAuditLogs accountAuditLogs) {
-        super(toAuditLogJson(accountAuditLogs.getAuditLogsForInvoice(input.getId())));
+    public InvoiceJson(final Invoice input, final boolean withItems, @Nullable final AccountAuditLogs accountAuditLogs) {
+        super(toAuditLogJson(accountAuditLogs == null ? null : accountAuditLogs.getAuditLogsForInvoice(input.getId())));
         this.items = new ArrayList<InvoiceItemJson>(input.getInvoiceItems().size());
-        for (final InvoiceItem item : input.getInvoiceItems()) {
-            this.items.add(new InvoiceItemJson(item, accountAuditLogs.getAuditLogsForInvoiceItem(item.getId())));
+        if (withItems) {
+            for (final InvoiceItem item : input.getInvoiceItems()) {
+                this.items.add(new InvoiceItemJson(item, accountAuditLogs == null ? null : accountAuditLogs.getAuditLogsForInvoiceItem(item.getId())));
+            }
         }
         this.amount = input.getChargedAmount();
         this.currency = input.getCurrency().toString();
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index 0cca7e0..eb44ad3 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -430,23 +430,13 @@ public class AccountResource extends JaxRsResourceBase {
 
         final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(accountId, auditMode.getLevel(), tenantContext);
 
-        if (withItems) {
-            final List<InvoiceJson> result = new LinkedList<InvoiceJson>();
-            for (final Invoice invoice : invoices) {
-                result.add(new InvoiceJson(invoice, accountAuditLogs));
-            }
-
-            return Response.status(Status.OK).entity(result).build();
-        } else {
-            final List<InvoiceJson> result = new LinkedList<InvoiceJson>();
-            for (final Invoice invoice : invoices) {
-                result.add(new InvoiceJson(invoice, accountAuditLogs.getAuditLogsForInvoice(invoice.getId())));
-            }
-
-            return Response.status(Status.OK).entity(result).build();
+        final List<InvoiceJson> result = new LinkedList<InvoiceJson>();
+        for (final Invoice invoice : invoices) {
+            result.add(new InvoiceJson(invoice, withItems, accountAuditLogs));
         }
-    }
 
+        return Response.status(Status.OK).entity(result).build();
+    }
 
     /*
      * ************************** PAYMENTS ********************************
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
index 0af2810..dbd5d85 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
@@ -119,7 +119,7 @@ public class InvoiceResource extends JaxRsResourceBase {
         if (invoice == null) {
             throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceId);
         } else {
-            final InvoiceJson json = new InvoiceJson(invoice, accountAuditLogs);
+            final InvoiceJson json = new InvoiceJson(invoice, withItems, accountAuditLogs);
             return Response.status(Status.OK).entity(json).build();
         }
     }
@@ -138,7 +138,7 @@ public class InvoiceResource extends JaxRsResourceBase {
         if (invoice == null) {
             throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceNumber);
         } else {
-            final InvoiceJson json = new InvoiceJson(invoice, accountAuditLogs);
+            final InvoiceJson json = new InvoiceJson(invoice, withItems, accountAuditLogs);
             return Response.status(Status.OK).entity(json).build();
         }
     }
diff --git a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
index 86e186a..5782bd8 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
@@ -432,14 +432,22 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
         return getInvoiceWithAudits(invoiceId, AuditLevel.NONE);
     }
 
+    protected InvoiceJson getInvoice(final String invoiceId, final Boolean withItems) throws IOException {
+        return doGetInvoice(invoiceId, withItems, InvoiceJson.class, AuditLevel.NONE);
+    }
+
     protected InvoiceJson getInvoiceWithAudits(final String invoiceId, final AuditLevel auditLevel) throws IOException {
-        return doGetInvoice(invoiceId, Boolean.FALSE, InvoiceJson.class, auditLevel);
+        return doGetInvoice(invoiceId, Boolean.TRUE, InvoiceJson.class, auditLevel);
     }
 
     protected InvoiceJson getInvoice(final Integer invoiceNumber) throws IOException {
         return getInvoice(invoiceNumber.toString());
     }
 
+    protected InvoiceJson getInvoice(final Integer invoiceNumber, final Boolean withItems) throws IOException {
+        return doGetInvoice(invoiceNumber.toString(), withItems, InvoiceJson.class, AuditLevel.NONE);
+    }
+
     protected InvoiceJson getInvoiceWithItems(final String invoiceId) throws IOException {
         return getInvoiceWithItemsWithAudits(invoiceId, AuditLevel.NONE);
     }
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
index 34a661e..c58fc6f 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
@@ -37,6 +37,7 @@ import com.ning.billing.util.api.AuditLevel;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
 
 public class TestInvoice extends TestJaxrsBase {
 
@@ -60,8 +61,15 @@ public class TestInvoice extends TestJaxrsBase {
             Assert.assertNull(auditLogJson.getComments());
         }
 
-        // Check we can retrieve an individual invoice
         final InvoiceJson invoiceJson = invoices.get(0);
+
+        // Check get with & without items
+        assertTrue(getInvoice(invoiceJson.getInvoiceId(), Boolean.FALSE).getItems().isEmpty());
+        assertTrue(getInvoice(invoiceJson.getInvoiceNumber(), Boolean.FALSE).getItems().isEmpty());
+        assertEquals(getInvoice(invoiceJson.getInvoiceId(), Boolean.TRUE).getItems().size(), invoiceJson.getItems().size());
+        assertEquals(getInvoice(invoiceJson.getInvoiceNumber(), Boolean.TRUE).getItems().size(), invoiceJson.getItems().size());
+
+        // Check we can retrieve an individual invoice
         final InvoiceJson firstInvoiceJson = getInvoice(invoiceJson.getInvoiceId());
         assertEquals(firstInvoiceJson, invoiceJson);
 
@@ -173,7 +181,7 @@ public class TestInvoice extends TestJaxrsBase {
         assertEquals(paymentsFromJson.size(), 2);
         PaymentJson secondPayment = null;
         for (PaymentJson cur : paymentsFromJson) {
-            if (! cur.getPaymentId().equals(initialPaymentId)) {
+            if (!cur.getPaymentId().equals(initialPaymentId)) {
                 secondPayment = cur;
                 break;
             }
@@ -291,7 +299,6 @@ public class TestInvoice extends TestJaxrsBase {
         assertEquals(getInvoicesForAccount(accountJson.getAccountId()).size(), 3);
     }
 
-
     @Test(groups = "slow")
     public void testExternalChargeOnNewInvoiceWithAutomaticPayment() throws Exception {
         final AccountJson accountJson = createAccountWithPMBundleAndSubscriptionAndWaitForFirstInvoice();
@@ -345,7 +352,7 @@ public class TestInvoice extends TestJaxrsBase {
         // Post an external charge
         final BigDecimal chargeAmount = BigDecimal.TEN;
         final InvoiceJson invoiceWithItems = createExternalChargeForInvoice(accountJson.getAccountId(), invoiceId,
-                                                                                     null, chargeAmount, null, null, false);
+                                                                            null, chargeAmount, null, null, false);
         assertEquals(invoiceWithItems.getItems().size(), originalNumberOfItemsForInvoice + 1);
         assertNull(invoiceWithItems.getItems().get(originalNumberOfItemsForInvoice).getBundleId());
 
@@ -379,7 +386,6 @@ public class TestInvoice extends TestJaxrsBase {
         assertEquals(adjustedInvoice.getBalance().compareTo(BigDecimal.ZERO), 0);
     }
 
-
     @Test(groups = "slow")
     public void testExternalChargeForBundleOnExistingInvoice() throws Exception {
         final AccountJson accountJson = createAccountNoPMBundleAndSubscriptionAndWaitForFirstInvoice();
@@ -396,7 +402,7 @@ public class TestInvoice extends TestJaxrsBase {
         final BigDecimal chargeAmount = BigDecimal.TEN;
         final String bundleId = UUID.randomUUID().toString();
         final InvoiceJson invoiceWithItems = createExternalChargeForInvoice(accountJson.getAccountId(), invoiceId,
-                                                                                     bundleId, chargeAmount, null, null, false);
+                                                                            bundleId, chargeAmount, null, null, false);
         assertEquals(invoiceWithItems.getItems().size(), originalNumberOfItemsForInvoice + 1);
         assertEquals(invoiceWithItems.getItems().get(originalNumberOfItemsForInvoice).getBundleId(), bundleId);
 
diff --git a/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java b/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java
index 17c9ed0..c5560b1 100644
--- a/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java
+++ b/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java
@@ -82,6 +82,11 @@ public class InternalCallContextFactory {
         return new InternalTenantContext(tenantRecordId, accountRecordId);
     }
 
+    public InternalTenantContext createInternalTenantContext(final UUID accountId, final InternalTenantContext context) {
+        final Long tenantRecordId = context.getTenantRecordId();
+        final Long accountRecordId = getAccountRecordId(accountId, ObjectType.ACCOUNT);
+        return new InternalTenantContext(tenantRecordId, accountRecordId);
+    }
 
     /**
      * Crate an internal tenant callcontext from a tenant callcontext, and retrieving the account_record_id from another table