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