Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
index 164e1bd..20d1bb9 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
@@ -18,10 +18,12 @@ package com.ning.billing.analytics.api.user;
import javax.inject.Inject;
import java.util.List;
+import java.util.UUID;
import com.ning.billing.analytics.dao.AnalyticsDao;
import com.ning.billing.analytics.model.BusinessAccount;
import com.ning.billing.analytics.model.BusinessInvoice;
+import com.ning.billing.analytics.model.BusinessInvoiceItem;
import com.ning.billing.analytics.model.BusinessSubscriptionTransition;
// Note: not exposed in api yet
@@ -44,4 +46,8 @@ public class DefaultAnalyticsUserApi {
public List<BusinessInvoice> getInvoicesForAccount(final String accountKey) {
return analyticsDao.getInvoicesByKey(accountKey);
}
+
+ public List<BusinessInvoiceItem> getInvoiceItemsForInvoice(final UUID invoiceId) {
+ return analyticsDao.getInvoiceItemsForInvoice(invoiceId.toString());
+ }
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/AnalyticsDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/AnalyticsDao.java
index 2d37fb5..d591f78 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/AnalyticsDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/AnalyticsDao.java
@@ -30,5 +30,7 @@ public interface AnalyticsDao {
List<BusinessInvoice> getInvoicesByKey(final String accountKey);
+ List<BusinessInvoiceItem> getInvoiceItemsForInvoice(final String invoiceId);
+
void createInvoice(final String accountKey, final BusinessInvoice invoice, final Iterable<BusinessInvoiceItem> invoiceItems);
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java
index a5c85de..b497e29 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java
@@ -33,14 +33,17 @@ public class DefaultAnalyticsDao implements AnalyticsDao {
private final BusinessAccountSqlDao accountSqlDao;
private final BusinessSubscriptionTransitionSqlDao subscriptionTransitionSqlDao;
private final BusinessInvoiceSqlDao invoiceSqlDao;
+ private final BusinessInvoiceItemSqlDao invoiceItemSqlDao;
@Inject
public DefaultAnalyticsDao(final BusinessAccountSqlDao accountSqlDao,
final BusinessSubscriptionTransitionSqlDao subscriptionTransitionSqlDao,
- final BusinessInvoiceSqlDao invoiceSqlDao) {
+ final BusinessInvoiceSqlDao invoiceSqlDao,
+ final BusinessInvoiceItemSqlDao invoiceItemSqlDao) {
this.accountSqlDao = accountSqlDao;
this.subscriptionTransitionSqlDao = subscriptionTransitionSqlDao;
this.invoiceSqlDao = invoiceSqlDao;
+ this.invoiceItemSqlDao = invoiceItemSqlDao;
}
@Override
@@ -59,6 +62,11 @@ public class DefaultAnalyticsDao implements AnalyticsDao {
}
@Override
+ public List<BusinessInvoiceItem> getInvoiceItemsForInvoice(final String invoiceId) {
+ return invoiceItemSqlDao.getInvoiceItemsForInvoice(invoiceId);
+ }
+
+ @Override
public void createInvoice(final String accountKey, final BusinessInvoice invoice, final Iterable<BusinessInvoiceItem> invoiceItems) {
invoiceSqlDao.inTransaction(new Transaction<Void, BusinessInvoiceSqlDao>() {
@Override
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
index 0da3c9f..03cb50c 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
@@ -71,9 +71,9 @@ public class BusinessInvoiceItem {
}
public BusinessInvoiceItem(final String externalKey, final InvoiceItem invoiceItem, final Plan plan, final PlanPhase planPhase) {
- this(invoiceItem.getAmount(), plan.getBillingPeriod().toString(), new DateTime(DateTimeZone.UTC), invoiceItem.getCurrency(), invoiceItem.getEndDate(),
+ this(invoiceItem.getAmount(), planPhase.getBillingPeriod().toString(), new DateTime(DateTimeZone.UTC), invoiceItem.getCurrency(), invoiceItem.getEndDate(),
externalKey, invoiceItem.getInvoiceId(), invoiceItem.getId(), invoiceItem.getInvoiceItemType().toString(),
- invoiceItem.getPhaseName(), plan.getProduct().getName(), plan.getProduct().getCatalogName(), plan.getProduct().getCategory().toString(),
+ planPhase.getPhaseType().toString(), plan.getProduct().getCategory().toString(), plan.getProduct().getName(), plan.getProduct().getCatalogName(),
planPhase.getName(), invoiceItem.getStartDate(), new DateTime(DateTimeZone.UTC));
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestDefaultAnalyticsDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestDefaultAnalyticsDao.java
index a7f1479..19eae83 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestDefaultAnalyticsDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestDefaultAnalyticsDao.java
@@ -48,7 +48,7 @@ public class TestDefaultAnalyticsDao extends TestWithEmbeddedDB {
subscriptionTransitionSqlDao = dbi.onDemand(BusinessSubscriptionTransitionSqlDao.class);
invoiceSqlDao = dbi.onDemand(BusinessInvoiceSqlDao.class);
invoiceItemSqlDao = dbi.onDemand(BusinessInvoiceItemSqlDao.class);
- analyticsDao = new DefaultAnalyticsDao(accountSqlDao, subscriptionTransitionSqlDao, invoiceSqlDao);
+ analyticsDao = new DefaultAnalyticsDao(accountSqlDao, subscriptionTransitionSqlDao, invoiceSqlDao, invoiceItemSqlDao);
}
@Test(groups = "slow")
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
index 91d61fe..2c55b3c 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
@@ -32,6 +32,8 @@ import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.analytics.model.BusinessAccount;
+import com.ning.billing.analytics.model.BusinessInvoice;
+import com.ning.billing.analytics.model.BusinessInvoiceItem;
import com.ning.billing.analytics.model.BusinessSubscriptionEvent;
import com.ning.billing.analytics.model.BusinessSubscriptionTransition;
import com.ning.billing.analytics.utils.Rounder;
@@ -205,12 +207,34 @@ public class TestAnalytics extends TestIntegrationBase {
Assert.assertEquals(businessAccount.getTotalInvoiceBalance().doubleValue(), Rounder.round(BigDecimal.ZERO));
// The account should have one invoice for the trial phase
- Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).size(), 1);
- Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(0).getBalance().doubleValue(), 0.0);
- Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(0).getAmountCharged().doubleValue(), 0.0);
- Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(0).getAmountCredited().doubleValue(), 0.0);
- Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(0).getAmountPaid().doubleValue(), 0.0);
- Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(0).getCurrency(), account.getCurrency());
+ final List<BusinessInvoice> invoices = analyticsUserApi.getInvoicesForAccount(account.getExternalKey());
+ Assert.assertEquals(invoices.size(), 1);
+ final BusinessInvoice invoice = invoices.get(0);
+ Assert.assertEquals(invoice.getBalance().doubleValue(), 0.0);
+ Assert.assertEquals(invoice.getAmountCharged().doubleValue(), 0.0);
+ Assert.assertEquals(invoice.getAmountCredited().doubleValue(), 0.0);
+ Assert.assertEquals(invoice.getAmountPaid().doubleValue(), 0.0);
+ Assert.assertEquals(invoice.getCurrency(), account.getCurrency());
+
+ // The invoice should have a single item associated to it
+ final List<BusinessInvoiceItem> invoiceItems = analyticsUserApi.getInvoiceItemsForInvoice(invoice.getInvoiceId());
+ Assert.assertEquals(invoiceItems.size(), 1);
+ final BusinessInvoiceItem invoiceItem = invoiceItems.get(0);
+ Assert.assertEquals(invoiceItem.getAmount().doubleValue(), 0.0);
+ // No billing period for the trial item
+ Assert.assertEquals(invoiceItem.getBillingPeriod(), subscription.getCurrentPhase().getBillingPeriod().toString());
+ Assert.assertEquals(invoiceItem.getCurrency(), account.getCurrency());
+ // The subscription end date is null (evergreen)
+ Assert.assertEquals(invoiceItem.getEndDate(), subscription.getStartDate().plus(subscription.getCurrentPhase().getDuration().toJodaPeriod()));
+ Assert.assertEquals(invoiceItem.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(invoiceItem.getInvoiceId(), invoice.getInvoiceId());
+ Assert.assertEquals(invoiceItem.getItemType(), "FIXED");
+ Assert.assertEquals(invoiceItem.getPhase(), subscription.getCurrentPhase().getPhaseType().toString());
+ Assert.assertEquals(invoiceItem.getProductCategory(), subscription.getCurrentPlan().getProduct().getCategory().toString());
+ Assert.assertEquals(invoiceItem.getProductName(), subscription.getCurrentPlan().getProduct().getName());
+ Assert.assertEquals(invoiceItem.getProductType(), subscription.getCurrentPlan().getProduct().getCatalogName());
+ Assert.assertEquals(invoiceItem.getSlug(), subscription.getCurrentPhase().getName());
+ Assert.assertEquals(invoiceItem.getStartDate(), subscription.getStartDate());
return subscription;
}
@@ -272,6 +296,6 @@ public class TestAnalytics extends TestIntegrationBase {
private void waitALittle() throws InterruptedException {
// We especially need to wait for entitlement events
- Thread.sleep(1000);
+ Thread.sleep(2000);
}
}