For Braintree, return `active` subscription status if latest transaction also succeeded

This commit is contained in:
Katherine 2023-11-16 19:15:46 -05:00 committed by GitHub
parent 84b56ae1b2
commit 7fbc327591
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 4 deletions

View File

@ -220,9 +220,11 @@ public class BraintreeManager implements SubscriptionProcessorManager {
}
}
private static SubscriptionStatus getSubscriptionStatus(final Subscription.Status status) {
private static SubscriptionStatus getSubscriptionStatus(final Subscription.Status status, final boolean latestTransactionFailed) {
return switch (status) {
case ACTIVE -> SubscriptionStatus.ACTIVE;
// Stripe returns a PAST_DUE status if the subscription's most recent payment failed.
// This check ensures that Braintree is consistent with Stripe.
case ACTIVE -> latestTransactionFailed ? SubscriptionStatus.PAST_DUE : SubscriptionStatus.ACTIVE;
case CANCELED, EXPIRED -> SubscriptionStatus.CANCELED;
case PAST_DUE -> SubscriptionStatus.PAST_DUE;
case PENDING -> SubscriptionStatus.INCOMPLETE;
@ -435,9 +437,11 @@ public class BraintreeManager implements SubscriptionProcessorManager {
final Optional<Transaction> latestTransaction = getLatestTransactionForSubscription(subscription);
boolean latestTransactionFailed = false;
if (latestTransaction.isPresent()){
paymentProcessing = isPaymentProcessing(latestTransaction.get().getStatus());
if (getPaymentStatus(latestTransaction.get().getStatus()) != PaymentStatus.SUCCEEDED) {
latestTransactionFailed = true;
chargeFailure = createChargeFailure(latestTransaction.get());
}
}
@ -450,7 +454,7 @@ public class BraintreeManager implements SubscriptionProcessorManager {
endOfCurrentPeriod,
Subscription.Status.ACTIVE == subscription.getStatus(),
!subscription.neverExpires(),
getSubscriptionStatus(subscription.getStatus()),
getSubscriptionStatus(subscription.getStatus(), latestTransactionFailed),
latestTransaction.map(this::getPaymentMethodFromTransaction).orElse(PaymentMethod.PAYPAL),
paymentProcessing,
chargeFailure

View File

@ -84,7 +84,7 @@ public interface SubscriptionProcessorManager {
INCOMPLETE("incomplete"),
/**
* Payment on the latest renewal either failed or wasn't attempted.
* Payment on the latest renewal failed but there are processor retries left, or payment wasn't attempted.
*/
PAST_DUE("past_due"),