Allow cancellation of an expired purchaseToken

This commit is contained in:
Ravi Khadiwala 2025-03-07 15:12:30 -06:00 committed by ravi-signal
parent 469955aec9
commit b7fee7b426
2 changed files with 13 additions and 1 deletions

View File

@ -219,7 +219,9 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor {
return executeTokenOperation(pub -> return executeTokenOperation(pub ->
pub.purchases().subscriptions().cancel(packageName, purchase.getProductId(), purchaseToken)); pub.purchases().subscriptions().cancel(packageName, purchase.getProductId(), purchaseToken));
}); })
// If the subscription is not found, no need to do anything
.exceptionally(ExceptionUtils.exceptionallyHandler(SubscriptionException.NotFound.class, e -> null));
} }
@Override @Override

View File

@ -181,6 +181,16 @@ class GooglePlayBillingManagerTest {
verify(cancel, times(wanted)).execute(); verify(cancel, times(wanted)).execute();
} }
@Test
public void cancelMissingSubscription() throws IOException {
final HttpResponseException mockException = mock(HttpResponseException.class);
when(mockException.getStatusCode()).thenReturn(404);
when(subscriptionsv2Get.execute()).thenThrow(mockException);
assertThatNoException().isThrownBy(() ->
googlePlayBillingManager.cancelAllActiveSubscriptions(PURCHASE_TOKEN).join());
verifyNoInteractions(cancel);
}
@Test @Test
public void getReceiptUnacknowledged() throws IOException { public void getReceiptUnacknowledged() throws IOException {
when(subscriptionsv2Get.execute()).thenReturn(new SubscriptionPurchaseV2() when(subscriptionsv2Get.execute()).thenReturn(new SubscriptionPurchaseV2()