Details
diff --git a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
index 8a4fd1f..2aef1ab 100644
--- a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
@@ -23,6 +23,8 @@ import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.customfield.CustomField;
+import com.ning.billing.util.tag.Tag;
public class MockAccountUserApi implements AccountUserApi {
private final CopyOnWriteArrayList<Account> accounts = new CopyOnWriteArrayList<Account>();
@@ -43,7 +45,7 @@ public class MockAccountUserApi implements AccountUserApi {
}
@Override
- public Account createAccount(AccountData data) {
+ public Account createAccount(AccountData data, List<CustomField> fields, List<Tag> tags) throws AccountApiException {
Account result = new DefaultAccount(data);
accounts.add(result);
return result;
@@ -75,11 +77,6 @@ public class MockAccountUserApi implements AccountUserApi {
}
@Override
- public void saveAccount(Account account) {
- throw new UnsupportedOperationException();
- }
-
- @Override
public UUID getIdFromKey(String externalKey) {
for (Account account : accounts) {
if (externalKey.equals(account.getExternalKey())) {
@@ -88,4 +85,9 @@ public class MockAccountUserApi implements AccountUserApi {
}
return null;
}
+
+ @Override
+ public void updateAccount(Account account) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
index 3a49474..a11818a 100644
--- a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
@@ -28,7 +28,7 @@ public class MockAccountDao implements AccountDao {
private final Map<String, Account> accounts = new ConcurrentHashMap<String, Account>();
@Override
- public void save(Account entity) {
+ public void create(Account entity) {
accounts.put(entity.getId().toString(), entity);
}
@@ -62,4 +62,9 @@ public class MockAccountDao implements AccountDao {
return account == null ? null : account.getId();
}
+ @Override
+ public void update(Account entity) {
+ accounts.put(entity.getId().toString(), entity);
+ }
+
}
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
index f196379..c9b9e27 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
@@ -23,7 +23,6 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.payment.api.InvoicePayment;
public interface InvoicePaymentApi {
public void paymentSuccessful(UUID invoiceId, BigDecimal amount, Currency currency, UUID paymentAttemptId, DateTime paymentAttemptDate);
@@ -34,5 +33,5 @@ public interface InvoicePaymentApi {
public Invoice getInvoice(UUID invoiceId);
- public InvoicePayment getInvoicePayment(UUID invoiceId, UUID paymentAttemptId);
+ public Invoice getInvoiceForPaymentAttemptId(UUID paymentAttemptId);
}
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 a36cfea..c8879e8 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
@@ -28,7 +28,6 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.invoice.dao.InvoiceDao;
-import com.ning.billing.payment.api.InvoicePayment;
public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
private final InvoiceDao dao;
@@ -59,8 +58,9 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
}
@Override
- public InvoicePayment getInvoicePayment(UUID invoiceId, UUID paymentAttemptId) {
- throw new UnsupportedOperationException();
+ public Invoice getInvoiceForPaymentAttemptId(UUID paymentAttemptId) {
+ String invoiceIdStr = dao.getInvoiceIdByPaymentAttemptId(paymentAttemptId);
+ return dao.getById(invoiceIdStr);
}
}
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 20f33c7..31b525d 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
@@ -16,24 +16,23 @@
package com.ning.billing.invoice.dao;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
-import com.google.inject.Inject;
-import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoiceCreationNotification;
-import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.api.user.DefaultInvoiceCreationNotification;
-import com.ning.billing.util.eventbus.EventBus;
import org.skife.jdbi.v2.IDBI;
import org.skife.jdbi.v2.Transaction;
import org.skife.jdbi.v2.TransactionStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import com.google.inject.Inject;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceCreationNotification;
+import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.api.user.DefaultInvoiceCreationNotification;
+import com.ning.billing.util.eventbus.EventBus;
public class DefaultInvoiceDao implements InvoiceDao {
private final InvoiceSqlDao invoiceDao;
@@ -151,4 +150,9 @@ public class DefaultInvoiceDao implements InvoiceDao {
public void test() {
invoiceDao.test();
}
+
+ @Override
+ public String getInvoiceIdByPaymentAttemptId(UUID paymentAttemptId) {
+ return invoiceDao.getInvoiceIdByPaymentAttemptId(paymentAttemptId.toString());
+ }
}
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 e9306b2..e80a17e 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
@@ -20,6 +20,7 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.UUID;
+
import com.ning.billing.invoice.api.Invoice;
public interface InvoiceDao {
@@ -46,5 +47,8 @@ public interface InvoiceDao {
final String paymentId,
final Date paymentAttemptDate);
+ String getInvoiceIdByPaymentAttemptId(UUID paymentAttemptId);
+
void test();
+
}
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 9ede145..f9553c9 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,12 +16,20 @@
package com.ning.billing.invoice.dao;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.model.DefaultInvoice;
-import com.ning.billing.util.UuidMapper;
-import com.ning.billing.util.entity.EntityDao;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
import org.joda.time.DateTime;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -38,15 +46,12 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
-import java.lang.annotation.*;
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.util.UuidMapper;
+import com.ning.billing.util.entity.EntityDao;
@ExternalizedSqlViaStringTemplate3()
@RegisterMapper({UuidMapper.class, InvoiceSqlDao.InvoiceMapper.class})
@@ -66,6 +71,9 @@ public interface InvoiceSqlDao extends EntityDao<Invoice>, Transactional<Invoice
List<Invoice> getInvoicesBySubscription(@Bind("subscriptionId") final String subscriptionId);
@SqlQuery
+ String getInvoiceIdByPaymentAttemptId(@Bind("paymentAttemptId") final String paymentAttemptId);
+
+ @SqlQuery
List<UUID> getInvoicesForPayment(@Bind("targetDate") final Date targetDate,
@Bind("numberOfDays") final int numberOfDays);
@@ -86,8 +94,10 @@ public interface InvoiceSqlDao extends EntityDao<Invoice>, Transactional<Invoice
@Target({ElementType.PARAMETER})
public @interface InvoiceBinder {
public static class InvoiceBinderFactory implements BinderFactory {
+ @Override
public Binder build(Annotation annotation) {
return new Binder<InvoiceBinder, Invoice>() {
+ @Override
public void bind(SQLStatement q, InvoiceBinder bind, Invoice invoice) {
q.bind("id", invoice.getId().toString());
q.bind("accountId", invoice.getAccountId().toString());
@@ -122,5 +132,6 @@ public interface InvoiceSqlDao extends EntityDao<Invoice>, Transactional<Invoice
return new DefaultInvoice(id, accountId, invoiceDate, targetDate, currency, lastPaymentAttempt, amountPaid, new ArrayList<InvoiceItem>());
}
}
+
}
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 8766e18..12a5412 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
@@ -68,6 +68,13 @@ notifySuccessfulPayment() ::= <<
VALUES(:invoiceId, :paymentId, :paymentDate, :amount, :currency);
>>
+getInvoiceIdByPaymentAttemptId() ::= <<
+ SELECT i.id
+ FROM invoices i, invoice_payments ip
+ WHERE ip.invoice_id = i.id
+ AND ip.payment_attempt_id = :paymentAttemptId
+>>
+
notifyFailedPayment() ::= <<
INSERT INTO invoice_payments(invoice_id, payment_id, payment_date)
VALUES(:invoiceId, :paymentId, :paymentAttemptDate);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index 49ab67c..8a536a8 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -82,13 +82,18 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
}
@Override
- public InvoicePayment getInvoicePayment(UUID invoiceId, UUID paymentAttemptId) {
+ public Invoice getInvoiceForPaymentAttemptId(UUID paymentAttemptId) {
for (InvoicePayment existingInvoicePayment : invoicePayments) {
- if (existingInvoicePayment.getInvoiceId().equals(invoiceId) && existingInvoicePayment.getPaymentAttemptId().equals(paymentAttemptId)) {
- return existingInvoicePayment;
+ if (existingInvoicePayment.getPaymentAttemptId().equals(paymentAttemptId)) {
+ return getInvoice(existingInvoicePayment.getInvoiceId());
}
}
return null;
}
+ public InvoicePayment getInvoicePayment(UUID paymentAttemptId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
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 8570608..bf8b8c8 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
@@ -33,30 +33,15 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.payment.api.InvoicePayment;
public class MockInvoiceDao implements InvoiceDao {
- private static final class InvoicePaymentInfo {
- public final String invoiceId;
- public final String paymentId;
- public final DateTime paymentDate;
- public final BigDecimal amount;
- public final Currency currency;
-
- public InvoicePaymentInfo(String invoiceId, String paymentId, DateTime paymentDate, BigDecimal amount, Currency currency) {
- this.invoiceId = invoiceId;
- this.paymentId = paymentId;
- this.paymentDate = paymentDate;
- this.amount = amount;
- this.currency = currency;
- }
- }
-
private final Object monitor = new Object();
private final Map<String, Invoice> invoices = new LinkedHashMap<String, Invoice>();
- private final List<InvoicePaymentInfo> paymentInfos = new ArrayList<MockInvoiceDao.InvoicePaymentInfo>();
+ private final Map<UUID, InvoicePayment> invoicePayments = new LinkedHashMap<UUID, InvoicePayment>();
@Override
- public void save(Invoice invoice) {
+ public void create(Invoice invoice) {
synchronized (monitor) {
invoices.put(invoice.getId().toString(), invoice);
}
@@ -70,13 +55,13 @@ public class MockInvoiceDao implements InvoiceDao {
DateTime lastPaymentDate = null;
BigDecimal amountPaid = new BigDecimal("0");
- for (InvoicePaymentInfo info : paymentInfos) {
- if (info.invoiceId.equals(invoice.getId().toString())) {
- if (lastPaymentDate == null || lastPaymentDate.isBefore(info.paymentDate)) {
- lastPaymentDate = info.paymentDate;
+ for (InvoicePayment invoicePayment : invoicePayments.values()) {
+ if (invoicePayment.getInvoiceId().equals(invoice.getId().toString())) {
+ if (lastPaymentDate == null || lastPaymentDate.isBefore(invoicePayment.getPaymentAttemptDate())) {
+ lastPaymentDate = invoicePayment.getPaymentAttemptDate();
}
- if (info.amount != null) {
- amountPaid.add(info.amount);
+ if (invoicePayment.getAmount() != null) {
+ amountPaid.add(invoicePayment.getAmount());
}
}
}
@@ -148,14 +133,13 @@ public class MockInvoiceDao implements InvoiceDao {
Set<UUID> result = new LinkedHashSet<UUID>();
synchronized (monitor) {
- for (InvoicePaymentInfo info : paymentInfos) {
- Invoice invoice = invoices.get(info.invoiceId);
+ for (InvoicePayment invoicePayment : invoicePayments.values()) {
+ Invoice invoice = invoices.get(invoicePayment.getInvoiceId());
if ((invoice != null) &&
- (((info.paymentDate == null) || !info.paymentDate.plusDays(numberOfDays).isAfter(targetDate.getTime())) &&
+ (((invoicePayment.getPaymentAttemptDate() == null) || !invoicePayment.getPaymentAttemptDate().plusDays(numberOfDays).isAfter(targetDate.getTime())) &&
(invoice.getTotalAmount() != null) && invoice.getTotalAmount().doubleValue() >= 0) &&
- ((info.amount == null) || info.amount.doubleValue() >= invoice.getTotalAmount().doubleValue())) {
-
- result.add(invoice.getId());
+ ((invoicePayment.getAmount() == null) || invoicePayment.getAmount().doubleValue() >= invoice.getTotalAmount().doubleValue())) {
+ result.add(invoice.getId());
}
}
}
@@ -164,24 +148,37 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public void notifySuccessfulPayment(String invoiceId,
- BigDecimal paymentAmount,
- String currency, String paymentId,
- Date paymentDate) {
+ public void notifySuccessfulPayment(String invoiceId, BigDecimal paymentAmount, String currency, String paymentAttemptId, Date paymentAttemptDate) {
synchronized (monitor) {
- paymentInfos.add(new InvoicePaymentInfo(invoiceId, paymentId, new DateTime(paymentDate), paymentAmount, Currency.valueOf(currency)));
+ invoicePayments.put(UUID.fromString(paymentAttemptId),
+ new InvoicePayment(UUID.fromString(invoiceId), paymentAmount, Currency.valueOf(currency), UUID.fromString(paymentAttemptId), new DateTime(paymentAttemptDate)));
}
}
@Override
- public void notifyFailedPayment(String invoiceId, String paymentId,
+ public void notifyFailedPayment(String invoiceId,
+ String paymentAttemptId,
Date paymentAttemptDate) {
synchronized (monitor) {
- paymentInfos.add(new InvoicePaymentInfo(invoiceId, paymentId, new DateTime(paymentAttemptDate), null, null));
+ invoicePayments.put(UUID.fromString(paymentAttemptId),
+ new InvoicePayment(UUID.fromString(invoiceId), null, null, UUID.fromString(paymentAttemptId), new DateTime(paymentAttemptDate)));
+
}
}
@Override
public void test() {
}
+
+ @Override
+ public String getInvoiceIdByPaymentAttemptId(UUID paymentAttemptId) {
+ synchronized(monitor) {
+ for (InvoicePayment invoicePayment : invoicePayments.values()) {
+ if (paymentAttemptId.toString().equals(invoicePayment.getPaymentAttemptId())) {
+ return invoicePayment.getInvoiceId().toString();
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java b/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java
index 0867f01..af319c5 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java
@@ -43,7 +43,7 @@ public class TestNotifyInvoicePaymentApi extends TestPaymentProvider {
paymentAttempt.getPaymentAttemptId(),
paymentAttempt.getPaymentAttemptDate());
- InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(invoice.getId(), paymentAttempt.getPaymentAttemptId());
+ InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(paymentAttempt.getPaymentAttemptId());
assertNotNull(invoicePayment);
}
@@ -58,7 +58,7 @@ public class TestNotifyInvoicePaymentApi extends TestPaymentProvider {
paymentAttempt.getPaymentAttemptId(),
paymentAttempt.getPaymentAttemptDate());
- InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(invoice.getId(), paymentAttempt.getPaymentAttemptId());
+ InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(paymentAttempt.getPaymentAttemptId());
assertNotNull(invoicePayment);
}
diff --git a/payment/src/test/java/com/ning/billing/payment/TestPaymentInvoiceIntegration.java b/payment/src/test/java/com/ning/billing/payment/TestPaymentInvoiceIntegration.java
index 8ccfefd..d9bc54e 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestPaymentInvoiceIntegration.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestPaymentInvoiceIntegration.java
@@ -88,11 +88,12 @@ public class TestPaymentInvoiceIntegration {
@BeforeClass(alwaysRun = true)
public void startMysql() throws IOException {
final String accountddl = IOUtils.toString(MysqlTestingHelper.class.getResourceAsStream("/com/ning/billing/account/ddl.sql"));
+ final String utilddl = IOUtils.toString(MysqlTestingHelper.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
final String invoiceddl = IOUtils.toString(MysqlTestingHelper.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
helper = new MysqlTestingHelper();
helper.startMysql();
- helper.initDb(accountddl + "\n" + invoiceddl);
+ helper.initDb(accountddl + "\n" + invoiceddl + "\n" + utilddl);
dbi = helper.getDBI();
}
@@ -138,7 +139,7 @@ public class TestPaymentInvoiceIntegration {
.currency(Currency.USD)
.billingCycleDay(1)
.build();
- accountDao.save(account);
+ accountDao.create(account);
return account;
}
@@ -159,7 +160,7 @@ public class TestPaymentInvoiceIntegration {
item.getRate(),
item.getCurrency()));
}
- invoiceDao.save(invoice);
+ invoiceDao.create(invoice);
return invoice;
}
@@ -189,6 +190,6 @@ public class TestPaymentInvoiceIntegration {
PaymentAttempt paymentAttempt = paymentApi.getPaymentAttemptForPaymentId(payments.get(0).getId());
Assert.assertNotNull(paymentAttempt);
- invoicePaymentApi.getInvoicePayment(invoice.getId(), paymentAttempt.getPaymentAttemptId());
+ Invoice invoiceForPayment = invoicePaymentApi.getInvoiceForPaymentAttemptId(paymentAttempt.getPaymentAttemptId());
}
}