Fix cancelAtPeriodEnd calculation

This commit is contained in:
Ravi Khadiwala 2024-09-24 11:49:53 -05:00 committed by ravi-signal
parent 9fb4e2d272
commit 50bd30fb1f
2 changed files with 10 additions and 2 deletions

View File

@ -12,6 +12,7 @@ import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.androidpublisher.AndroidPublisher;
import com.google.api.services.androidpublisher.AndroidPublisherRequest;
import com.google.api.services.androidpublisher.AndroidPublisherScopes;
import com.google.api.services.androidpublisher.model.AutoRenewingPlan;
import com.google.api.services.androidpublisher.model.BasePlan;
import com.google.api.services.androidpublisher.model.OfferDetails;
import com.google.api.services.androidpublisher.model.RegionalBasePlanConfig;
@ -244,13 +245,17 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor {
case UNSPECIFIED -> SubscriptionStatus.UNKNOWN;
};
final boolean autoRenewEnabled = Optional
.ofNullable(lineItem.getAutoRenewingPlan())
.map(AutoRenewingPlan::getAutoRenewEnabled) // returns null or false if auto-renew disabled
.orElse(false);
return new SubscriptionInformation(
price,
productIdToLevel(lineItem.getProductId()),
billingCycleAnchor.orElse(null),
expiration.orElse(null),
expiration.map(clock.instant()::isBefore).orElse(false),
lineItem.getAutoRenewingPlan() != null && lineItem.getAutoRenewingPlan().getAutoRenewEnabled(),
!autoRenewEnabled,
status,
PaymentProvider.GOOGLE_PLAY_BILLING,
PaymentMethod.GOOGLE_PLAY_BILLING,
@ -467,5 +472,4 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor {
return s;
}
}
}

View File

@ -16,6 +16,7 @@ import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import com.google.api.services.androidpublisher.AndroidPublisher;
import com.google.api.services.androidpublisher.model.AutoRenewingPlan;
import com.google.api.services.androidpublisher.model.BasePlan;
import com.google.api.services.androidpublisher.model.Money;
import com.google.api.services.androidpublisher.model.OfferDetails;
@ -234,6 +235,7 @@ class GooglePlayBillingManagerTest {
.setRegionCode("US")
.setLineItems(List.of(new SubscriptionPurchaseLineItem()
.setExpiryTime(Instant.now().plus(Duration.ofDays(1)).toString())
.setAutoRenewingPlan(new AutoRenewingPlan().setAutoRenewEnabled(null))
.setProductId(PRODUCT_ID)
.setOfferDetails(new OfferDetails().setBasePlanId(basePlanId)))));
@ -251,6 +253,8 @@ class GooglePlayBillingManagerTest {
assertThat(info.price().currency()).isEqualTo("USD");
assertThat(info.price().amount().compareTo(new BigDecimal("175"))).isEqualTo(0); // 175 cents
assertThat(info.level()).isEqualTo(201L);
assertThat(info.cancelAtPeriodEnd()).isTrue();
}
}