diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java index eb97c1bd5..475a90a33 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java @@ -190,10 +190,10 @@ public class SubscriptionController { })); } - // This logic to exclude some iOS client versions from receiving SEPA_DEBIT + // This logic to exclude some iOS client versions from receiving SEPA_DEBIT or IDEAL // as a supported payment method can be removed after 01-23-24. private boolean excludePaymentMethod(@Nullable final UserAgent userAgent, final PaymentMethod paymentMethod) { - return paymentMethod == PaymentMethod.SEPA_DEBIT + return (paymentMethod == PaymentMethod.SEPA_DEBIT || paymentMethod == PaymentMethod.IDEAL) && userAgent != null && userAgent.getPlatform() == ClientPlatform.IOS && userAgent.getVersion().isLowerThanOrEqualTo(LAST_PROBLEMATIC_IOS_VERSION); @@ -392,7 +392,7 @@ public class SubscriptionController { private SubscriptionProcessorManager getManagerForPaymentMethod(PaymentMethod paymentMethod) { return switch (paymentMethod) { - case CARD, SEPA_DEBIT -> stripeManager; + case CARD, SEPA_DEBIT, IDEAL -> stripeManager; case PAYPAL -> braintreeManager; case UNKNOWN -> throw new BadRequestException("Invalid payment method"); }; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java index 1477e45c3..2dfa09d92 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/PaymentMethod.java @@ -19,4 +19,8 @@ public enum PaymentMethod { * A SEPA debit account */ SEPA_DEBIT, + /** + * An iDEAL account + */ + IDEAL, } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java index 741df5e46..35b6fa921 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java @@ -107,7 +107,9 @@ public class StripeManager implements SubscriptionProcessorManager { @Override public boolean supportsPaymentMethod(PaymentMethod paymentMethod) { - return paymentMethod == PaymentMethod.CARD || paymentMethod == PaymentMethod.SEPA_DEBIT; + return paymentMethod == PaymentMethod.CARD + || paymentMethod == PaymentMethod.SEPA_DEBIT + || paymentMethod == PaymentMethod.IDEAL; } private RequestOptions commonOptions() { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java index 98f61156b..6ca617adc 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/SubscriptionControllerTest.java @@ -132,6 +132,8 @@ class SubscriptionControllerTest { .thenReturn(Set.of("usd", "jpy", "bif", "eur")); when(STRIPE_MANAGER.getSupportedCurrenciesForPaymentMethod(PaymentMethod.SEPA_DEBIT)) .thenReturn(Set.of("eur")); + when(STRIPE_MANAGER.getSupportedCurrenciesForPaymentMethod(PaymentMethod.IDEAL)) + .thenReturn(Set.of("eur")); when(BRAINTREE_MANAGER.getSupportedCurrenciesForPaymentMethod(PaymentMethod.PAYPAL)) .thenReturn(Set.of("usd", "jpy")); } @@ -733,7 +735,7 @@ class SubscriptionControllerTest { @ParameterizedTest @MethodSource - void getSubscriptionConfiguration(final String userAgent, final boolean expectSepa) { + void getSubscriptionConfiguration(final String userAgent, final boolean expectNonCardPaymentMethods) { when(BADGE_TRANSLATOR.translate(any(), eq("B1"))).thenReturn(new Badge("B1", "cat1", "name1", "desc1", List.of("l", "m", "h", "x", "xx", "xxx"), "SVG", List.of(new BadgeSvg("sl", "sd"), new BadgeSvg("ml", "md"), new BadgeSvg("ll", "ld")))); @@ -811,7 +813,7 @@ class SubscriptionControllerTest { List.of(BigDecimal.valueOf(5)))); assertThat(currency.subscription()).isEqualTo( Map.of("5", BigDecimal.valueOf(5), "15", BigDecimal.valueOf(15),"35", BigDecimal.valueOf(35))); - final List expectedPaymentMethods = expectSepa ? List.of("CARD", "SEPA_DEBIT") : List.of("CARD"); + final List expectedPaymentMethods = expectNonCardPaymentMethods ? List.of("CARD", "SEPA_DEBIT", "IDEAL") : List.of("CARD"); assertThat(currency.supportedPaymentMethods()).isEqualTo(expectedPaymentMethods); }); });