killbill-memoizeit
invoice: first pass at using recordIds in dao Switch all getInvoicesByAccount* …
9/23/2013 9:02:59 AM
Changes
invoice/pom.xml 5(+5 -0)
invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java 21(+10 -11)
invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java 4(+2 -2)
Details
invoice/pom.xml 5(+5 -0)
diff --git a/invoice/pom.xml b/invoice/pom.xml
index 8246d03..c49ff6d 100644
--- a/invoice/pom.xml
+++ b/invoice/pom.xml
@@ -57,6 +57,11 @@
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
+ <artifactId>killbill-account</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.ning.billing</groupId>
<artifactId>killbill-api</artifactId>
</dependency>
<dependency>
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 38cd7a7..f42a45f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -20,6 +20,7 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
+import com.ning.billing.ObjectType;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoicePayment;
@@ -53,7 +54,7 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public List<Invoice> getAllInvoicesByAccount(final UUID accountId, final TenantContext context) {
- return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getAllInvoicesByAccount(accountId, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getAllInvoicesByAccount(internalCallContextFactory.createInternalTenantContext(accountId, context)),
new Function<InvoiceModelDao, Invoice>() {
@Override
public Invoice apply(final InvoiceModelDao input) {
@@ -64,12 +65,12 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public Invoice getInvoice(final UUID invoiceId, final TenantContext context) throws InvoiceApiException {
- return new DefaultInvoice(dao.getById(invoiceId, internalCallContextFactory.createInternalTenantContext(context)));
+ return new DefaultInvoice(dao.getById(invoiceId, internalCallContextFactory.createInternalTenantContext(invoiceId, ObjectType.INVOICE, context)));
}
@Override
public List<InvoicePayment> getInvoicePayments(final UUID paymentId, final TenantContext context) {
- return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getInvoicePayments(paymentId, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getInvoicePayments(paymentId, internalCallContextFactory.createInternalTenantContext(paymentId, ObjectType.PAYMENT, context)),
new Function<InvoicePaymentModelDao, InvoicePayment>() {
@Override
public InvoicePayment apply(final InvoicePaymentModelDao input) {
@@ -94,12 +95,12 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public BigDecimal getRemainingAmountPaid(final UUID invoicePaymentId, final TenantContext context) {
- return dao.getRemainingAmountPaid(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(context));
+ return dao.getRemainingAmountPaid(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(invoicePaymentId, ObjectType.INVOICE_PAYMENT, context));
}
@Override
public List<InvoicePayment> getChargebacksByAccountId(final UUID accountId, final TenantContext context) {
- return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getChargebacksByAccountId(accountId, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getChargebacksByAccountId(accountId, internalCallContextFactory.createInternalTenantContext(accountId, context)),
new Function<InvoicePaymentModelDao, InvoicePayment>() {
@Override
public InvoicePayment apply(final InvoicePaymentModelDao input) {
@@ -110,7 +111,7 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public List<InvoicePayment> getChargebacksByPaymentId(final UUID paymentId, final TenantContext context) {
- return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getChargebacksByPaymentId(paymentId, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getChargebacksByPaymentId(paymentId, internalCallContextFactory.createInternalTenantContext(paymentId, ObjectType.PAYMENT, context)),
new Function<InvoicePaymentModelDao, InvoicePayment>() {
@Override
public InvoicePayment apply(final InvoicePaymentModelDao input) {
@@ -121,12 +122,12 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public InvoicePayment getChargebackById(final UUID chargebackId, final TenantContext context) throws InvoiceApiException {
- return new DefaultInvoicePayment(dao.getChargebackById(chargebackId, internalCallContextFactory.createInternalTenantContext(context)));
+ return new DefaultInvoicePayment(dao.getChargebackById(chargebackId, internalCallContextFactory.createInternalTenantContext(chargebackId, ObjectType.INVOICE_PAYMENT, context)));
}
@Override
public UUID getAccountIdFromInvoicePaymentId(final UUID invoicePaymentId, final TenantContext context) throws InvoiceApiException {
- return dao.getAccountIdFromInvoicePaymentId(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(context));
+ return dao.getAccountIdFromInvoicePaymentId(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(invoicePaymentId, ObjectType.INVOICE_PAYMENT, context));
}
@Override
@@ -136,8 +137,6 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@Override
public InvoicePayment createChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException {
- // Retrieve the account id for the internal call context
- final UUID accountId = dao.getAccountIdFromInvoicePaymentId(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(context));
- return new DefaultInvoicePayment(dao.postChargeback(invoicePaymentId, amount, internalCallContextFactory.createInternalCallContext(accountId, context)));
+ return new DefaultInvoicePayment(dao.postChargeback(invoicePaymentId, amount, internalCallContextFactory.createInternalCallContext(invoicePaymentId, ObjectType.INVOICE_PAYMENT, context)));
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
index fdaf7dd..26fd408 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/migration/DefaultInvoiceMigrationApi.java
@@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.MigrationPlan;
+import com.ning.billing.clock.Clock;
import com.ning.billing.invoice.api.InvoiceItemType;
import com.ning.billing.invoice.api.InvoiceMigrationApi;
import com.ning.billing.invoice.dao.DefaultInvoiceDao;
@@ -35,7 +36,6 @@ import com.ning.billing.invoice.dao.InvoiceModelDao;
import com.ning.billing.invoice.dao.InvoicePaymentModelDao;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
-import com.ning.billing.clock.Clock;
import com.ning.billing.util.svcapi.account.AccountInternalApi;
import com.google.common.collect.ImmutableList;
@@ -65,7 +65,7 @@ public class DefaultInvoiceMigrationApi implements InvoiceMigrationApi {
@Override
public UUID createMigrationInvoice(final UUID accountId, final LocalDate targetDate, final BigDecimal balance, final Currency currency, final CallContext context) {
try {
- accountUserApi.getAccountById(accountId, internalCallContextFactory.createInternalTenantContext(context));
+ accountUserApi.getAccountById(accountId, internalCallContextFactory.createInternalTenantContext(accountId, context));
} catch (AccountApiException e) {
log.warn("Unable to find account for id {}", accountId);
return null;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
index 100e57d..2b62f58 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
@@ -70,16 +70,6 @@ public class DefaultInvoiceInternalApi implements InvoiceInternalApi {
}
@Override
- public Collection<Invoice> getInvoicesByAccountId(final UUID accountId, final InternalTenantContext context) {
- return Collections2.transform(dao.getInvoicesByAccount(accountId, context), new Function<InvoiceModelDao, Invoice>() {
- @Override
- public Invoice apply(final InvoiceModelDao input) {
- return new DefaultInvoice(input);
- }
- });
- }
-
- @Override
public BigDecimal getAccountBalance(final UUID accountId, final InternalTenantContext context) {
return dao.getAccountBalance(accountId, context);
}
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 20fcb6c..6841fd5 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
@@ -90,7 +90,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public List<Invoice> getInvoicesByAccount(final UUID accountId, final TenantContext context) {
- return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getInvoicesByAccount(accountId, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getInvoicesByAccount(internalCallContextFactory.createInternalTenantContext(accountId, context)),
new Function<InvoiceModelDao, Invoice>() {
@Override
public Invoice apply(final InvoiceModelDao input) {
@@ -101,7 +101,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public List<Invoice> getInvoicesByAccount(final UUID accountId, final LocalDate fromDate, final TenantContext context) {
- return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getInvoicesByAccount(accountId, fromDate, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getInvoicesByAccount(fromDate, internalCallContextFactory.createInternalTenantContext(accountId, context)),
new Function<InvoiceModelDao, Invoice>() {
@Override
public Invoice apply(final InvoiceModelDao input) {
@@ -112,29 +112,30 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public BigDecimal getAccountBalance(final UUID accountId, final TenantContext context) {
- final BigDecimal result = dao.getAccountBalance(accountId, internalCallContextFactory.createInternalTenantContext(context));
+ final BigDecimal result = dao.getAccountBalance(accountId, internalCallContextFactory.createInternalTenantContext(accountId, context));
return result == null ? BigDecimal.ZERO : result;
}
@Override
public BigDecimal getAccountCBA(final UUID accountId, final TenantContext context) {
- final BigDecimal result = dao.getAccountCBA(accountId, internalCallContextFactory.createInternalTenantContext(context));
+ final BigDecimal result = dao.getAccountCBA(accountId, internalCallContextFactory.createInternalTenantContext(accountId, context));
return result == null ? BigDecimal.ZERO : result;
}
@Override
public Invoice getInvoice(final UUID invoiceId, final TenantContext context) throws InvoiceApiException {
- return new DefaultInvoice(dao.getById(invoiceId, internalCallContextFactory.createInternalTenantContext(context)));
+ return new DefaultInvoice(dao.getById(invoiceId, internalCallContextFactory.createInternalTenantContext(invoiceId, ObjectType.INVOICE, context)));
}
@Override
public Invoice getInvoiceByNumber(final Integer number, final TenantContext context) throws InvoiceApiException {
+ // TODO (PIERRE) Populate accountRecordId in context
return new DefaultInvoice(dao.getByNumber(number, internalCallContextFactory.createInternalTenantContext(context)));
}
@Override
public List<Invoice> getUnpaidInvoicesByAccountId(final UUID accountId, final LocalDate upToDate, final TenantContext context) {
- return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getUnpaidInvoicesByAccountId(accountId, upToDate, internalCallContextFactory.createInternalTenantContext(context)),
+ return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getUnpaidInvoicesByAccountId(accountId, upToDate, internalCallContextFactory.createInternalTenantContext(accountId, context)),
new Function<InvoiceModelDao, Invoice>() {
@Override
public Invoice apply(final InvoiceModelDao input) {
@@ -146,16 +147,15 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public Invoice triggerInvoiceGeneration(final UUID accountId, final LocalDate targetDate, final boolean dryRun,
final CallContext context) throws InvoiceApiException {
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(accountId, context);
final Account account;
try {
- account = accountUserApi.getAccountById(accountId, internalCallContextFactory.createInternalTenantContext(context));
+ account = accountUserApi.getAccountById(accountId, internalContext);
} catch (AccountApiException e) {
throw new InvoiceApiException(e, ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_ID, e.toString());
}
- // API_FIX Could we avoid the first call to createInternalTenantContext
- final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(accountId, context);
final DateTime processingDateTime = targetDate.toDateTimeAtCurrentTime(account.getTimeZone());
final Invoice result = dispatcher.processAccount(accountId, processingDateTime, dryRun, internalContext);
if (result == null) {
@@ -168,30 +168,30 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public void tagInvoiceAsWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException, InvoiceApiException {
// Note: the tagApi is audited
- final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(invoiceId, ObjectType.INVOICE, context);
tagApi.addTag(invoiceId, ObjectType.INVOICE, ControlTagType.WRITTEN_OFF.getId(), internalContext);
// Retrieve the invoice for the account id
final Invoice invoice = new DefaultInvoice(dao.getById(invoiceId, internalContext));
// This is for overdue
- notifyBusOfInvoiceAdjustment(invoiceId, invoice.getAccountId(), internalCallContextFactory.createInternalCallContext(invoice.getAccountId(), context));
+ notifyBusOfInvoiceAdjustment(invoiceId, invoice.getAccountId(), internalContext);
}
@Override
public void tagInvoiceAsNotWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException, InvoiceApiException {
// Note: the tagApi is audited
- final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(invoiceId, ObjectType.INVOICE, context);
tagApi.removeTag(invoiceId, ObjectType.INVOICE, ControlTagType.WRITTEN_OFF.getId(), internalContext);
// Retrieve the invoice for the account id
final Invoice invoice = new DefaultInvoice(dao.getById(invoiceId, internalContext));
// This is for overdue
- notifyBusOfInvoiceAdjustment(invoiceId, invoice.getAccountId(), internalCallContextFactory.createInternalCallContext(invoice.getAccountId(), context));
+ notifyBusOfInvoiceAdjustment(invoiceId, invoice.getAccountId(), internalContext);
}
@Override
public InvoiceItem getExternalChargeById(final UUID externalChargeId, final TenantContext context) throws InvoiceApiException {
- final InvoiceItem externalChargeItem = InvoiceItemFactory.fromModelDao(dao.getExternalChargeById(externalChargeId, internalCallContextFactory.createInternalTenantContext(context)));
+ final InvoiceItem externalChargeItem = InvoiceItemFactory.fromModelDao(dao.getExternalChargeById(externalChargeId, internalCallContextFactory.createInternalTenantContext(externalChargeId, ObjectType.INVOICE_ITEM, context)));
if (externalChargeItem == null) {
throw new InvoiceApiException(ErrorCode.INVOICE_NO_SUCH_EXTERNAL_CHARGE, externalChargeId);
}
@@ -233,7 +233,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public InvoiceItem getCreditById(final UUID creditId, final TenantContext context) throws InvoiceApiException {
- final InvoiceItem creditItem = InvoiceItemFactory.fromModelDao(dao.getCreditById(creditId, internalCallContextFactory.createInternalTenantContext(context)));
+ final InvoiceItem creditItem = InvoiceItemFactory.fromModelDao(dao.getCreditById(creditId, internalCallContextFactory.createInternalTenantContext(creditId, ObjectType.INVOICE_ITEM, context)));
if (creditItem == null) {
throw new InvoiceApiException(ErrorCode.INVOICE_NO_SUCH_CREDIT, creditId);
}
@@ -289,7 +289,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceId);
}
- final InternalTenantContext internalContext = internalCallContextFactory.createInternalTenantContext(context);
+ final InternalTenantContext internalContext = internalCallContextFactory.createInternalTenantContext(invoiceId, ObjectType.INVOICE, context);
final Account account = accountUserApi.getAccountById(invoice.getAccountId(), internalContext);
// Check if this account has the MANUAL_PAY system tag
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/CBADao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/CBADao.java
index 2d25c6e..3b2c0db 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/CBADao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/CBADao.java
@@ -43,7 +43,7 @@ public class CBADao {
public BigDecimal getAccountCBAFromTransaction(final UUID accountId,
final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory,
final InternalTenantContext context) {
- final List<InvoiceModelDao> invoices = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(accountId, entitySqlDaoWrapperFactory, context);
+ final List<InvoiceModelDao> invoices = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(entitySqlDaoWrapperFactory, context);
return getAccountCBAFromTransaction(invoices);
}
@@ -57,11 +57,11 @@ public class CBADao {
public void doCBAComplexity(final UUID accountId, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context) throws EntityPersistenceException, InvoiceApiException {
- List<InvoiceModelDao> invoiceItemModelDaos = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(accountId, entitySqlDaoWrapperFactory, context);
+ List<InvoiceModelDao> invoiceItemModelDaos = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(entitySqlDaoWrapperFactory, context);
for (InvoiceModelDao cur : invoiceItemModelDaos) {
addCBAIfNeeded(entitySqlDaoWrapperFactory, cur, context);
}
- invoiceItemModelDaos = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(accountId, entitySqlDaoWrapperFactory, context);
+ invoiceItemModelDaos = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(entitySqlDaoWrapperFactory, context);
useExistingCBAFromTransaction(invoiceItemModelDaos, entitySqlDaoWrapperFactory, 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 41d5ff1..ef40a12 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
@@ -33,6 +33,7 @@ import com.ning.billing.ErrorCode;
import com.ning.billing.bus.api.PersistentBus;
import com.ning.billing.bus.api.PersistentBus.EventBusException;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.clock.Clock;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItemType;
@@ -42,7 +43,6 @@ import com.ning.billing.invoice.notification.NextBillingDatePoster;
import com.ning.billing.util.cache.CacheControllerDispatcher;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.clock.Clock;
import com.ning.billing.util.dao.NonEntityDao;
import com.ning.billing.util.entity.dao.EntityDaoBase;
import com.ning.billing.util.entity.dao.EntitySqlDao;
@@ -50,12 +50,25 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Ordering;
import com.google.inject.Inject;
public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, InvoiceApiException> implements InvoiceDao {
private static final Logger log = LoggerFactory.getLogger(DefaultInvoiceDao.class);
+ private static final Ordering<InvoiceModelDao> INVOICE_MODEL_DAO_ORDERING = Ordering.natural()
+ .onResultOf(new Function<InvoiceModelDao, Comparable>() {
+ @Override
+ public Comparable apply(final InvoiceModelDao invoice) {
+ return invoice.getTargetDate();
+ }
+ });
+
private final NextBillingDatePoster nextBillingDatePoster;
private final PersistentBus eventBus;
private final InvoiceDaoHelper invoiceDaoHelper;
@@ -81,13 +94,19 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
}
@Override
- public List<InvoiceModelDao> getInvoicesByAccount(final UUID accountId, final InternalTenantContext context) {
+ public List<InvoiceModelDao> getInvoicesByAccount(final InternalTenantContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoiceModelDao>>() {
@Override
public List<InvoiceModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final InvoiceSqlDao invoiceDao = entitySqlDaoWrapperFactory.become(InvoiceSqlDao.class);
- final List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(accountId.toString(), context);
+ final List<InvoiceModelDao> invoices = ImmutableList.<InvoiceModelDao>copyOf(INVOICE_MODEL_DAO_ORDERING.sortedCopy(Iterables.<InvoiceModelDao>filter(invoiceDao.getByAccountRecordId(context),
+ new Predicate<InvoiceModelDao>() {
+ @Override
+ public boolean apply(final InvoiceModelDao invoice) {
+ return !invoice.isMigrated();
+ }
+ })));
invoiceDaoHelper.populateChildren(invoices, entitySqlDaoWrapperFactory, context);
return invoices;
@@ -96,25 +115,22 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
}
@Override
- public List<InvoiceModelDao> getAllInvoicesByAccount(final UUID accountId, final InternalTenantContext context) {
+ public List<InvoiceModelDao> getAllInvoicesByAccount(final InternalTenantContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoiceModelDao>>() {
@Override
public List<InvoiceModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- return invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(accountId, entitySqlDaoWrapperFactory, context);
+ return invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(entitySqlDaoWrapperFactory, context);
}
});
}
@Override
- public List<InvoiceModelDao> getInvoicesByAccount(final UUID accountId, final LocalDate fromDate, final InternalTenantContext context) {
+ public List<InvoiceModelDao> getInvoicesByAccount(final LocalDate fromDate, final InternalTenantContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoiceModelDao>>() {
@Override
public List<InvoiceModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final InvoiceSqlDao invoiceDao = entitySqlDaoWrapperFactory.become(InvoiceSqlDao.class);
-
- final List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccountAfterDate(accountId.toString(),
- fromDate.toDateTimeAtStartOfDay().toDate(),
- context);
+ final List<InvoiceModelDao> invoices = getAllNonMigratedInvoicesByAccountAfterDate(invoiceDao, fromDate, context);
invoiceDaoHelper.populateChildren(invoices, entitySqlDaoWrapperFactory, context);
return invoices;
@@ -122,6 +138,16 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
});
}
+ private List<InvoiceModelDao> getAllNonMigratedInvoicesByAccountAfterDate(final InvoiceSqlDao invoiceSqlDao, final LocalDate fromDate, final InternalTenantContext context) {
+ return ImmutableList.<InvoiceModelDao>copyOf(INVOICE_MODEL_DAO_ORDERING.sortedCopy(Iterables.<InvoiceModelDao>filter(invoiceSqlDao.getByAccountRecordId(context),
+ new Predicate<InvoiceModelDao>() {
+ @Override
+ public boolean apply(final InvoiceModelDao invoice) {
+ return !invoice.isMigrated() && invoice.getTargetDate().compareTo(fromDate) >= 0;
+ }
+ })));
+ }
+
@Override
public List<InvoiceModelDao> get(final InternalTenantContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoiceModelDao>>() {
@@ -235,7 +261,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
BigDecimal cba = BigDecimal.ZERO;
BigDecimal accountBalance = BigDecimal.ZERO;
- final List<InvoiceModelDao> invoices = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(accountId, entitySqlDaoWrapperFactory, context);
+ final List<InvoiceModelDao> invoices = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(entitySqlDaoWrapperFactory, context);
for (final InvoiceModelDao cur : invoices) {
accountBalance = accountBalance.add(InvoiceModelDaoHelper.getBalance(cur));
cba = cba.add(InvoiceModelDaoHelper.getCBAAmount(cur));
@@ -370,6 +396,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
}
});
}
+
@Override
public InvoicePaymentModelDao postChargeback(final UUID invoicePaymentId, final BigDecimal amount, final InternalCallContext context) throws InvoiceApiException {
return transactionalSqlDao.execute(InvoiceApiException.class, new EntitySqlDaoTransactionWrapper<InvoicePaymentModelDao>() {
@@ -637,9 +664,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
if (accountCBA.compareTo(cbaItem.getAmount().negate()) < 0) {
throw new IllegalStateException("The account balance can't be lower than the amount adjusted");
}
- final List<InvoiceModelDao> invoicesFollowing = transactional.getInvoicesByAccountAfterDate(accountId.toString(),
- invoice.getInvoiceDate().toDateTimeAtStartOfDay().toDate(),
- context);
+ final List<InvoiceModelDao> invoicesFollowing = getAllNonMigratedInvoicesByAccountAfterDate(transactional, invoice.getInvoiceDate(), context);
invoiceDaoHelper.populateChildren(invoicesFollowing, entitySqlDaoWrapperFactory, context);
// The remaining amount to adjust (i.e. the amount of credits used on following invoices)
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
index 6a9a21e..8ac96a5 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
@@ -42,9 +42,9 @@ public interface InvoiceDao {
List<InvoiceModelDao> get(InternalTenantContext context);
- List<InvoiceModelDao> getInvoicesByAccount(UUID accountId, InternalTenantContext context);
+ List<InvoiceModelDao> getInvoicesByAccount(InternalTenantContext context);
- List<InvoiceModelDao> getInvoicesByAccount(UUID accountId, LocalDate fromDate, InternalTenantContext context);
+ List<InvoiceModelDao> getInvoicesByAccount(LocalDate fromDate, InternalTenantContext context);
List<InvoiceModelDao> getInvoicesBySubscription(UUID subscriptionId, InternalTenantContext context);
@@ -61,7 +61,7 @@ public interface InvoiceDao {
void test(InternalTenantContext context);
// Include migrated invoices
- List<InvoiceModelDao> getAllInvoicesByAccount(UUID accountId, InternalTenantContext context);
+ List<InvoiceModelDao> getAllInvoicesByAccount(InternalTenantContext context);
InvoicePaymentModelDao postChargeback(UUID invoicePaymentId, BigDecimal amount, InternalCallContext context) throws InvoiceApiException;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDaoHelper.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDaoHelper.java
index 61797f6..8c5cecb 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDaoHelper.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDaoHelper.java
@@ -37,7 +37,6 @@ import com.ning.billing.util.entity.EntityPersistenceException;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
@@ -158,7 +157,7 @@ public class InvoiceDaoHelper {
public List<InvoiceModelDao> getUnpaidInvoicesByAccountFromTransaction(final UUID accountId, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final LocalDate upToDate, final InternalTenantContext context) {
- final List<InvoiceModelDao> invoices = getAllInvoicesByAccountFromTransaction(accountId, entitySqlDaoWrapperFactory, context);
+ final List<InvoiceModelDao> invoices = getAllInvoicesByAccountFromTransaction(entitySqlDaoWrapperFactory, context);
return getUnpaidInvoicesByAccountFromTransaction(invoices, upToDate);
}
@@ -235,8 +234,8 @@ public class InvoiceDaoHelper {
getInvoicePaymentsWithinTransaction(invoices, entitySqlDaoWrapperFactory, context);
}
- public List<InvoiceModelDao> getAllInvoicesByAccountFromTransaction(final UUID accountId, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalTenantContext context) {
- final List<InvoiceModelDao> invoices = entitySqlDaoWrapperFactory.become(InvoiceSqlDao.class).getAllInvoicesByAccount(accountId.toString(), context);
+ public List<InvoiceModelDao> getAllInvoicesByAccountFromTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalTenantContext context) {
+ final List<InvoiceModelDao> invoices = entitySqlDaoWrapperFactory.become(InvoiceSqlDao.class).getByAccountRecordId(context);
populateChildren(invoices, entitySqlDaoWrapperFactory, context);
return invoices;
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
index 716c2b0..7bce03b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
@@ -16,7 +16,6 @@
package com.ning.billing.invoice.dao;
-import java.util.Date;
import java.util.List;
import java.util.UUID;
@@ -33,19 +32,6 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
public interface InvoiceSqlDao extends EntitySqlDao<InvoiceModelDao, Invoice> {
@SqlQuery
- List<InvoiceModelDao> getInvoicesByAccount(@Bind("accountId") final String accountId,
- @BindBean final InternalTenantContext context);
-
- @SqlQuery
- List<InvoiceModelDao> getAllInvoicesByAccount(@Bind("accountId") final String string,
- @BindBean final InternalTenantContext context);
-
- @SqlQuery
- List<InvoiceModelDao> getInvoicesByAccountAfterDate(@Bind("accountId") final String accountId,
- @Bind("fromDate") final Date fromDate,
- @BindBean final InternalTenantContext context);
-
- @SqlQuery
List<InvoiceModelDao> getInvoicesBySubscription(@Bind("subscriptionId") final String subscriptionId,
@BindBean final InternalTenantContext context);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
index ff16d36..778cc3d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -177,7 +177,7 @@ public class InvoiceDispatcher {
List<Invoice> invoices = new ArrayList<Invoice>();
if (!billingEvents.isAccountAutoInvoiceOff()) {
- invoices = ImmutableList.<Invoice>copyOf(Collections2.transform(invoiceDao.getInvoicesByAccount(accountId, context),
+ invoices = ImmutableList.<Invoice>copyOf(Collections2.transform(invoiceDao.getInvoicesByAccount(context),
new Function<InvoiceModelDao, Invoice>() {
@Override
public Invoice apply(final InvoiceModelDao input) {
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
index 36145e4..3bd7a50 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
@@ -65,7 +65,7 @@ public class EmailInvoiceNotifier implements InvoiceNotifier {
@Override
public void notify(final Account account, final Invoice invoice, final TenantContext context) throws InvoiceApiException {
- final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(context);
+ final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(account.getId(), context);
final List<String> to = new ArrayList<String>();
to.add(account.getEmail());
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
index cd845e7..5fd95ce 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
+++ b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
@@ -26,30 +26,6 @@ extraTableFieldsWithComma(prefix) ::= <<
, <prefix>record_id as invoice_number
>>
-getInvoicesByAccount() ::= <<
- SELECT <allTableFields()>
- FROM <tableName()>
- WHERE account_id = :accountId AND migrated = '0'
- <AND_CHECK_TENANT()>
- ORDER BY target_date ASC;
->>
-
-getAllInvoicesByAccount() ::= <<
- SELECT <allTableFields()>
- FROM <tableName()>
- WHERE account_id = :accountId
- <AND_CHECK_TENANT()>
- ORDER BY target_date ASC;
->>
-
-getInvoicesByAccountAfterDate() ::= <<
- SELECT <allTableFields()>
- FROM <tableName()>
- WHERE account_id = :accountId AND target_date >= :fromDate AND migrated = '0'
- <AND_CHECK_TENANT()>
- ORDER BY target_date ASC;
->>
-
getInvoicesBySubscription() ::= <<
SELECT <allTableFields("i.")>
FROM <tableName()> i
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
index 8e665f1..00d3c1e 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
@@ -58,10 +58,10 @@ public class TestDefaultInvoiceMigrationApi extends InvoiceTestSuiteWithEmbedded
date_migrated = clock.getUTCToday().minusYears(1);
date_regular = clock.getUTCNow();
- final Account account = invoiceUtil.createAccount();
+ final Account account = invoiceUtil.createAccount(callContext);
accountId = account.getId();
migrationInvoiceId = createAndCheckMigrationInvoice(accountId);
- regularInvoiceId = invoiceUtil.generateRegularInvoice(account, date_regular);
+ regularInvoiceId = invoiceUtil.generateRegularInvoice(account, date_regular, callContext);
}
private UUID createAndCheckMigrationInvoice(final UUID accountId) throws InvoiceApiException {
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java
index 52f957e..17f7f6a 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java
@@ -53,9 +53,9 @@ public class TestDefaultInvoiceUserApi extends InvoiceTestSuiteWithEmbeddedDB {
@BeforeMethod(groups = "slow")
public void beforeMethod() throws Exception {
super.beforeMethod();
- final Account account = invoiceUtil.createAccount();
+ final Account account = invoiceUtil.createAccount(callContext);
accountId = account.getId();
- invoiceId = invoiceUtil.generateRegularInvoice(account, clock.getUTCNow());
+ invoiceId = invoiceUtil.generateRegularInvoice(account, clock.getUTCNow(), callContext);
}
@Test(groups = "slow")
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
index bf569cb..57f4a0e 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -36,6 +36,8 @@ import com.ning.billing.invoice.api.user.DefaultInvoiceCreationEvent;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
import com.google.inject.Inject;
public class MockInvoiceDao implements InvoiceDao {
@@ -45,6 +47,7 @@ public class MockInvoiceDao implements InvoiceDao {
private final Map<UUID, InvoiceModelDao> invoices = new LinkedHashMap<UUID, InvoiceModelDao>();
private final Map<UUID, InvoiceItemModelDao> items = new LinkedHashMap<UUID, InvoiceItemModelDao>();
private final Map<UUID, InvoicePaymentModelDao> payments = new LinkedHashMap<UUID, InvoicePaymentModelDao>();
+ private final BiMap<UUID, Long> accountRecordIds = HashBiMap.create();
@Inject
public MockInvoiceDao(final PersistentBus eventBus) {
@@ -62,6 +65,7 @@ public class MockInvoiceDao implements InvoiceDao {
for (final InvoicePaymentModelDao paymentModelDao : invoicePayments) {
payments.put(paymentModelDao.getId(), paymentModelDao);
}
+ accountRecordIds.put(invoice.getAccountId(), context.getAccountRecordId());
}
try {
eventBus.post(new DefaultInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
@@ -100,10 +104,11 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<InvoiceModelDao> getInvoicesByAccount(final UUID accountId, final InternalTenantContext context) {
+ public List<InvoiceModelDao> getInvoicesByAccount(final InternalTenantContext context) {
final List<InvoiceModelDao> result = new ArrayList<InvoiceModelDao>();
synchronized (monitor) {
+ final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
for (final InvoiceModelDao invoice : invoices.values()) {
if (accountId.equals(invoice.getAccountId()) && !invoice.isMigrated()) {
result.add(invoice);
@@ -114,10 +119,11 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<InvoiceModelDao> getInvoicesByAccount(final UUID accountId, final LocalDate fromDate, final InternalTenantContext context) {
+ public List<InvoiceModelDao> getInvoicesByAccount(final LocalDate fromDate, final InternalTenantContext context) {
final List<InvoiceModelDao> invoicesForAccount = new ArrayList<InvoiceModelDao>();
synchronized (monitor) {
+ final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
for (final InvoiceModelDao invoice : get(context)) {
if (accountId.equals(invoice.getAccountId()) && !invoice.getTargetDate().isBefore(fromDate) && !invoice.isMigrated()) {
invoicesForAccount.add(invoice);
@@ -212,10 +218,11 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public List<InvoiceModelDao> getAllInvoicesByAccount(final UUID accountId, final InternalTenantContext context) {
+ public List<InvoiceModelDao> getAllInvoicesByAccount(final InternalTenantContext context) {
final List<InvoiceModelDao> result = new ArrayList<InvoiceModelDao>();
synchronized (monitor) {
+ final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
for (final InvoiceModelDao invoice : invoices.values()) {
if (accountId.equals(invoice.getAccountId())) {
result.add(invoice);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
index dc2ed45..4ce0994 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
@@ -25,13 +25,17 @@ import java.util.Map;
import java.util.UUID;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.mockito.Mockito;
import org.skife.jdbi.v2.exceptions.TransactionFailedException;
import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountData;
import com.ning.billing.catalog.DefaultPrice;
import com.ning.billing.catalog.MockInternationalPrice;
import com.ning.billing.catalog.MockPlan;
@@ -42,8 +46,7 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
-import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.clock.ClockMock;
import com.ning.billing.invoice.InvoiceTestSuiteWithEmbeddedDB;
import com.ning.billing.invoice.MockBillingEventSet;
import com.ning.billing.invoice.api.Invoice;
@@ -59,7 +62,10 @@ import com.ning.billing.invoice.model.DefaultInvoicePayment;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
import com.ning.billing.invoice.model.RepairAdjInvoiceItem;
-import com.ning.billing.clock.ClockMock;
+import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
+import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.entity.EntityPersistenceException;
import com.ning.billing.util.svcapi.junction.BillingEvent;
import com.ning.billing.util.svcapi.junction.BillingEventSet;
@@ -78,26 +84,35 @@ import static org.testng.Assert.assertTrue;
public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
+ private Account account;
+ private InternalCallContext context;
+
+ @BeforeMethod(groups = "slow")
+ public void setUp() throws Exception {
+ account = invoiceUtil.createAccount(callContext);
+ context = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
+ }
+
@Test(groups = "slow")
public void testSimple() throws Exception {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCToday(), clock.getUTCToday(), Currency.USD);
- invoiceUtil.createInvoice(invoice, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice, true, context);
- final InvoiceModelDao retrievedInvoice = invoiceDao.getById(invoice.getId(), internalCallContext);
+ final InvoiceModelDao retrievedInvoice = invoiceDao.getById(invoice.getId(), context);
invoiceUtil.checkInvoicesEqual(retrievedInvoice, invoice);
- invoiceUtil.checkInvoicesEqual(invoiceDao.getByNumber(retrievedInvoice.getInvoiceNumber(), internalCallContext), invoice);
+ invoiceUtil.checkInvoicesEqual(invoiceDao.getByNumber(retrievedInvoice.getInvoiceNumber(), context), invoice);
}
@Test(groups = "slow")
public void testCreationAndRetrievalByAccount() {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCToday(), clock.getUTCToday(), Currency.USD);
final LocalDate invoiceDate = invoice.getInvoiceDate();
- invoiceUtil.createInvoice(invoice, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice, true, context);
- final List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(accountId, internalCallContext);
+ final List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(context);
assertNotNull(invoices);
assertEquals(invoices.size(), 1);
final InvoiceModelDao thisInvoice = invoices.get(0);
@@ -110,7 +125,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testInvoicePayment() throws InvoiceApiException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCToday(), clock.getUTCToday(), Currency.USD);
final UUID invoiceId = invoice.getId();
final UUID subscriptionId = UUID.randomUUID();
@@ -121,9 +136,9 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
new BigDecimal("21.00"), new BigDecimal("7.00"), Currency.USD);
invoice.addInvoiceItem(invoiceItem);
- invoiceUtil.createInvoice(invoice, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice, true, context);
- final InvoiceModelDao savedInvoice = invoiceDao.getById(invoiceId, internalCallContext);
+ final InvoiceModelDao savedInvoice = invoiceDao.getById(invoiceId, context);
assertNotNull(savedInvoice);
assertEquals(InvoiceModelDaoHelper.getBalance(savedInvoice).compareTo(new BigDecimal("21.00")), 0);
assertEquals(savedInvoice.getInvoiceItems().size(), 1);
@@ -132,9 +147,9 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final UUID paymentId = UUID.randomUUID();
final DefaultInvoicePayment defaultInvoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, clock.getUTCNow().plusDays(12), paymentAmount, Currency.USD);
- invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), internalCallContext);
+ invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), context);
- final InvoiceModelDao retrievedInvoice = invoiceDao.getById(invoiceId, internalCallContext);
+ final InvoiceModelDao retrievedInvoice = invoiceDao.getById(invoiceId, context);
assertNotNull(retrievedInvoice);
assertEquals(retrievedInvoice.getInvoiceItems().size(), 1);
assertEquals(InvoiceModelDaoHelper.getBalance(retrievedInvoice).compareTo(new BigDecimal("10.00")), 0);
@@ -143,7 +158,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testRetrievalForNonExistentInvoiceOrInvoiceItem() throws InvoiceApiException {
try {
- invoiceDao.getById(UUID.randomUUID(), internalCallContext);
+ invoiceDao.getById(UUID.randomUUID(), context);
Assert.fail();
} catch (TransactionFailedException e) {
// TODO FIXME getById defined in EntityDaoBase
@@ -152,35 +167,35 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
}
try {
- invoiceDao.getByNumber(null, internalCallContext);
+ invoiceDao.getByNumber(null, context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.INVOICE_INVALID_NUMBER.getCode());
}
try {
- invoiceDao.getByNumber(Integer.MIN_VALUE, internalCallContext);
+ invoiceDao.getByNumber(Integer.MIN_VALUE, context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.INVOICE_NUMBER_NOT_FOUND.getCode());
}
try {
- invoiceDao.getChargebackById(UUID.randomUUID(), internalCallContext);
+ invoiceDao.getChargebackById(UUID.randomUUID(), context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.CHARGE_BACK_DOES_NOT_EXIST.getCode());
}
try {
- invoiceDao.getExternalChargeById(UUID.randomUUID(), internalCallContext);
+ invoiceDao.getExternalChargeById(UUID.randomUUID(), context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.INVOICE_ITEM_NOT_FOUND.getCode());
}
try {
- invoiceDao.getCreditById(UUID.randomUUID(), internalCallContext);
+ invoiceDao.getCreditById(UUID.randomUUID(), context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.INVOICE_ITEM_NOT_FOUND.getCode());
@@ -190,7 +205,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testCreateRefundOnNonExistingPayment() throws Exception {
try {
- invoiceDao.createRefund(UUID.randomUUID(), BigDecimal.TEN, false, ImmutableMap.<UUID, BigDecimal>of(), null, internalCallContext);
+ invoiceDao.createRefund(UUID.randomUUID(), BigDecimal.TEN, false, ImmutableMap.<UUID, BigDecimal>of(), null, context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.INVOICE_PAYMENT_BY_ATTEMPT_NOT_FOUND.getCode());
@@ -199,7 +214,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetInvoicesBySubscriptionForRecurringItems() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final UUID subscriptionId1 = UUID.randomUUID();
@@ -215,7 +230,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Create invoice 1 (subscriptions 1-4)
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final UUID invoiceId1 = invoice1.getId();
@@ -224,23 +239,23 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
final RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
rate3, rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(item3, internalCallContext);
+ invoiceUtil.createInvoiceItem(item3, context);
final RecurringInvoiceItem item4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
rate4, rate4, Currency.USD);
- invoiceUtil.createInvoiceItem(item4, internalCallContext);
+ invoiceUtil.createInvoiceItem(item4, context);
// Create invoice 2 (subscriptions 1-3)
final DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
final UUID invoiceId2 = invoice2.getId();
@@ -249,33 +264,33 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item5, internalCallContext);
+ invoiceUtil.createInvoiceItem(item5, context);
final RecurringInvoiceItem item6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item6, internalCallContext);
+ invoiceUtil.createInvoiceItem(item6, context);
final RecurringInvoiceItem item7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
rate3, rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(item7, internalCallContext);
+ invoiceUtil.createInvoiceItem(item7, context);
// Check that each subscription returns the correct number of invoices
- final List<InvoiceModelDao> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1, internalCallContext);
+ final List<InvoiceModelDao> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1, context);
assertEquals(items1.size(), 2);
- final List<InvoiceModelDao> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2, internalCallContext);
+ final List<InvoiceModelDao> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2, context);
assertEquals(items2.size(), 2);
- final List<InvoiceModelDao> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3, internalCallContext);
+ final List<InvoiceModelDao> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3, context);
assertEquals(items3.size(), 2);
- final List<InvoiceModelDao> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4, internalCallContext);
+ final List<InvoiceModelDao> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4, context);
assertEquals(items4.size(), 1);
}
@Test(groups = "slow")
public void testGetInvoicesBySubscriptionForFixedItems() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final UUID subscriptionId1 = UUID.randomUUID();
@@ -291,7 +306,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Create invoice 1 (subscriptions 1-4)
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final UUID invoiceId1 = invoice1.getId();
@@ -300,23 +315,23 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate,
rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
final FixedPriceInvoiceItem item2 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate,
rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
final FixedPriceInvoiceItem item3 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate,
rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(item3, internalCallContext);
+ invoiceUtil.createInvoiceItem(item3, context);
final FixedPriceInvoiceItem item4 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate,
rate4, Currency.USD);
- invoiceUtil.createInvoiceItem(item4, internalCallContext);
+ invoiceUtil.createInvoiceItem(item4, context);
// create invoice 2 (subscriptions 1-3)
final DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
final UUID invoiceId2 = invoice2.getId();
@@ -324,33 +339,33 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final FixedPriceInvoiceItem item5 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate,
rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item5, internalCallContext);
+ invoiceUtil.createInvoiceItem(item5, context);
final FixedPriceInvoiceItem item6 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate,
rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item6, internalCallContext);
+ invoiceUtil.createInvoiceItem(item6, context);
final FixedPriceInvoiceItem item7 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate,
rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(item7, internalCallContext);
+ invoiceUtil.createInvoiceItem(item7, context);
// check that each subscription returns the correct number of invoices
- final List<InvoiceModelDao> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1, internalCallContext);
+ final List<InvoiceModelDao> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1, context);
assertEquals(items1.size(), 2);
- final List<InvoiceModelDao> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2, internalCallContext);
+ final List<InvoiceModelDao> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2, context);
assertEquals(items2.size(), 2);
- final List<InvoiceModelDao> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3, internalCallContext);
+ final List<InvoiceModelDao> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3, context);
assertEquals(items3.size(), 2);
- final List<InvoiceModelDao> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4, internalCallContext);
+ final List<InvoiceModelDao> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4, context);
assertEquals(items4.size(), 1);
}
@Test(groups = "slow")
public void testGetInvoicesBySubscriptionForRecurringAndFixedItems() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final UUID subscriptionId1 = UUID.randomUUID();
@@ -366,7 +381,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Create invoice 1 (subscriptions 1-4)
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final UUID invoiceId1 = invoice1.getId();
@@ -375,39 +390,39 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem recurringItem1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem1, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem1, context);
final RecurringInvoiceItem recurringItem2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem2, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem2, context);
final RecurringInvoiceItem recurringItem3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
rate3, rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem3, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem3, context);
final RecurringInvoiceItem recurringItem4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
rate4, rate4, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem4, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem4, context);
final FixedPriceInvoiceItem fixedItem1 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate,
rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem1, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem1, context);
final FixedPriceInvoiceItem fixedItem2 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate,
rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem2, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem2, context);
final FixedPriceInvoiceItem fixedItem3 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate,
rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem3, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem3, context);
final FixedPriceInvoiceItem fixedItem4 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate,
rate4, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem4, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem4, context);
// create invoice 2 (subscriptions 1-3)
final DefaultInvoice invoice2 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
final UUID invoiceId2 = invoice2.getId();
@@ -416,76 +431,76 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem recurringItem5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem5, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem5, context);
final RecurringInvoiceItem recurringItem6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem6, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem6, context);
final RecurringInvoiceItem recurringItem7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
rate3, rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(recurringItem7, internalCallContext);
+ invoiceUtil.createInvoiceItem(recurringItem7, context);
final FixedPriceInvoiceItem fixedItem5 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate,
rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem5, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem5, context);
final FixedPriceInvoiceItem fixedItem6 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate,
rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem6, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem6, context);
final FixedPriceInvoiceItem fixedItem7 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate,
rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(fixedItem7, internalCallContext);
+ invoiceUtil.createInvoiceItem(fixedItem7, context);
// check that each subscription returns the correct number of invoices
- final List<InvoiceModelDao> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1, internalCallContext);
+ final List<InvoiceModelDao> items1 = invoiceDao.getInvoicesBySubscription(subscriptionId1, context);
assertEquals(items1.size(), 4);
- final List<InvoiceModelDao> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2, internalCallContext);
+ final List<InvoiceModelDao> items2 = invoiceDao.getInvoicesBySubscription(subscriptionId2, context);
assertEquals(items2.size(), 4);
- final List<InvoiceModelDao> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3, internalCallContext);
+ final List<InvoiceModelDao> items3 = invoiceDao.getInvoicesBySubscription(subscriptionId3, context);
assertEquals(items3.size(), 4);
- final List<InvoiceModelDao> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4, internalCallContext);
+ final List<InvoiceModelDao> items4 = invoiceDao.getInvoicesBySubscription(subscriptionId4, context);
assertEquals(items4.size(), 2);
}
@Test(groups = "slow")
public void testGetInvoicesForAccountAfterDate() {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate targetDate2 = new LocalDate(2011, 12, 6);
final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate2, Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
List<InvoiceModelDao> invoices;
- invoices = invoiceDao.getInvoicesByAccount(accountId, new LocalDate(2011, 1, 1), internalCallContext);
+ invoices = invoiceDao.getInvoicesByAccount(new LocalDate(2011, 1, 1), context);
assertEquals(invoices.size(), 2);
- invoices = invoiceDao.getInvoicesByAccount(accountId, new LocalDate(2011, 10, 6), internalCallContext);
+ invoices = invoiceDao.getInvoicesByAccount(new LocalDate(2011, 10, 6), context);
assertEquals(invoices.size(), 2);
- invoices = invoiceDao.getInvoicesByAccount(accountId, new LocalDate(2011, 10, 11), internalCallContext);
+ invoices = invoiceDao.getInvoicesByAccount(new LocalDate(2011, 10, 11), context);
assertEquals(invoices.size(), 1);
- invoices = invoiceDao.getInvoicesByAccount(accountId, new LocalDate(2011, 12, 6), internalCallContext);
+ invoices = invoiceDao.getInvoicesByAccount(new LocalDate(2011, 12, 6), context);
assertEquals(invoices.size(), 1);
- invoices = invoiceDao.getInvoicesByAccount(accountId, new LocalDate(2012, 1, 1), internalCallContext);
+ invoices = invoiceDao.getInvoicesByAccount(new LocalDate(2012, 1, 1), context);
assertEquals(invoices.size(), 0);
}
@Test(groups = "slow")
public void testAccountBalance() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -495,27 +510,27 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
endDate, rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
final BigDecimal payment1 = new BigDecimal("48.0");
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
- invoiceUtil.createPayment(payment, internalCallContext);
+ invoiceUtil.createPayment(payment, context);
- final BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(rate1.add(rate2).subtract(payment1)), 0);
}
@Test(groups = "slow")
public void testAccountBalanceWithCredit() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -524,22 +539,22 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
endDate, rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
final CreditAdjInvoiceItem creditItem = new CreditAdjInvoiceItem(invoice1.getId(), accountId, new LocalDate(), rate1.negate(), Currency.USD);
- invoiceUtil.createInvoiceItem(creditItem, internalCallContext);
+ invoiceUtil.createInvoiceItem(creditItem, context);
- final BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(BigDecimal.ZERO), 0);
}
@Test(groups = "slow")
public void testAccountBalanceWithNoPayments() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -549,28 +564,28 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
- final BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(rate1.add(rate2)), 0);
}
@Test(groups = "slow")
public void testAccountBalanceWithNoInvoiceItems() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final BigDecimal payment1 = new BigDecimal("48.0");
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
- invoiceUtil.createPayment(payment, internalCallContext);
+ invoiceUtil.createPayment(payment, context);
- final BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ final BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(BigDecimal.ZERO.subtract(payment1)), 0);
}
@@ -586,11 +601,11 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
private void testAccountBalanceWithRefundInternal(final boolean withAdjustment) throws InvoiceApiException, EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -601,20 +616,20 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Recurring item
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
+ BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("20.00")), 0);
// Pay the whole thing
final UUID paymentId = UUID.randomUUID();
final BigDecimal payment1 = rate1;
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), new DateTime(), payment1, Currency.USD);
- invoiceUtil.createPayment(payment, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createPayment(payment, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
- invoiceDao.createRefund(paymentId, refund1, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceDao.createRefund(paymentId, refund1, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
if (withAdjustment) {
assertEquals(balance.compareTo(BigDecimal.ZERO), 0);
} else {
@@ -635,12 +650,12 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
}
private void testRefundWithRepairAndInvoiceItemAdjustmentInternal(final BigDecimal refundAmount) throws InvoiceApiException, EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -650,42 +665,42 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Recurring item
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, amount, amount, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
- BigDecimal balancePriorRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
+ BigDecimal balancePriorRefund = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balancePriorRefund.compareTo(new BigDecimal("20.00")), 0);
// Pay the whole thing
final UUID paymentId = UUID.randomUUID();
final BigDecimal payment1 = amount;
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice.getId(), new DateTime(), payment1, Currency.USD);
- invoiceUtil.createPayment(payment, internalCallContext);
- balancePriorRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createPayment(payment, context);
+ balancePriorRefund = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balancePriorRefund.compareTo(new BigDecimal("0.00")), 0);
// Repair the item (And add CBA item that should be generated)
final InvoiceItem repairItem = new RepairAdjInvoiceItem(invoice.getId(), accountId, startDate, endDate, amount.negate(), Currency.USD, item2.getId());
- invoiceUtil.createInvoiceItem(repairItem, internalCallContext);
+ invoiceUtil.createInvoiceItem(repairItem, context);
final InvoiceItem cbaItem = new CreditBalanceAdjInvoiceItem(invoice.getId(), accountId, startDate, amount, Currency.USD);
- invoiceUtil.createInvoiceItem(cbaItem, internalCallContext);
+ invoiceUtil.createInvoiceItem(cbaItem, context);
final Map<UUID, BigDecimal> itemAdjustment = new HashMap<UUID, BigDecimal>();
// PAss a null value to let invoice calculate the amount to adjust
itemAdjustment.put(item2.getId(), null);
- invoiceDao.createRefund(paymentId, refundAmount, true, itemAdjustment, UUID.randomUUID(), internalCallContext);
- balancePriorRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceDao.createRefund(paymentId, refundAmount, true, itemAdjustment, UUID.randomUUID(), context);
+ balancePriorRefund = invoiceDao.getAccountBalance(accountId, context);
final boolean partialRefund = refundAmount.compareTo(amount) < 0;
- final BigDecimal cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
- final InvoiceModelDao savedInvoice = invoiceDao.getById(invoice.getId(), internalCallContext);
+ final BigDecimal cba = invoiceDao.getAccountCBA(accountId, context);
+ final InvoiceModelDao savedInvoice = invoiceDao.getById(invoice.getId(), context);
final BigDecimal expectedCba = balancePriorRefund.compareTo(BigDecimal.ZERO) < 0 ? balancePriorRefund.negate() : BigDecimal.ZERO;
assertEquals(cba.compareTo(expectedCba), 0);
// Let's re-calculate them from invoice
- final BigDecimal balanceAfterRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
- final BigDecimal cbaAfterRefund = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ final BigDecimal balanceAfterRefund = invoiceDao.getAccountBalance(accountId, context);
+ final BigDecimal cbaAfterRefund = invoiceDao.getAccountCBA(accountId, context);
if (partialRefund) {
// IB = 20 (rec) - 20 (repair) + 20 (cba) - (20 -7) = 7; AB = IB - CBA = 7 - 20 = -13
@@ -732,11 +747,11 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
}
private void testAccountBalanceWithRefundAndCBAInternal(final boolean withAdjustment, final BigDecimal refundAmount, final BigDecimal expectedFinalBalance) throws InvoiceApiException, EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -748,49 +763,49 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Fixed Item
final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
amount1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("5.00")), 0);
// Recurring item
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("25.00")), 0);
// Pay the whole thing
final UUID paymentId = UUID.randomUUID();
final BigDecimal payment1 = amount1.add(rate1);
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), new DateTime(), payment1, Currency.USD);
- invoiceUtil.createPayment(payment, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createPayment(payment, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
// Repair previous item with rate 2
final RepairAdjInvoiceItem item2Repair = new RepairAdjInvoiceItem(invoice1.getId(), accountId, startDate, endDate, rate1.negate(), Currency.USD, item2.getId());
final RecurringInvoiceItem item2Replace = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2Repair, internalCallContext);
- invoiceUtil.createInvoiceItem(item2Replace, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2Repair, context);
+ invoiceUtil.createInvoiceItem(item2Replace, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("-10.00")), 0);
// CBA
final CreditBalanceAdjInvoiceItem cbaItem = new CreditBalanceAdjInvoiceItem(invoice1.getId(), accountId, new LocalDate(), balance.negate(), Currency.USD);
- invoiceUtil.createInvoiceItem(cbaItem, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(cbaItem, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("-10.00")), 0);
- BigDecimal cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ BigDecimal cba = invoiceDao.getAccountCBA(accountId, context);
assertEquals(cba.compareTo(new BigDecimal("10.00")), 0);
// PARTIAL REFUND on the payment
- invoiceDao.createRefund(paymentId, refundAmount, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), internalCallContext);
+ invoiceDao.createRefund(paymentId, refundAmount, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(expectedFinalBalance), 0);
- cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ cba = invoiceDao.getAccountCBA(accountId, context);
final BigDecimal expectedCba = balance.compareTo(BigDecimal.ZERO) < 0 ? balance.negate() : BigDecimal.ZERO;
assertEquals(cba.compareTo(expectedCba), 0);
}
@@ -798,14 +813,14 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testExternalChargeWithCBA() throws InvoiceApiException, EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
- invoiceDao.insertCredit(accountId, null, new BigDecimal("20.0"), new LocalDate(), Currency.USD, internalCallContext);
+ invoiceDao.insertCredit(accountId, null, new BigDecimal("20.0"), new LocalDate(), Currency.USD, context);
- final InvoiceItemModelDao charge = invoiceDao.insertExternalCharge(accountId, null, bundleId, "bla", new BigDecimal("15.0"), clock.getUTCNow().toLocalDate(), Currency.USD, internalCallContext);
+ final InvoiceItemModelDao charge = invoiceDao.insertExternalCharge(accountId, null, bundleId, "bla", new BigDecimal("15.0"), clock.getUTCNow().toLocalDate(), Currency.USD, context);
- final InvoiceModelDao newInvoice = invoiceDao.getById(charge.getInvoiceId(), internalCallContext);
+ final InvoiceModelDao newInvoice = invoiceDao.getById(charge.getInvoiceId(), context);
final List<InvoiceItemModelDao> items = newInvoice.getInvoiceItems();
assertEquals(items.size(), 2);
for (final InvoiceItemModelDao cur : items) {
@@ -819,11 +834,11 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testAccountBalanceWithAllSortsOfThings() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -835,88 +850,85 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Fixed Item
final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
amount1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ BigDecimal balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("5.00")), 0);
// Recurring item
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("25.00")), 0);
// Pay the whole thing
final BigDecimal payment1 = amount1.add(rate1);
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
- invoiceUtil.createPayment(payment, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createPayment(payment, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
// Repair previous item with rate 2
final RepairAdjInvoiceItem item2Repair = new RepairAdjInvoiceItem(invoice1.getId(), accountId, startDate, endDate, rate1.negate(), Currency.USD, item2.getId());
final RecurringInvoiceItem item2Replace = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2Repair, internalCallContext);
- invoiceUtil.createInvoiceItem(item2Replace, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2Repair, context);
+ invoiceUtil.createInvoiceItem(item2Replace, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("-10.00")), 0);
// CBA
final CreditBalanceAdjInvoiceItem cbaItem = new CreditBalanceAdjInvoiceItem(invoice1.getId(), accountId, new LocalDate(), balance.negate(), Currency.USD);
- invoiceUtil.createInvoiceItem(cbaItem, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(cbaItem, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("-10.00")), 0);
- BigDecimal cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ BigDecimal cba = invoiceDao.getAccountCBA(accountId, context);
assertEquals(cba.compareTo(new BigDecimal("10.00")), 0);
// partial REFUND on the payment (along with CBA generated by the system)
final InvoicePayment refund = new DefaultInvoicePayment(UUID.randomUUID(), InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), rate2.negate(), Currency.USD, null, payment.getId());
- invoiceUtil.createPayment(refund, internalCallContext);
+ invoiceUtil.createPayment(refund, context);
final CreditBalanceAdjInvoiceItem cbaItem2 = new CreditBalanceAdjInvoiceItem(invoice1.getId(), accountId, new LocalDate(), rate2.negate(), Currency.USD);
- invoiceUtil.createInvoiceItem(cbaItem2, internalCallContext);
+ invoiceUtil.createInvoiceItem(cbaItem2, context);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(BigDecimal.ZERO), 0);
- cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ cba = invoiceDao.getAccountCBA(accountId, context);
assertEquals(cba.compareTo(BigDecimal.ZERO), 0);
// NEXT RECURRING on invoice 2
final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1.plusMonths(1), Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
final RecurringInvoiceItem nextItem = new RecurringInvoiceItem(invoice2.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test bla", startDate.plusMonths(1),
endDate.plusMonths(1), rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(nextItem, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(nextItem, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("10.00")), 0);
- cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ cba = invoiceDao.getAccountCBA(accountId, context);
assertEquals(cba.compareTo(new BigDecimal("0.00")), 0);
// FINALLY ISSUE A CREDIT ADJ
final CreditAdjInvoiceItem creditItem = new CreditAdjInvoiceItem(invoice2.getId(), accountId, new LocalDate(), rate2.negate(), Currency.USD);
- invoiceUtil.createInvoiceItem(creditItem, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ invoiceUtil.createInvoiceItem(creditItem, context);
+ balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
- cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
+ cba = invoiceDao.getAccountCBA(accountId, context);
assertEquals(cba.compareTo(new BigDecimal("0.00")), 0);
-
}
@Test(groups = "slow")
public void testAccountCredit() {
-
- final UUID accountId = UUID.randomUUID();
-
+ final UUID accountId = account.getId();
final LocalDate effectiveDate = new LocalDate(2011, 3, 1);
final BigDecimal creditAmount = new BigDecimal("5.0");
- invoiceDao.insertCredit(accountId, null, creditAmount, effectiveDate, Currency.USD, internalCallContext);
+ invoiceDao.insertCredit(accountId, null, creditAmount, effectiveDate, Currency.USD, context);
- final List<InvoiceModelDao> invoices = invoiceDao.getAllInvoicesByAccount(accountId, internalCallContext);
+ final List<InvoiceModelDao> invoices = invoiceDao.getAllInvoicesByAccount(context);
assertEquals(invoices.size(), 1);
final InvoiceModelDao invoice = invoices.get(0);
@@ -963,14 +975,13 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
}
private void testInvoiceCreditInternal(final BigDecimal creditAmount, final BigDecimal expectedBalance, final boolean expectCBA) throws EntityPersistenceException {
-
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
// Create one invoice with a fixed invoice item
final LocalDate targetDate = new LocalDate(2011, 2, 15);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
@@ -979,14 +990,14 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// Fixed Item
final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
amount1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
// Create the credit item
final LocalDate effectiveDate = new LocalDate(2011, 3, 1);
- invoiceDao.insertCredit(accountId, invoice1.getId(), creditAmount, effectiveDate, Currency.USD, internalCallContext);
+ invoiceDao.insertCredit(accountId, invoice1.getId(), creditAmount, effectiveDate, Currency.USD, context);
- final List<InvoiceModelDao> invoices = invoiceDao.getAllInvoicesByAccount(accountId, internalCallContext);
+ final List<InvoiceModelDao> invoices = invoiceDao.getAllInvoicesByAccount(context);
assertEquals(invoices.size(), 1);
final InvoiceModelDao invoice = invoices.get(0);
@@ -1009,11 +1020,11 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetUnpaidInvoicesByAccountId() throws EntityPersistenceException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID bundleId = UUID.randomUUID();
final LocalDate targetDate1 = new LocalDate(2011, 10, 6);
final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
final LocalDate startDate = new LocalDate(2011, 3, 1);
final LocalDate endDate = startDate.plusMonths(1);
@@ -1023,26 +1034,26 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
rate1, rate1, Currency.USD);
- invoiceUtil.createInvoiceItem(item1, internalCallContext);
+ invoiceUtil.createInvoiceItem(item1, context);
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
rate2, rate2, Currency.USD);
- invoiceUtil.createInvoiceItem(item2, internalCallContext);
+ invoiceUtil.createInvoiceItem(item2, context);
LocalDate upToDate;
Collection<InvoiceModelDao> invoices;
upToDate = new LocalDate(2011, 1, 1);
- invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, internalCallContext);
+ invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, context);
assertEquals(invoices.size(), 0);
upToDate = new LocalDate(2012, 1, 1);
- invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, internalCallContext);
+ invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, context);
assertEquals(invoices.size(), 1);
final LocalDate targetDate2 = new LocalDate(2011, 7, 1);
final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate2, Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
final LocalDate startDate2 = new LocalDate(2011, 6, 1);
final LocalDate endDate2 = startDate2.plusMonths(3);
@@ -1051,14 +1062,14 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoice2.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase C", startDate2, endDate2,
rate3, rate3, Currency.USD);
- invoiceUtil.createInvoiceItem(item3, internalCallContext);
+ invoiceUtil.createInvoiceItem(item3, context);
upToDate = new LocalDate(2011, 1, 1);
- invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, internalCallContext);
+ invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, context);
assertEquals(invoices.size(), 0);
upToDate = new LocalDate(2012, 1, 1);
- invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, internalCallContext);
+ invoices = invoiceDao.getUnpaidInvoicesByAccountId(accountId, upToDate, context);
assertEquals(invoices.size(), 2);
}
@@ -1069,7 +1080,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
*/
@Test(groups = "slow")
public void testInvoiceGenerationForImmediateChanges() throws InvoiceApiException, CatalogApiException {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final List<Invoice> invoiceList = new ArrayList<Invoice>();
final LocalDate targetDate = new LocalDate(2011, 2, 16);
final Currency currency = Currency.USD;
@@ -1112,13 +1123,13 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
assertEquals(invoice2.getBalance(), FIVE);
invoiceList.add(invoice2);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
+ invoiceUtil.createInvoice(invoice2, true, context);
- final InvoiceModelDao savedInvoice1 = invoiceDao.getById(invoice1.getId(), internalCallContext);
+ final InvoiceModelDao savedInvoice1 = invoiceDao.getById(invoice1.getId(), context);
assertEquals(InvoiceModelDaoHelper.getBalance(savedInvoice1), FIVE);
- final InvoiceModelDao savedInvoice2 = invoiceDao.getById(invoice2.getId(), internalCallContext);
+ final InvoiceModelDao savedInvoice2 = invoiceDao.getById(invoice2.getId(), context);
assertEquals(InvoiceModelDaoHelper.getBalance(savedInvoice2), TEN);
}
@@ -1178,7 +1189,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final BillingEventSet events = new MockBillingEventSet();
events.add(event1);
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final Invoice invoice1 = generator.generateInvoice(accountId, events, null, new LocalDate(effectiveDate1), Currency.USD);
assertNotNull(invoice1);
assertEquals(invoice1.getNumberOfItems(), 1);
@@ -1187,7 +1198,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final List<Invoice> invoiceList = new ArrayList<Invoice>();
invoiceList.add(invoice1);
- //invoiceUtil.createInvoice(invoice1, invoice1.getTargetDate().getDayOfMonth(), internalCallContext);
+ //invoiceUtil.createInvoice(invoice1, invoice1.getTargetDate().getDayOfMonth(), context);
final DateTime effectiveDate2 = effectiveDate1.plusDays(30);
final BillingEvent event2 = invoiceUtil.createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
@@ -1202,7 +1213,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
invoiceList.add(invoice2);
- //invoiceUtil.createInvoice(invoice2, invoice2.getTargetDate().getDayOfMonth(), internalCallContext);
+ //invoiceUtil.createInvoice(invoice2, invoice2.getTargetDate().getDayOfMonth(), context);
final DateTime effectiveDate3 = effectiveDate2.plusMonths(1);
final Invoice invoice3 = generator.generateInvoice(accountId, events, invoiceList, new LocalDate(effectiveDate3), Currency.USD);
@@ -1210,7 +1221,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
assertEquals(invoice3.getNumberOfItems(), 1);
assertEquals(invoice3.getBalance().compareTo(cheapAmount), 0);
- //invoiceUtil.createInvoice(invoice3, invoice3.getTargetDate().getDayOfMonth(), internalCallContext);
+ //invoiceUtil.createInvoice(invoice3, invoice3.getTargetDate().getDayOfMonth(), context);
}
@Test(groups = "slow")
@@ -1255,8 +1266,8 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
assertEquals(invoice.getNumberOfItems(), 2);
assertEquals(invoice.getBalance().compareTo(cheapAmount), 0);
- invoiceUtil.createInvoice(invoice, true, internalCallContext);
- final InvoiceModelDao savedInvoice = invoiceDao.getById(invoice.getId(), internalCallContext);
+ invoiceUtil.createInvoice(invoice, true, context);
+ final InvoiceModelDao savedInvoice = invoiceDao.getById(invoice.getId(), context);
assertNotNull(savedInvoice);
assertEquals(savedInvoice.getInvoiceItems().size(), 2);
@@ -1265,8 +1276,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testRefundedInvoiceWithInvoiceItemAdjustmentWithRepair() throws InvoiceApiException {
-
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
final UUID subscriptionId = UUID.randomUUID();
final UUID bundleId = UUID.randomUUID();
final LocalDate startDate = new LocalDate(2010, 1, 1);
@@ -1285,7 +1295,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
recuringStartDate, recuringEndDate, new BigDecimal("239.00"), new BigDecimal("239.00"), Currency.USD);
invoice.addInvoiceItem(invoiceItem);
- invoiceUtil.createInvoice(invoice, true, internalCallContext);
+ invoiceUtil.createInvoice(invoice, true, context);
((ClockMock) clock).addDays(1);
@@ -1293,14 +1303,14 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final BigDecimal paymentAmount = new BigDecimal("239.00");
final UUID paymentId = UUID.randomUUID();
final DefaultInvoicePayment defaultInvoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, clock.getUTCNow(), paymentAmount, Currency.USD);
- invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), internalCallContext);
+ invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), context);
// AND THEN THIRD THE REFUND
final Map<UUID, BigDecimal> invoiceItemMap = new HashMap<UUID, BigDecimal>();
invoiceItemMap.put(invoiceItem.getId(), new BigDecimal("239.00"));
- invoiceDao.createRefund(paymentId, paymentAmount, true, invoiceItemMap, UUID.randomUUID(), internalCallContext);
+ invoiceDao.createRefund(paymentId, paymentAmount, true, invoiceItemMap, UUID.randomUUID(), context);
- final InvoiceModelDao savedInvoice = invoiceDao.getById(invoiceId, internalCallContext);
+ final InvoiceModelDao savedInvoice = invoiceDao.getById(invoiceId, context);
assertNotNull(savedInvoice);
assertEquals(savedInvoice.getInvoiceItems().size(), 2);
@@ -1326,10 +1336,10 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
"new-event", 1L, SubscriptionBaseTransitionType.CREATE);
events.add(event1);
final Invoice newInvoice = generator.generateInvoice(UUID.randomUUID(), events, invoices, targetDate, Currency.USD);
- invoiceUtil.createInvoice(newInvoice, true, internalCallContext);
+ invoiceUtil.createInvoice(newInvoice, true, context);
// VERIFY THAT WE STILL HAVE ONLY 2 ITEMS, MENAING THERE WERE NO REPAIR AND NO CBA GENERATED
- final Invoice firstInvoice = new DefaultInvoice(invoiceDao.getById(invoiceId, internalCallContext));
+ final Invoice firstInvoice = new DefaultInvoice(invoiceDao.getById(invoiceId, context));
assertNotNull(firstInvoice);
assertEquals(firstInvoice.getInvoiceItems().size(), 2);
}
@@ -1362,8 +1372,8 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
Invoice invoice1 = generator.generateInvoice(UUID.randomUUID(), events, invoices, new LocalDate(targetDate1), Currency.USD);
invoices.add(invoice1);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
- invoice1 = new DefaultInvoice(invoiceDao.getById(invoice1.getId(), internalCallContext));
+ invoiceUtil.createInvoice(invoice1, true, context);
+ invoice1 = new DefaultInvoice(invoiceDao.getById(invoice1.getId(), context));
assertNotNull(invoice1.getInvoiceNumber());
final BillingEvent event2 = invoiceUtil.createMockBillingEvent(null, subscription, targetDate1, plan, phase2, null,
@@ -1372,14 +1382,14 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
"testEvent2", 2L, SubscriptionBaseTransitionType.CHANGE);
events.add(event2);
Invoice invoice2 = generator.generateInvoice(UUID.randomUUID(), events, invoices, new LocalDate(targetDate2), Currency.USD);
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
- invoice2 = new DefaultInvoice(invoiceDao.getById(invoice2.getId(), internalCallContext));
+ invoiceUtil.createInvoice(invoice2, true, context);
+ invoice2 = new DefaultInvoice(invoiceDao.getById(invoice2.getId(), context));
assertNotNull(invoice2.getInvoiceNumber());
}
@Test(groups = "slow")
public void testDeleteCBANotConsumed() throws Exception {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
// Create invoice 1
// Scenario: single item with payment
@@ -1397,26 +1407,26 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem1 = new CreditBalanceAdjInvoiceItem(fixedItem1.getInvoiceId(), fixedItem1.getAccountId(),
fixedItem1.getStartDate(), fixedItem1.getAmount(),
fixedItem1.getCurrency());
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
- invoiceUtil.createInvoiceItem(fixedItem1, internalCallContext);
- invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
+ invoiceUtil.createInvoiceItem(fixedItem1, context);
+ invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, context);
// Verify scenario - no CBA should have been used
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 10.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 10.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 10.00, 10.00);
// Delete the CBA on invoice 1
- invoiceDao.deleteCBA(accountId, invoice1.getId(), creditBalanceAdjInvoiceItem1.getId(), internalCallContext);
+ invoiceDao.deleteCBA(accountId, invoice1.getId(), creditBalanceAdjInvoiceItem1.getId(), context);
// Verify the result
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 0.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 0.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 0.00, 0.00);
}
@Test(groups = "slow")
public void testRefundWithCBAPartiallyConsumed() throws Exception {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
// Create invoice 1
// Scenario: single item with payment
@@ -1438,12 +1448,12 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final UUID paymentId = UUID.randomUUID();
final DefaultInvoicePayment defaultInvoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), clock.getUTCNow().plusDays(12), new BigDecimal("10.0"), Currency.USD);
- invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), internalCallContext);
+ invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), context);
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
- invoiceUtil.createInvoiceItem(fixedItem1, internalCallContext);
- invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
+ invoiceUtil.createInvoiceItem(fixedItem1, context);
+ invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, context);
// Create invoice 2
// Scenario: single item
@@ -1455,27 +1465,27 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem2 = new CreditBalanceAdjInvoiceItem(fixedItem2.getInvoiceId(), fixedItem2.getAccountId(),
fixedItem2.getStartDate(), fixedItem2.getAmount().negate(),
fixedItem2.getCurrency());
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
- invoiceUtil.createInvoiceItem(fixedItem2, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem2, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
+ invoiceUtil.createInvoiceItem(fixedItem2, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem2, context);
// Verify scenario - half of the CBA should have been used
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 5.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 5.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 0.00, 10.00);
invoiceUtil.verifyInvoice(invoice2.getId(), 0.00, -5.00);
// Refund Payment before we can deleted CBA
- invoiceDao.createRefund(paymentId, new BigDecimal("10.0"), false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), internalCallContext);
+ invoiceDao.createRefund(paymentId, new BigDecimal("10.0"), false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
// Verify all three invoices were affected
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 0.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 0.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 5.00, 5.00);
invoiceUtil.verifyInvoice(invoice2.getId(), 0.00, -5.00);
}
@Test(groups = "slow")
public void testRefundCBAFullyConsumedTwice() throws Exception {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
// Create invoice 1
// Scenario: single item with payment
@@ -1493,17 +1503,17 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem1 = new CreditBalanceAdjInvoiceItem(fixedItem1.getInvoiceId(), fixedItem1.getAccountId(),
fixedItem1.getStartDate(), fixedItem1.getAmount(),
fixedItem1.getCurrency());
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
- invoiceUtil.createInvoiceItem(fixedItem1, internalCallContext);
- invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
+ invoiceUtil.createInvoiceItem(fixedItem1, context);
+ invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, context);
final BigDecimal paymentAmount = new BigDecimal("10.00");
final UUID paymentId = UUID.randomUUID();
final DefaultInvoicePayment defaultInvoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), clock.getUTCNow().plusDays(12), paymentAmount, Currency.USD);
- invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), internalCallContext);
+ invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), context);
// Create invoice 2
// Scenario: single item
@@ -1515,9 +1525,9 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem2 = new CreditBalanceAdjInvoiceItem(fixedItem2.getInvoiceId(), fixedItem2.getAccountId(),
fixedItem2.getStartDate(), fixedItem2.getAmount().negate(),
fixedItem2.getCurrency());
- invoiceUtil.createInvoice(invoice2, true, internalCallContext);
- invoiceUtil.createInvoiceItem(fixedItem2, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem2, internalCallContext);
+ invoiceUtil.createInvoice(invoice2, true, context);
+ invoiceUtil.createInvoiceItem(fixedItem2, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem2, context);
// Create invoice 3
// Scenario: single item
@@ -1529,20 +1539,20 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem3 = new CreditBalanceAdjInvoiceItem(fixedItem3.getInvoiceId(), fixedItem3.getAccountId(),
fixedItem3.getStartDate(), fixedItem3.getAmount().negate(),
fixedItem3.getCurrency());
- invoiceUtil.createInvoice(invoice3, true, internalCallContext);
- invoiceUtil.createInvoiceItem(fixedItem3, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem3, internalCallContext);
+ invoiceUtil.createInvoice(invoice3, true, context);
+ invoiceUtil.createInvoiceItem(fixedItem3, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem3, context);
// Verify scenario - all CBA should have been used
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 0.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 0.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 0.00, 10.00);
invoiceUtil.verifyInvoice(invoice2.getId(), 0.00, -5.00);
invoiceUtil.verifyInvoice(invoice3.getId(), 0.00, -5.00);
- invoiceDao.createRefund(paymentId, paymentAmount, false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), internalCallContext);
+ invoiceDao.createRefund(paymentId, paymentAmount, false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
// Verify all three invoices were affected
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 0.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 0.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 10.00, 10.00);
invoiceUtil.verifyInvoice(invoice2.getId(), 0.00, -5.00);
invoiceUtil.verifyInvoice(invoice3.getId(), 0.00, -5.00);
@@ -1550,7 +1560,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testCantDeleteCBAIfInvoiceBalanceBecomesNegative() throws Exception {
- final UUID accountId = UUID.randomUUID();
+ final UUID accountId = account.getId();
// Create invoice 1
// Scenario:
@@ -1564,24 +1574,24 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem1 = new CreditBalanceAdjInvoiceItem(invoice1.getId(), invoice1.getAccountId(),
invoice1.getInvoiceDate(), repairAdjInvoiceItem.getAmount().negate(),
invoice1.getCurrency());
- invoiceUtil.createInvoice(invoice1, true, internalCallContext);
- invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, internalCallContext);
- invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, internalCallContext);
+ invoiceUtil.createInvoice(invoice1, true, context);
+ invoiceUtil.createInvoiceItem(repairAdjInvoiceItem, context);
+ invoiceUtil.createInvoiceItem(creditBalanceAdjInvoiceItem1, context);
// Verify scenario
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 10.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 10.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 0.00, 10.00);
// Delete the CBA on invoice 1
try {
- invoiceDao.deleteCBA(accountId, invoice1.getId(), creditBalanceAdjInvoiceItem1.getId(), internalCallContext);
+ invoiceDao.deleteCBA(accountId, invoice1.getId(), creditBalanceAdjInvoiceItem1.getId(), context);
Assert.fail();
} catch (InvoiceApiException e) {
Assert.assertEquals(e.getCode(), ErrorCode.INVOICE_WOULD_BE_NEGATIVE.getCode());
}
// Verify the result
- Assert.assertEquals(invoiceDao.getAccountCBA(accountId, internalCallContext).doubleValue(), 10.00);
+ Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 10.00);
invoiceUtil.verifyInvoice(invoice1.getId(), 0.00, 10.00);
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java
index d51aa36..1770ccc 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModule.java
@@ -25,12 +25,12 @@ import com.ning.billing.mock.glue.MockGlobalLockerModule;
import com.ning.billing.util.email.EmailModule;
import com.ning.billing.util.email.templates.TemplateModule;
import com.ning.billing.util.glue.CacheModule;
+import com.ning.billing.util.glue.CallContextModule;
import com.ning.billing.util.glue.CustomFieldModule;
import com.ning.billing.util.glue.NotificationQueueModule;
import com.ning.billing.util.glue.TagStoreModule;
-import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcapi.subscription.SubscriptionBaseInternalApi;
import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcapi.subscription.SubscriptionBaseInternalApi;
public class TestInvoiceModule extends DefaultInvoiceModule {
@@ -41,14 +41,13 @@ public class TestInvoiceModule extends DefaultInvoiceModule {
private void installExternalApis() {
bind(SubscriptionBaseInternalApi.class).toInstance(Mockito.mock(SubscriptionBaseInternalApi.class));
- bind(AccountInternalApi.class).toInstance(Mockito.mock(AccountInternalApi.class));
bind(BillingInternalApi.class).toInstance(Mockito.mock(BillingInternalApi.class));
}
@Override
protected void configure() {
super.configure();
-
+ install(new CallContextModule());
install(new MockGlobalLockerModule());
install(new CatalogModule(configSource));
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java
index 58d4a49..172b6f3 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleNoDB.java
@@ -16,13 +16,16 @@
package com.ning.billing.invoice.glue;
+import org.mockito.Mockito;
import org.skife.config.ConfigSource;
import com.ning.billing.GuicyKillbillTestNoDBModule;
+import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.dao.MockInvoiceDao;
import com.ning.billing.mock.glue.MockNonEntityDaoModule;
import com.ning.billing.util.bus.InMemoryBusModule;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
public class TestInvoiceModuleNoDB extends TestInvoiceModule {
@@ -40,5 +43,8 @@ public class TestInvoiceModuleNoDB extends TestInvoiceModule {
install(new GuicyKillbillTestNoDBModule());
install(new MockNonEntityDaoModule());
install(new InMemoryBusModule(configSource));
+
+ bind(AccountInternalApi.class).toInstance(Mockito.mock(AccountInternalApi.class));
+ bind(AccountUserApi.class).toInstance(Mockito.mock(AccountUserApi.class));
}
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleWithEmbeddedDb.java b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleWithEmbeddedDb.java
index a6cbc45..d491c30 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleWithEmbeddedDb.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/TestInvoiceModuleWithEmbeddedDb.java
@@ -19,6 +19,7 @@ package com.ning.billing.invoice.glue;
import org.skife.config.ConfigSource;
import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
+import com.ning.billing.account.glue.DefaultAccountModule;
import com.ning.billing.invoice.InvoiceListener;
import com.ning.billing.invoice.TestInvoiceNotificationQListener;
import com.ning.billing.util.glue.BusModule;
@@ -40,7 +41,7 @@ public class TestInvoiceModuleWithEmbeddedDb extends TestInvoiceModule {
@Override
public void configure() {
super.configure();
-
+ install(new DefaultAccountModule(configSource));
install(new GuicyKillbillTestWithEmbeddedDBModule());
install(new NonEntityDaoModule());
install(new MetricsModule());
diff --git a/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java b/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
index aff1faf..e3e5c7c 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
@@ -26,6 +26,7 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.bus.api.PersistentBus;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.commons.locker.GlobalLocker;
@@ -77,6 +78,8 @@ public abstract class InvoiceTestSuiteWithEmbeddedDB extends GuicyKillbillTestSu
@Inject
protected BillingInternalApi billingApi;
@Inject
+ protected AccountUserApi accountUserApi;
+ @Inject
protected AccountInternalApi accountApi;
@Inject
protected SubscriptionBaseInternalApi subscriptionApi;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
index 0342859..4651ad9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -39,9 +39,7 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
-import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.util.timezone.DateAndTimeZoneContext;
+import com.ning.billing.clock.ClockMock;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItem;
@@ -50,23 +48,26 @@ import com.ning.billing.invoice.api.InvoiceNotifier;
import com.ning.billing.invoice.dao.InvoiceItemModelDao;
import com.ning.billing.invoice.dao.InvoiceModelDao;
import com.ning.billing.invoice.notification.NullInvoiceNotifier;
+import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.clock.ClockMock;
import com.ning.billing.util.svcapi.junction.BillingEventSet;
import com.ning.billing.util.svcapi.junction.BillingModeType;
+import com.ning.billing.util.timezone.DateAndTimeZoneContext;
public class TestInvoiceDispatcher extends InvoiceTestSuiteWithEmbeddedDB {
private Account account;
private SubscriptionBase subscription;
+ private InternalCallContext context;
@Override
@BeforeMethod(groups = "slow")
public void beforeMethod() throws Exception {
super.beforeMethod();
- account = invoiceUtil.createAccount();
+ account = invoiceUtil.createAccount(callContext);
subscription = invoiceUtil.createSubscription();
+ context = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
}
@Test(groups = "slow")
@@ -92,25 +93,24 @@ public class TestInvoiceDispatcher extends InvoiceTestSuiteWithEmbeddedDB {
nonEntityDao, invoiceNotifier, locker, busService.getBus(),
clock);
- Invoice invoice = dispatcher.processAccount(accountId, target, true, internalCallContext);
+ Invoice invoice = dispatcher.processAccount(accountId, target, true, context);
Assert.assertNotNull(invoice);
- final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(callContext);
- List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(accountId, internalTenantContext);
+ List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(context);
Assert.assertEquals(invoices.size(), 0);
// Try it again to double check
- invoice = dispatcher.processAccount(accountId, target, true, internalCallContext);
+ invoice = dispatcher.processAccount(accountId, target, true, context);
Assert.assertNotNull(invoice);
- invoices = invoiceDao.getInvoicesByAccount(accountId, internalTenantContext);
+ invoices = invoiceDao.getInvoicesByAccount(context);
Assert.assertEquals(invoices.size(), 0);
// This time no dry run
- invoice = dispatcher.processAccount(accountId, target, false, internalCallContext);
+ invoice = dispatcher.processAccount(accountId, target, false, context);
Assert.assertNotNull(invoice);
- invoices = invoiceDao.getInvoicesByAccount(accountId, internalTenantContext);
+ invoices = invoiceDao.getInvoicesByAccount(context);
Assert.assertEquals(invoices.size(), 1);
}
@@ -146,7 +146,7 @@ public class TestInvoiceDispatcher extends InvoiceTestSuiteWithEmbeddedDB {
nonEntityDao, invoiceNotifier, locker, busService.getBus(),
clock);
- final Invoice invoice = dispatcher.processAccount(account.getId(), new DateTime("2012-07-30T00:00:00.000Z"), false, internalCallContext);
+ final Invoice invoice = dispatcher.processAccount(account.getId(), new DateTime("2012-07-30T00:00:00.000Z"), false, context);
Assert.assertNotNull(invoice);
final List<InvoiceItem> invoiceItems = invoice.getInvoiceItems();
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceHelper.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceHelper.java
index 76242b6..4de64a3 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceHelper.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceHelper.java
@@ -32,15 +32,16 @@ import org.testng.Assert;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.account.api.AccountData;
+import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.catalog.MockPlan;
import com.ning.billing.catalog.MockPlanPhase;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.clock.Clock;
import com.ning.billing.commons.locker.GlobalLocker;
-import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItem;
@@ -56,18 +57,22 @@ import com.ning.billing.invoice.dao.InvoicePaymentSqlDao;
import com.ning.billing.invoice.generator.InvoiceGenerator;
import com.ning.billing.invoice.model.InvoicingConfiguration;
import com.ning.billing.invoice.notification.NullInvoiceNotifier;
+import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
+import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.clock.Clock;
import com.ning.billing.util.dao.NonEntityDao;
import com.ning.billing.util.entity.EntityPersistenceException;
import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcapi.subscription.SubscriptionBaseInternalApi;
import com.ning.billing.util.svcapi.junction.BillingEvent;
import com.ning.billing.util.svcapi.junction.BillingEventSet;
import com.ning.billing.util.svcapi.junction.BillingInternalApi;
import com.ning.billing.util.svcapi.junction.BillingModeType;
+import com.ning.billing.util.svcapi.subscription.SubscriptionBaseInternalApi;
import com.ning.billing.util.svcsapi.bus.BusService;
import com.google.common.base.Function;
@@ -130,27 +135,30 @@ public class TestInvoiceHelper {
private final InvoiceGenerator generator;
private final BillingInternalApi billingApi;
private final AccountInternalApi accountApi;
+ private final AccountUserApi accountUserApi;
private final SubscriptionBaseInternalApi subscriptionApi;
- private final BusService busService;
- private final InvoiceDao invoiceDao;
+ private final BusService busService;
+ private final InvoiceDao invoiceDao;
private final GlobalLocker locker;
- private final Clock clock;
+ private final Clock clock;
private final InternalCallContext internalCallContext;
private final NonEntityDao nonEntityDao;
+ private final InternalCallContextFactory internalCallContextFactory;
// Low level SqlDao used by the tests to directly insert rows
private final InvoicePaymentSqlDao invoicePaymentSqlDao;
private final InvoiceItemSqlDao invoiceItemSqlDao;
-
@Inject
public TestInvoiceHelper(final InvoiceGenerator generator, final IDBI dbi,
- final BillingInternalApi billingApi, final AccountInternalApi accountApi, final SubscriptionBaseInternalApi subscriptionApi, final BusService busService,
- final InvoiceDao invoiceDao, final GlobalLocker locker, final Clock clock, final NonEntityDao nonEntityDao, final InternalCallContext internalCallContext) {
+ final BillingInternalApi billingApi, final AccountInternalApi accountApi, final AccountUserApi accountUserApi, final SubscriptionBaseInternalApi subscriptionApi, final BusService busService,
+ final InvoiceDao invoiceDao, final GlobalLocker locker, final Clock clock, final NonEntityDao nonEntityDao, final InternalCallContext internalCallContext,
+ final InternalCallContextFactory internalCallContextFactory) {
this.generator = generator;
this.billingApi = billingApi;
this.accountApi = accountApi;
+ this.accountUserApi = accountUserApi;
this.subscriptionApi = subscriptionApi;
this.busService = busService;
this.invoiceDao = invoiceDao;
@@ -158,11 +166,12 @@ public class TestInvoiceHelper {
this.clock = clock;
this.nonEntityDao = nonEntityDao;
this.internalCallContext = internalCallContext;
+ this.internalCallContextFactory = internalCallContextFactory;
this.invoiceItemSqlDao = dbi.onDemand(InvoiceItemSqlDao.class);
this.invoicePaymentSqlDao = dbi.onDemand(InvoicePaymentSqlDao.class);
}
- public UUID generateRegularInvoice(final Account account, final DateTime targetDate) throws Exception {
+ public UUID generateRegularInvoice(final Account account, final DateTime targetDate, final CallContext callContext) throws Exception {
final SubscriptionBase subscription = Mockito.mock(SubscriptionBase.class);
Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
Mockito.when(subscription.getBundleId()).thenReturn(new UUID(0L, 0L));
@@ -186,13 +195,15 @@ public class TestInvoiceHelper {
Invoice invoice = dispatcher.processAccount(account.getId(), targetDate, true, internalCallContext);
Assert.assertNotNull(invoice);
- List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(account.getId(), internalCallContext);
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
+
+ List<InvoiceModelDao> invoices = invoiceDao.getInvoicesByAccount(context);
Assert.assertEquals(invoices.size(), 0);
- invoice = dispatcher.processAccount(account.getId(), targetDate, false, internalCallContext);
+ invoice = dispatcher.processAccount(account.getId(), targetDate, false, context);
Assert.assertNotNull(invoice);
- invoices = invoiceDao.getInvoicesByAccount(account.getId(), internalCallContext);
+ invoices = invoiceDao.getInvoicesByAccount(context);
Assert.assertEquals(invoices.size(), 1);
return invoice.getId();
@@ -206,18 +217,20 @@ public class TestInvoiceHelper {
return subscription;
}
- public Account createAccount() throws AccountApiException {
- final UUID accountId = UUID.randomUUID();
- final Account account = Mockito.mock(Account.class);
- Mockito.when(accountApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalCallContext>any())).thenReturn(account);
- Mockito.when(account.getCurrency()).thenReturn(accountCurrency);
- Mockito.when(account.getId()).thenReturn(accountId);
- Mockito.when(account.isNotifiedForInvoices()).thenReturn(true);
- Mockito.when(account.getBillCycleDayLocal()).thenReturn(31);
- // The timezone is required to compute the date of the next invoice notification
- Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
-
- return account;
+ public Account createAccount(final CallContext callContext) throws AccountApiException {
+ final AccountData accountData = new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8))
+ .firstNameLength(6)
+ .email(UUID.randomUUID().toString().substring(1, 8))
+ .phone(UUID.randomUUID().toString().substring(1, 8))
+ .migrated(false)
+ .isNotifiedForInvoices(true)
+ .externalKey(UUID.randomUUID().toString().substring(1, 8))
+ .billingCycleDayLocal(31)
+ .currency(accountCurrency)
+ .paymentMethodId(UUID.randomUUID())
+ .timeZone(DateTimeZone.UTC)
+ .build();
+ return accountUserApi.createAccount(accountData, callContext);
}
public void createInvoiceItem(final InvoiceItem invoiceItem, final InternalCallContext internalCallContext) throws EntityPersistenceException {
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 4291aa4..34d99d8 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
@@ -24,13 +24,14 @@ import javax.inject.Inject;
import org.joda.time.DateTime;
import com.ning.billing.ObjectType;
+import com.ning.billing.clock.Clock;
import com.ning.billing.util.cache.Cachable.CacheType;
import com.ning.billing.util.cache.CacheControllerDispatcher;
-import com.ning.billing.clock.Clock;
import com.ning.billing.util.dao.NonEntityDao;
import com.google.common.base.Objects;
+// Internal contexts almost always expect accountRecordId and tenantRecordId to be populated
public class InternalCallContextFactory {
public static final long INTERNAL_TENANT_RECORD_ID = 0L;
@@ -46,11 +47,11 @@ public class InternalCallContextFactory {
this.cacheControllerDispatcher = cacheControllerDispatcher;
}
-
/**
* Create an internal tenant context from a tenant context
* <p/>
- * This is used for r/o operations - we don't need the account id in that case
+ * This is used for r/o operations - we don't need the account id in that case.
+ * You should almost never use that one, you always want to populate the accountRecordId
*
* @param context tenant context (tenantId can be null only if multi-tenancy is disabled)
* @return internal tenant context
@@ -75,20 +76,38 @@ public class InternalCallContextFactory {
public InternalTenantContext createInternalTenantContext(final UUID accountId, final TenantContext context) {
final Long tenantRecordId = getTenantRecordId(context);
- final Long accountRecordId = nonEntityDao.retrieveAccountRecordIdFromObject(accountId, ObjectType.ACCOUNT, cacheControllerDispatcher.getCacheController(CacheType.ACCOUNT_RECORD_ID));
+ final Long accountRecordId = getAccountRecordId(accountId, ObjectType.ACCOUNT);
return new InternalTenantContext(tenantRecordId, accountRecordId);
}
+ /**
+ * Crate an internal tenant context from a tenant context, and retrieving the account_record_id from another table
+ *
+ * @param objectId the id of the row in the table pointed by object type where to look for account_record_id
+ * @param objectType the object type pointed by this objectId
+ * @param context original tenant context
+ * @return internal tenant context from context, with a non null account_record_id (if found)
+ */
+ public InternalTenantContext createInternalTenantContext(final UUID objectId, final ObjectType objectType, final TenantContext context) {
+ // The context may come from a user API - for security, check we're not doing cross-tenants operations
+ //final Long tenantRecordIdFromObject = retrieveTenantRecordIdFromObject(objectId, objectType);
+ //final Long tenantRecordIdFromContext = getTenantRecordId(context);
+ //Preconditions.checkState(tenantRecordIdFromContext.equals(tenantRecordIdFromObject),
+ // "tenant of the pointed object (%s) and the context (%s) don't match!", tenantRecordIdFromObject, tenantRecordIdFromContext);
+ final Long tenantRecordId = getTenantRecordId(context);
+ final Long accountRecordId = getAccountRecordId(objectId, objectType);
+ return createInternalTenantContext(tenantRecordId, accountRecordId);
+ }
- /**
- * Crate an internal call context from a call context, and retrieving the account_record_id from another table
- *
- * @param objectId the id of the row in the table pointed by object type where to look for account_record_id
- * @param objectType the object type pointed by this objectId
- * @param context original call context
- * @return internal call context from context, with a non null account_record_id (if found)
- */
+ /**
+ * Create an internal call context from a call context, and retrieving the account_record_id from another table
+ *
+ * @param objectId the id of the row in the table pointed by object type where to look for account_record_id
+ * @param objectType the object type pointed by this objectId
+ * @param context original call context
+ * @return internal call context from context, with a non null account_record_id (if found)
+ */
public InternalCallContext createInternalCallContext(final UUID objectId, final ObjectType objectType, final CallContext context) {
// The context may come from a user API - for security, check we're not doing cross-tenants operations
//final Long tenantRecordIdFromObject = retrieveTenantRecordIdFromObject(objectId, objectType);
@@ -152,7 +171,7 @@ public class InternalCallContextFactory {
@Nullable final String reasonCode, @Nullable final String comment, final DateTime createdDate,
final DateTime updatedDate) {
final Long tenantRecordId = nonEntityDao.retrieveTenantRecordIdFromObject(objectId, objectType, cacheControllerDispatcher.getCacheController(CacheType.TENANT_RECORD_ID));
- final Long accountRecordId = nonEntityDao.retrieveAccountRecordIdFromObject(objectId, objectType, cacheControllerDispatcher.getCacheController(CacheType.ACCOUNT_RECORD_ID));
+ final Long accountRecordId = getAccountRecordId(objectId, objectType);
return createInternalCallContext(tenantRecordId, accountRecordId, userName, callOrigin, userType, userToken,
reasonCode, comment, createdDate, updatedDate);
}
@@ -202,8 +221,6 @@ public class InternalCallContextFactory {
return new InternalCallContext(tenantRecordId, null, context);
}
-
-
// Used when we need to re-hydrate the context with the account_record_id (when creating the account)
public InternalCallContext createInternalCallContext(final Long accountRecordId, final InternalCallContext context) {
return new InternalCallContext(context.getTenantRecordId(), accountRecordId, context.getUserToken(), context.getCreatedBy(),
@@ -218,6 +235,14 @@ public class InternalCallContextFactory {
context.getCreatedDate(), context.getUpdatedDate());
}
+ private Long getAccountRecordId(final UUID accountId) {
+ return getAccountRecordId(accountId, ObjectType.ACCOUNT);
+ }
+
+ private Long getAccountRecordId(final UUID objectId, final ObjectType objectType) {
+ return nonEntityDao.retrieveAccountRecordIdFromObject(objectId, objectType, cacheControllerDispatcher.getCacheController(CacheType.ACCOUNT_RECORD_ID));
+ }
+
private Long getTenantRecordId(final TenantContext context) {
// Default to single default tenant (e.g. single tenant mode)
// TODO Extract this convention (e.g. BusinessAnalyticsBase needs to know about it)
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
index 2e6095d..d713448 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
@@ -38,8 +38,6 @@ public interface InvoiceInternalApi {
public Collection<Invoice> getUnpaidInvoicesByAccountId(UUID accountId, LocalDate upToDate, InternalTenantContext context);
- public Collection<Invoice> getInvoicesByAccountId(UUID accountId, InternalTenantContext context);
-
public BigDecimal getAccountBalance(UUID accountId, InternalTenantContext context);
public void notifyOfPayment(UUID invoiceId, BigDecimal amountOutstanding, Currency currency, UUID paymentId, DateTime paymentDate, InternalCallContext context) throws InvoiceApiException;
diff --git a/util/src/test/java/com/ning/billing/DBTestingHelper.java b/util/src/test/java/com/ning/billing/DBTestingHelper.java
index ac551bd..3da70b3 100644
--- a/util/src/test/java/com/ning/billing/DBTestingHelper.java
+++ b/util/src/test/java/com/ning/billing/DBTestingHelper.java
@@ -154,6 +154,27 @@ public class DBTestingHelper {
" PRIMARY KEY(record_id)\n" +
");");
+ // HACK (PIERRE): required by invoice tests which perform payments lookups to find the account record id for the internal context
+ instance.executeScript("DROP TABLE IF EXISTS payments;\n" +
+ "CREATE TABLE payments (\n" +
+ " record_id int(11) unsigned NOT NULL AUTO_INCREMENT,\n" +
+ " id char(36) NOT NULL,\n" +
+ " account_id char(36) NOT NULL,\n" +
+ " invoice_id char(36) NOT NULL,\n" +
+ " payment_method_id char(36) NOT NULL,\n" +
+ " amount numeric(10,4),\n" +
+ " currency char(3),\n" +
+ " effective_date datetime,\n" +
+ " payment_status varchar(50),\n" +
+ " created_by varchar(50) NOT NULL,\n" +
+ " created_date datetime NOT NULL,\n" +
+ " updated_by varchar(50) NOT NULL,\n" +
+ " updated_date datetime NOT NULL,\n" +
+ " account_record_id int(11) unsigned default null,\n" +
+ " tenant_record_id int(11) unsigned default null,\n" +
+ " PRIMARY KEY (record_id)\n" +
+ ");");
+
for (final String pack : new String[]{"account", "analytics", "beatrix", "subscription", "util", "payment", "invoice", "entitlement", "usage", "meter", "tenant"}) {
for (final String ddlFile : new String[]{"ddl.sql", "ddl_test.sql"}) {
final String ddl;