diff --git a/stripe/src/main/java/com/stripe/android/PaymentAuthConfig.java b/stripe/src/main/java/com/stripe/android/PaymentAuthConfig.java index ce23a2722ee..6ebac7ae282 100644 --- a/stripe/src/main/java/com/stripe/android/PaymentAuthConfig.java +++ b/stripe/src/main/java/com/stripe/android/PaymentAuthConfig.java @@ -1,5 +1,6 @@ package com.stripe.android; +import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; @@ -74,17 +75,24 @@ public static final class Stripe3ds2Config { @NonNull final Stripe3ds2UiCustomization uiCustomization; private Stripe3ds2Config(@NonNull Builder builder) { - timeout = builder.mTimeout; + timeout = checkValidTimeout(builder.mTimeout); uiCustomization = Objects.requireNonNull(builder.mUiCustomization); } + private int checkValidTimeout(int timeout) { + if (timeout < 5 || timeout > 99) { + throw new IllegalArgumentException("Timeout value must be between 5 and 99, inclusive"); + } + return timeout; + } + public static final class Builder implements ObjectBuilder { private int mTimeout = DEFAULT_TIMEOUT; private Stripe3ds2UiCustomization mUiCustomization = new Stripe3ds2UiCustomization.Builder().build(); @NonNull - public Builder setTimeout(int timeout) { + public Builder setTimeout(@IntRange(from = 5, to = 99) int timeout) { this.mTimeout = timeout; return this; } diff --git a/stripe/src/test/java/com/stripe/android/PaymentAuthConfigTest.java b/stripe/src/test/java/com/stripe/android/PaymentAuthConfigTest.java index ae7dcc8d2c1..cca5ad6754a 100644 --- a/stripe/src/test/java/com/stripe/android/PaymentAuthConfigTest.java +++ b/stripe/src/test/java/com/stripe/android/PaymentAuthConfigTest.java @@ -13,11 +13,13 @@ import org.junit.Before; import org.junit.Test; +import org.junit.function.ThrowingRunnable; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; @RunWith(RobolectricTestRunner.class) public class PaymentAuthConfigTest { @@ -45,6 +47,27 @@ public void get_whenInit_returnsInstance() { assertEquals(20, PaymentAuthConfig.get().stripe3ds2Config.timeout); } + @Test + public void testCheckValidTimeout() { + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + new PaymentAuthConfig.Stripe3ds2Config.Builder() + .setTimeout(1) + .build(); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + new PaymentAuthConfig.Stripe3ds2Config.Builder() + .setTimeout(100) + .build(); + } + }); + } + @Test public void testStripe3ds2ConfigBuilder() { final PaymentAuthConfig.Stripe3ds2UiCustomization uiCustomization =