Details
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
index 866f64d..b8541b2 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
@@ -13,34 +13,35 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
+
package com.ning.billing.jaxrs.json;
-import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.account.api.Account;
import com.ning.billing.entitlement.api.timeline.BundleTimeline;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.api.InvoiceItemType;
+import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.payment.api.Payment;
-import com.ning.billing.payment.api.PaymentStatus;
+import com.ning.billing.payment.api.Refund;
-public class AccountTimelineJson {
-
- private final List<PaymentJsonWithBundleKeys> payments;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.collect.Multimap;
- private final List<InvoiceJsonWithBundleKeys> invoices;
+public class AccountTimelineJson {
private final AccountJsonSimple account;
-
-
private final List<BundleJsonWithSubscriptions> bundles;
+ private final List<InvoiceJsonWithBundleKeys> invoices;
+ private final List<PaymentJsonWithBundleKeys> payments;
@JsonCreator
public AccountTimelineJson(@JsonProperty("account") final AccountJsonSimple account,
@@ -84,59 +85,111 @@ public class AccountTimelineJson {
return tmp.toString();
}
- public AccountTimelineJson(final Account account, final List<Invoice> invoices, final List<Payment> payments, final List<BundleTimeline> bundles) {
+ public AccountTimelineJson(final Account account, final List<Invoice> invoices, final List<Payment> payments, final List<BundleTimeline> bundles,
+ final Multimap<UUID, Refund> refundsByPayment, final Multimap<UUID, InvoicePayment> chargebacksByPayment) {
this.account = new AccountJsonSimple(account.getId().toString(), account.getExternalKey());
this.bundles = new LinkedList<BundleJsonWithSubscriptions>();
for (final BundleTimeline cur : bundles) {
this.bundles.add(new BundleJsonWithSubscriptions(account.getId(), cur));
}
+
this.invoices = new LinkedList<InvoiceJsonWithBundleKeys>();
- for (final Invoice cur : invoices) {
- this.invoices.add(new InvoiceJsonWithBundleKeys(cur.getPaidAmount(),
- cur.getCBAAmount(),
- cur.getCreditAdjAmount(),
- cur.getRefundAdjAmount(),
- cur.getId().toString(),
- cur.getInvoiceDate(),
- cur.getTargetDate(),
- Integer.toString(cur.getInvoiceNumber()),
- cur.getBalance(),
- cur.getAccountId().toString(),
- getBundleExternalKey(cur, bundles)));
+ // Extract the credits from the invoices first
+ final List<CreditJson> credits = new ArrayList<CreditJson>();
+ for (final Invoice invoice : invoices) {
+ for (final InvoiceItem invoiceItem : invoice.getInvoiceItems()) {
+ if (InvoiceItemType.CREDIT_ADJ.equals(invoiceItem.getInvoiceItemType())) {
+ credits.add(new CreditJson(invoiceItem, account.getTimeZone()));
+ }
+ }
+ }
+ // Create now the invoice json objects
+ for (final Invoice invoice : invoices) {
+ this.invoices.add(new InvoiceJsonWithBundleKeys(invoice.getPaidAmount(),
+ invoice.getCBAAmount(),
+ invoice.getCreditAdjAmount(),
+ invoice.getRefundAdjAmount(),
+ invoice.getId().toString(),
+ invoice.getInvoiceDate(),
+ invoice.getTargetDate(),
+ Integer.toString(invoice.getInvoiceNumber()),
+ invoice.getBalance(),
+ invoice.getAccountId().toString(),
+ getBundleExternalKey(invoice, bundles),
+ credits));
}
this.payments = new LinkedList<PaymentJsonWithBundleKeys>();
- for (final Payment cur : payments) {
-
- final String status = cur.getPaymentStatus().toString();
- this.payments.add(new PaymentJsonWithBundleKeys(cur.getAmount(), cur.getPaidAmount(), account.getId().toString(),
- cur.getInvoiceId().toString(), cur.getId().toString(),
- cur.getEffectiveDate(), cur.getEffectiveDate(),
- cur.getAttempts().size(), cur.getCurrency().toString(), status,
- getBundleExternalKey(cur.getInvoiceId(), invoices, bundles)));
+ for (final Payment payment : payments) {
+ final List<RefundJson> refunds = new ArrayList<RefundJson>();
+ for (final Refund refund : refundsByPayment.get(payment.getId())) {
+ refunds.add(new RefundJson(refund));
+ }
+
+ final List<ChargebackJson> chargebacks = new ArrayList<ChargebackJson>();
+ for (final InvoicePayment chargeback : chargebacksByPayment.get(payment.getId())) {
+ chargebacks.add(new ChargebackJson(chargeback));
+ }
+
+ final String status = payment.getPaymentStatus().toString();
+ this.payments.add(new PaymentJsonWithBundleKeys(payment.getAmount(), payment.getPaidAmount(), account.getId().toString(),
+ payment.getInvoiceId().toString(), payment.getId().toString(),
+ payment.getEffectiveDate(), payment.getEffectiveDate(),
+ payment.getAttempts().size(), payment.getCurrency().toString(), status,
+ getBundleExternalKey(payment.getInvoiceId(), invoices, bundles),
+ refunds, chargebacks));
}
}
- public AccountTimelineJson() {
- this.account = null;
- this.bundles = null;
- this.invoices = null;
- this.payments = null;
+ public AccountJsonSimple getAccount() {
+ return account;
}
- public List<PaymentJsonWithBundleKeys> getPayments() {
- return payments;
+ public List<BundleJsonWithSubscriptions> getBundles() {
+ return bundles;
}
public List<InvoiceJsonWithBundleKeys> getInvoices() {
return invoices;
}
- public AccountJsonSimple getAccount() {
- return account;
+ public List<PaymentJsonWithBundleKeys> getPayments() {
+ return payments;
}
- public List<BundleJsonWithSubscriptions> getBundles() {
- return bundles;
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("AccountTimelineJson");
+ sb.append("{account=").append(account);
+ sb.append(", bundles=").append(bundles);
+ sb.append(", invoices=").append(invoices);
+ sb.append(", payments=").append(payments);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final AccountTimelineJson that = (AccountTimelineJson) o;
+
+ if (account != null ? !account.equals(that.account) : that.account != null) return false;
+ if (bundles != null ? !bundles.equals(that.bundles) : that.bundles != null) return false;
+ if (invoices != null ? !invoices.equals(that.invoices) : that.invoices != null) return false;
+ if (payments != null ? !payments.equals(that.payments) : that.payments != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = account != null ? account.hashCode() : 0;
+ result = 31 * result + (bundles != null ? bundles.hashCode() : 0);
+ result = 31 * result + (invoices != null ? invoices.hashCode() : 0);
+ result = 31 * result + (payments != null ? payments.hashCode() : 0);
+ return result;
}
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java
index 4c27655..5279507 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java
@@ -1,16 +1,5 @@
-package com.ning.billing.jaxrs.json;
-
-import java.math.BigDecimal;
-
-import org.joda.time.LocalDate;
-
-import com.ning.billing.invoice.api.Invoice;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
/*
- * Copyright 2010-2011 Ning, Inc.
+ * Copyright 2010-2012 Ning, Inc.
*
* Ning licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -25,13 +14,28 @@ import com.fasterxml.jackson.annotation.JsonProperty;
* under the License.
*/
+package com.ning.billing.jaxrs.json;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.joda.time.LocalDate;
+
+import com.ning.billing.invoice.api.Invoice;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.collect.ImmutableList;
+
public class InvoiceJsonWithBundleKeys extends InvoiceJsonSimple {
private final String bundleKeys;
+ private final List<CreditJson> credits;
public InvoiceJsonWithBundleKeys() {
super();
this.bundleKeys = null;
+ this.credits = ImmutableList.<CreditJson>of();
}
@JsonCreator
@@ -45,37 +49,47 @@ public class InvoiceJsonWithBundleKeys extends InvoiceJsonSimple {
@JsonProperty("invoiceNumber") final String invoiceNumber,
@JsonProperty("balance") final BigDecimal balance,
@JsonProperty("accountId") final String accountId,
- @JsonProperty("externalBundleKeys") final String bundleKeys) {
+ @JsonProperty("externalBundleKeys") final String bundleKeys,
+ @JsonProperty("credits") final List<CreditJson> credits) {
super(amount, cba, creditAdj, refundAdj, invoiceId, invoiceDate, targetDate, invoiceNumber, balance, accountId);
this.bundleKeys = bundleKeys;
+ this.credits = credits;
}
- public InvoiceJsonWithBundleKeys(final Invoice input, final String bundleKeys) {
+ public InvoiceJsonWithBundleKeys(final Invoice input, final String bundleKeys, final List<CreditJson> credits) {
super(input);
this.bundleKeys = bundleKeys;
+ this.credits = credits;
}
public String getBundleKeys() {
return bundleKeys;
}
+ public List<CreditJson> getCredits() {
+ return credits;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("InvoiceJsonWithBundleKeys");
+ sb.append("{bundleKeys='").append(bundleKeys).append('\'');
+ sb.append(", credits=").append(credits);
+ sb.append('}');
+ return sb.toString();
+ }
+
@Override
public boolean equals(final Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- if (!super.equals(o)) {
- return false;
- }
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
final InvoiceJsonWithBundleKeys that = (InvoiceJsonWithBundleKeys) o;
- if (bundleKeys != null ? !bundleKeys.equals(that.bundleKeys) : that.bundleKeys != null) {
- return false;
- }
+ if (bundleKeys != null ? !bundleKeys.equals(that.bundleKeys) : that.bundleKeys != null) return false;
+ if (credits != null ? !credits.equals(that.credits) : that.credits != null) return false;
return true;
}
@@ -84,6 +98,7 @@ public class InvoiceJsonWithBundleKeys extends InvoiceJsonSimple {
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (bundleKeys != null ? bundleKeys.hashCode() : 0);
+ result = 31 * result + (credits != null ? credits.hashCode() : 0);
return result;
}
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java
index 8032fa5..255cef2 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java
@@ -17,18 +17,25 @@
package com.ning.billing.jaxrs.json;
import java.math.BigDecimal;
+import java.util.List;
import org.joda.time.DateTime;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.collect.ImmutableList;
public class PaymentJsonWithBundleKeys extends PaymentJsonSimple {
+
private final String bundleKeys;
+ private final List<RefundJson> refunds;
+ private final List<ChargebackJson> chargebacks;
public PaymentJsonWithBundleKeys() {
super();
this.bundleKeys = null;
+ this.refunds = ImmutableList.<RefundJson>of();
+ this.chargebacks = ImmutableList.<ChargebackJson>of();
}
@JsonCreator
@@ -42,12 +49,59 @@ public class PaymentJsonWithBundleKeys extends PaymentJsonSimple {
@JsonProperty("retryCount") final Integer retryCount,
@JsonProperty("currency") final String currency,
@JsonProperty("status") final String status,
- @JsonProperty("externalBundleKeys") final String bundleKeys) {
+ @JsonProperty("externalBundleKeys") final String bundleKeys,
+ @JsonProperty("refunds") final List<RefundJson> refunds,
+ @JsonProperty("chargebacks") final List<ChargebackJson> chargebacks) {
super(amount, paidAmount, accountId, invoiceId, paymentId, requestedDate, effectiveDate, retryCount, currency, status);
this.bundleKeys = bundleKeys;
+ this.refunds = refunds;
+ this.chargebacks = chargebacks;
}
public String getBundleKeys() {
return bundleKeys;
}
+
+ public List<RefundJson> getRefunds() {
+ return refunds;
+ }
+
+ public List<ChargebackJson> getChargebacks() {
+ return chargebacks;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("PaymentJsonWithBundleKeys");
+ sb.append("{bundleKeys='").append(bundleKeys).append('\'');
+ sb.append(", refunds=").append(refunds);
+ sb.append(", chargebacks=").append(chargebacks);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+
+ final PaymentJsonWithBundleKeys that = (PaymentJsonWithBundleKeys) o;
+
+ if (bundleKeys != null ? !bundleKeys.equals(that.bundleKeys) : that.bundleKeys != null) return false;
+ if (chargebacks != null ? !chargebacks.equals(that.chargebacks) : that.chargebacks != null) return false;
+ if (refunds != null ? !refunds.equals(that.refunds) : that.refunds != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (bundleKeys != null ? bundleKeys.hashCode() : 0);
+ result = 31 * result + (refunds != null ? refunds.hashCode() : 0);
+ result = 31 * result + (chargebacks != null ? chargebacks.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index 0dec7e0..fd80946 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -16,12 +16,11 @@
package com.ning.billing.jaxrs.resources;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import javax.ws.rs.Consumes;
@@ -42,10 +41,6 @@ import javax.ws.rs.core.UriInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Function;
-import com.google.common.collect.Collections2;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
@@ -59,6 +54,8 @@ import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.jaxrs.json.AccountEmailJson;
import com.ning.billing.jaxrs.json.AccountJson;
@@ -81,9 +78,20 @@ import com.ning.billing.util.api.CustomFieldUserApi;
import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.dao.ObjectType;
+import com.google.common.base.Function;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.LinkedListMultimap;
+import com.google.common.collect.Multimap;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+
@Singleton
@Path(JaxrsResource.ACCOUNTS_PATH)
public class AccountResource extends JaxRsResourceBase {
+
private static final Logger log = LoggerFactory.getLogger(AccountResource.class);
private static final String ID_PARAM_NAME = "accountId";
private static final String CUSTOM_FIELD_URI = JaxrsResource.CUSTOM_FIELDS;
@@ -93,6 +101,7 @@ public class AccountResource extends JaxRsResourceBase {
private final EntitlementUserApi entitlementApi;
private final EntitlementTimelineApi timelineApi;
private final InvoiceUserApi invoiceApi;
+ private final InvoicePaymentApi invoicePaymentApi;
private final PaymentApi paymentApi;
private final Context context;
private final JaxrsUriBuilder uriBuilder;
@@ -102,6 +111,7 @@ public class AccountResource extends JaxRsResourceBase {
final AccountUserApi accountApi,
final EntitlementUserApi entitlementApi,
final InvoiceUserApi invoiceApi,
+ final InvoicePaymentApi invoicePaymentApi,
final PaymentApi paymentApi,
final EntitlementTimelineApi timelineApi,
final CustomFieldUserApi customFieldUserApi,
@@ -113,6 +123,7 @@ public class AccountResource extends JaxRsResourceBase {
this.accountApi = accountApi;
this.entitlementApi = entitlementApi;
this.invoiceApi = invoiceApi;
+ this.invoicePaymentApi = invoicePaymentApi;
this.paymentApi = paymentApi;
this.timelineApi = timelineApi;
this.context = context;
@@ -251,20 +262,41 @@ public class AccountResource extends JaxRsResourceBase {
@GET
@Path("/{accountId:" + UUID_PATTERN + "}/" + TIMELINE)
@Produces(APPLICATION_JSON)
- public Response getAccountTimeline(@PathParam("accountId") final String accountId) {
+ public Response getAccountTimeline(@PathParam("accountId") final String accountIdString) {
try {
+ final UUID accountId = UUID.fromString(accountIdString);
+ final Account account = accountApi.getAccountById(accountId);
- final Account account = accountApi.getAccountById(UUID.fromString(accountId));
-
+ // Get the invoices
final List<Invoice> invoices = invoiceApi.getInvoicesByAccount(account.getId());
- final List<Payment> payments = paymentApi.getAccountPayments(UUID.fromString(accountId));
+ // Get the payments
+ final List<Payment> payments = paymentApi.getAccountPayments(accountId);
+
+ // Get the refunds
+ final List<Refund> refunds = paymentApi.getAccountRefunds(account);
+ final Multimap<UUID, Refund> refundsByPayment = ArrayListMultimap.<UUID, Refund>create();
+ for (final Refund refund : refunds) {
+ refundsByPayment.put(refund.getPaymentId(), refund);
+ }
+
+ // Get the chargebacks
+ final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(accountId);
+ final Multimap<UUID, InvoicePayment> chargebacksByPayment = ArrayListMultimap.<UUID, InvoicePayment>create();
+ for (final InvoicePayment chargeback : chargebacks) {
+ chargebacksByPayment.put(chargeback.getPaymentId(), chargeback);
+ }
+
+ // Get the bundles
final List<SubscriptionBundle> bundles = entitlementApi.getBundlesForAccount(account.getId());
final List<BundleTimeline> bundlesTimeline = new LinkedList<BundleTimeline>();
for (final SubscriptionBundle cur : bundles) {
bundlesTimeline.add(timelineApi.getBundleRepair(cur.getId()));
}
- final AccountTimelineJson json = new AccountTimelineJson(account, invoices, payments, bundlesTimeline);
+
+ final AccountTimelineJson json = new AccountTimelineJson(account, invoices, payments, bundlesTimeline,
+ refundsByPayment, chargebacksByPayment);
+
return Response.status(Status.OK).entity(json).build();
} catch (AccountApiException e) {
if (e.getCode() == ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_ID.getCode()) {
@@ -439,7 +471,6 @@ public class AccountResource extends JaxRsResourceBase {
}
}
-
/*
* ************************** REFUNDS ********************************
*/
@@ -450,7 +481,7 @@ public class AccountResource extends JaxRsResourceBase {
try {
final Account account = accountApi.getAccountById(UUID.fromString(accountId));
- List<Refund> refunds = paymentApi.getAccountRefunds(account);
+ List<Refund> refunds = paymentApi.getAccountRefunds(account);
List<RefundJson> result = new ArrayList<RefundJson>(Collections2.transform(refunds, new Function<Refund, RefundJson>() {
@Override
public RefundJson apply(Refund input) {
@@ -469,8 +500,6 @@ public class AccountResource extends JaxRsResourceBase {
}
}
-
-
/*
* ************************* CUSTOM FIELDS *****************************
*/
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
index 642313a..5c2ca0b 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
@@ -17,8 +17,10 @@
package com.ning.billing.jaxrs.json;
import java.math.BigDecimal;
+import java.util.List;
import java.util.UUID;
+import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.mockito.Mockito;
import org.testng.Assert;
@@ -32,6 +34,7 @@ import com.ning.billing.util.clock.DefaultClock;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuite {
@@ -57,8 +60,11 @@ public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuite {
final BigDecimal balance = BigDecimal.ZERO;
final String accountId = UUID.randomUUID().toString();
final String bundleKeys = UUID.randomUUID().toString();
+ CreditJson creditJson = createCreditJson();
+ final List<CreditJson> credits = ImmutableList.<CreditJson>of(creditJson);
final InvoiceJsonWithBundleKeys invoiceJsonSimple = new InvoiceJsonWithBundleKeys(amount, cba, creditAdj, refundAdj, invoiceId, invoiceDate,
- targetDate, invoiceNumber, balance, accountId, bundleKeys);
+ targetDate, invoiceNumber, balance, accountId, bundleKeys,
+ credits);
Assert.assertEquals(invoiceJsonSimple.getAmount(), amount);
Assert.assertEquals(invoiceJsonSimple.getCBA(), cba);
Assert.assertEquals(invoiceJsonSimple.getCreditAdj(), creditAdj);
@@ -70,6 +76,7 @@ public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuite {
Assert.assertEquals(invoiceJsonSimple.getBalance(), balance);
Assert.assertEquals(invoiceJsonSimple.getAccountId(), accountId);
Assert.assertEquals(invoiceJsonSimple.getBundleKeys(), bundleKeys);
+ Assert.assertEquals(invoiceJsonSimple.getCredits(), credits);
final String asJson = mapper.writeValueAsString(invoiceJsonSimple);
Assert.assertEquals(asJson, "{\"amount\":" + invoiceJsonSimple.getAmount().toString() + "," +
@@ -82,6 +89,14 @@ public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuite {
"\"invoiceNumber\":\"" + invoiceJsonSimple.getInvoiceNumber() + "\"," +
"\"balance\":" + invoiceJsonSimple.getBalance().toString() + "," +
"\"accountId\":\"" + invoiceJsonSimple.getAccountId() + "\"," +
+ "\"credits\":[" +
+ "{\"creditAmount\":" + creditJson.getCreditAmount() + "," +
+ "\"invoiceId\":\"" + creditJson.getInvoiceId().toString() + "\"," +
+ "\"invoiceNumber\":\"" + creditJson.getInvoiceNumber() + "\"," +
+ "\"requestedDate\":\"" + creditJson.getRequestedDate().toDateTimeISO().toString() + "\"," +
+ "\"effectiveDate\":\"" + creditJson.getEffectiveDate().toDateTimeISO().toString() + "\"," +
+ "\"reason\":\"" + creditJson.getReason() + "\"," +
+ "\"accountId\":\"" + creditJson.getAccountId().toString() + "\"}]," +
"\"bundleKeys\":\"" + invoiceJsonSimple.getBundleKeys() + "\"}");
final InvoiceJsonWithBundleKeys fromJson = mapper.readValue(asJson, InvoiceJsonWithBundleKeys.class);
@@ -103,8 +118,9 @@ public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuite {
Mockito.when(invoice.getAccountId()).thenReturn(UUID.randomUUID());
final String bundleKeys = UUID.randomUUID().toString();
+ final List<CreditJson> credits = ImmutableList.<CreditJson>of(createCreditJson());
- final InvoiceJsonWithBundleKeys invoiceJsonWithBundleKeys = new InvoiceJsonWithBundleKeys(invoice, bundleKeys);
+ final InvoiceJsonWithBundleKeys invoiceJsonWithBundleKeys = new InvoiceJsonWithBundleKeys(invoice, bundleKeys, credits);
Assert.assertEquals(invoiceJsonWithBundleKeys.getAmount(), invoice.getChargedAmount());
Assert.assertEquals(invoiceJsonWithBundleKeys.getCBA(), invoice.getCBAAmount());
Assert.assertEquals(invoiceJsonWithBundleKeys.getCreditAdj(), invoice.getCreditAdjAmount());
@@ -116,5 +132,17 @@ public class TestInvoiceJsonWithBundleKeys extends JaxrsTestSuite {
Assert.assertEquals(invoiceJsonWithBundleKeys.getBalance(), invoice.getBalance());
Assert.assertEquals(invoiceJsonWithBundleKeys.getAccountId(), invoice.getAccountId().toString());
Assert.assertEquals(invoiceJsonWithBundleKeys.getBundleKeys(), bundleKeys);
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getCredits(), credits);
+ }
+
+ private CreditJson createCreditJson() {
+ final BigDecimal creditAmount = BigDecimal.TEN;
+ final UUID invoiceId = UUID.randomUUID();
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final DateTime requestedDate = clock.getUTCNow();
+ final DateTime effectiveDate = clock.getUTCNow();
+ final String reason = UUID.randomUUID().toString();
+ final UUID accountId = UUID.randomUUID();
+ return new CreditJson(creditAmount, invoiceId, invoiceNumber, requestedDate, effectiveDate, reason, accountId);
}
}