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 402f17d..164e1bd 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
@@ -21,6 +21,7 @@ import java.util.List;
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.BusinessSubscriptionTransition;
// Note: not exposed in api yet
@@ -36,7 +37,11 @@ public class DefaultAnalyticsUserApi {
return analyticsDao.getAccountByKey(accountKey);
}
- public List<BusinessSubscriptionTransition> getTransitionsForBundle(final String key) {
- return analyticsDao.getTransitionsByKey(key);
+ public List<BusinessSubscriptionTransition> getTransitionsForBundle(final String externalKey) {
+ return analyticsDao.getTransitionsByKey(externalKey);
+ }
+
+ public List<BusinessInvoice> getInvoicesForAccount(final String accountKey) {
+ return analyticsDao.getInvoicesByKey(accountKey);
}
}
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 bd3cda9..2d37fb5 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
@@ -28,5 +28,7 @@ public interface AnalyticsDao {
List<BusinessSubscriptionTransition> getTransitionsByKey(final String externalKey);
+ List<BusinessInvoice> getInvoicesByKey(final String accountKey);
+
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 1f44af9..a5c85de 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
@@ -54,6 +54,11 @@ public class DefaultAnalyticsDao implements AnalyticsDao {
}
@Override
+ public List<BusinessInvoice> getInvoicesByKey(final String accountKey) {
+ return invoiceSqlDao.getInvoicesForAccount(accountKey);
+ }
+
+ @Override
public void createInvoice(final String accountKey, final BusinessInvoice invoice, final Iterable<BusinessInvoiceItem> invoiceItems) {
invoiceSqlDao.inTransaction(new Transaction<Void, BusinessInvoiceSqlDao>() {
@Override
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 76d41f5..91d61fe 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
@@ -105,6 +105,9 @@ public class TestAnalytics extends TestIntegrationBase {
//Assert.assertNotNull(businessAccount.getCreditCardType());
//Assert.assertNotNull(businessAccount.getPaymentMethod());
+ // The account shouldn't have any invoice yet
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).size(), 0);
+
return account;
}
@@ -138,6 +141,9 @@ public class TestAnalytics extends TestIntegrationBase {
//Assert.assertNotNull(businessAccount.getBillingAddressCountry());
//Assert.assertNotNull(businessAccount.getCreditCardType());
//Assert.assertNotNull(businessAccount.getPaymentMethod());
+
+ // The account should still not have any invoice
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).size(), 0);
}
private SubscriptionBundle verifyFirstBundle(final Account account) throws EntitlementUserApiException, InterruptedException {
@@ -150,6 +156,9 @@ public class TestAnalytics extends TestIntegrationBase {
// Verify BST is still empty since no subscription has been added yet
Assert.assertEquals(analyticsUserApi.getTransitionsForBundle(bundle.getKey()).size(), 0);
+ // The account should still not have any invoice
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).size(), 0);
+
return bundle;
}
@@ -195,6 +204,14 @@ public class TestAnalytics extends TestIntegrationBase {
Assert.assertEquals(businessAccount.getBalance().doubleValue(), Rounder.round(BigDecimal.ZERO));
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());
+
return subscription;
}
@@ -238,6 +255,19 @@ public class TestAnalytics extends TestIntegrationBase {
Assert.assertEquals(transition.getNextSubscription().getState(), Subscription.SubscriptionState.ACTIVE);
// It's still the same subscription
Assert.assertEquals(transition.getNextSubscription().getSubscriptionId(), subscription.getId());
+
+ // The account should have two invoices for the trial phase of both subscriptions
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).size(), 2);
+ 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());
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(1).getBalance().doubleValue(), 0.0);
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(1).getAmountCharged().doubleValue(), 0.0);
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(1).getAmountCredited().doubleValue(), 0.0);
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(1).getAmountPaid().doubleValue(), 0.0);
+ Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey()).get(1).getCurrency(), account.getCurrency());
}
private void waitALittle() throws InterruptedException {