From c97c00bf5f15fce8d34af153d8ce0d75655bb9d7 Mon Sep 17 00:00:00 2001 From: Ravi Khadiwala Date: Wed, 16 Jul 2025 10:38:47 -0500 Subject: [PATCH] Fix the play mapping to stripe statuses CANCELLED in play terminiology is the same as an active subscription with cancelAtPeriodEnd set. So it should map to the ACTIVE stripe status. EXPIRED is the equivalent of a stripe CANCELLED subscription. --- .../subscriptions/GooglePlayBillingManager.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java index e2a00d113..7ce51b083 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/GooglePlayBillingManager.java @@ -242,11 +242,14 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor { final SubscriptionStatus status = switch (SubscriptionState .fromString(subscription.getSubscriptionState()) .orElse(SubscriptionState.UNSPECIFIED)) { - case ACTIVE -> SubscriptionStatus.ACTIVE; + // In play terminology CANCELLED is the same as an active subscription with cancelAtPeriodEnd set in Stripe. So + // it should map to the ACTIVE stripe status. + case ACTIVE, CANCELED -> SubscriptionStatus.ACTIVE; case PENDING -> SubscriptionStatus.INCOMPLETE; - case EXPIRED, ON_HOLD, PAUSED -> SubscriptionStatus.PAST_DUE; + case ON_HOLD, PAUSED -> SubscriptionStatus.PAST_DUE; case IN_GRACE_PERIOD -> SubscriptionStatus.UNPAID; - case CANCELED, PENDING_PURCHASE_CANCELED -> SubscriptionStatus.CANCELED; + // EXPIRED is the equivalent of a Stripe CANCELLED subscription + case EXPIRED, PENDING_PURCHASE_CANCELED -> SubscriptionStatus.CANCELED; case UNSPECIFIED -> SubscriptionStatus.UNKNOWN; };