Details
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentAttemptJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentAttemptJson.java
index dc64083..b29834f 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentAttemptJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentAttemptJson.java
@@ -87,7 +87,7 @@ public class PaymentAttemptJson extends JsonBase {
this(paymentAttempt.getAccountId().toString(),
paymentAttempt.getPaymentMethodId().toString(),
paymentExternalKey,
- paymentAttempt.getTransactionId().toString(),
+ paymentAttempt.getTransactionId() != null ? paymentAttempt.getTransactionId().toString() : null,
paymentAttempt.getTransactionExternalKey(),
paymentAttempt.getTransactionType().toString(),
paymentAttempt.getEffectiveDate(),
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
index 03ea9dc..993d0f5 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
@@ -101,7 +101,7 @@ public interface JaxrsResource {
public static final String QUERY_PAYMENT_METHOD_PLUGIN_NAME = "pluginName";
public static final String QUERY_WITH_PLUGIN_INFO = "withPluginInfo";
- public static final String QUERY_WITH_ATTEMPTS = "withAttemps";
+ public static final String QUERY_WITH_ATTEMPTS = "withAttempts";
public static final String QUERY_PAYMENT_METHOD_IS_DEFAULT = "isDefault";
public static final String QUERY_PAY_ALL_UNPAID_INVOICES = "payAllUnpaidInvoices";
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
index 5c21ce8..cb6112d 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
@@ -25,8 +25,10 @@ import java.util.UUID;
import javax.annotation.Nullable;
import org.killbill.billing.client.KillBillClientException;
+import org.killbill.billing.client.RequestOptions;
import org.killbill.billing.client.model.Account;
import org.killbill.billing.client.model.ComboPaymentTransaction;
+import org.killbill.billing.client.model.InvoicePayments;
import org.killbill.billing.client.model.Payment;
import org.killbill.billing.client.model.PaymentMethod;
import org.killbill.billing.client.model.PaymentMethodPluginDetail;
@@ -48,6 +50,7 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.base.MoreObjects;
+import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
@@ -148,6 +151,29 @@ public class TestPayment extends TestJaxrsBase {
}
@Test(groups = "slow")
+ public void testWithFailedPaymentAndScheduledAttempts() throws Exception {
+ mockPaymentProviderPlugin.makeNextPaymentFailWithError();
+ final Account account = createAccountWithPMBundleAndSubscriptionAndWaitForFirstInvoice();
+ // Getting Invoice #2 (first after Trial period)
+ UUID failedInvoiceId = killBillClient.getInvoicesForAccount(account.getAccountId(), false, RequestOptions.empty()).get(1).getInvoiceId();
+
+ HashMultimap<String, String> queryParams = HashMultimap.create();
+ queryParams.put("withAttempts", "true");
+ RequestOptions inputOptions = RequestOptions.builder()
+ .withCreatedBy(createdBy)
+ .withReason(reason)
+ .withComment(comment)
+ .withQueryParams(queryParams).build();
+
+ InvoicePayments invoicePayments = killBillClient.getInvoicePayment(failedInvoiceId, inputOptions);
+
+ Assert.assertEquals(invoicePayments.get(0).getTargetInvoiceId(), failedInvoiceId);
+ Assert.assertNotNull(invoicePayments.get(0).getPaymentAttempts());
+ Assert.assertEquals(invoicePayments.get(0).getPaymentAttempts().get(0).getStateName(), "RETRIED");
+ Assert.assertEquals(invoicePayments.get(0).getPaymentAttempts().get(1).getStateName(), "SCHEDULED");
+ }
+
+ @Test(groups = "slow")
public void testCreateRetrievePayment() throws Exception {
final Account account = createAccountWithDefaultPaymentMethod();
final String externalPaymentKey = UUID.randomUUID().toString();