package com.stripe.wrap.pay; import android.os.Bundle; import com.google.android.gms.wallet.Cart; import com.google.android.gms.wallet.FullWalletRequest; import com.google.android.gms.wallet.MaskedWalletRequest; import com.google.android.gms.wallet.PaymentMethodTokenizationParameters; import com.google.android.gms.wallet.PaymentMethodTokenizationType; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** * Test class for {@link AndroidPayConfiguration} */ @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) public class AndroidPayConfigurationTest { private Cart mCart; private AndroidPayConfiguration mAndroidPayConfiguration; @Before public void setup() { AndroidPayConfiguration.init("pk_test_abc123", "USD"); mAndroidPayConfiguration = AndroidPayConfiguration.getInstance(); mCart = Cart.newBuilder().setTotalPrice("10.00").build(); } @Test public void getPaymentMethodTokenizationParameters_whenApiKeyIsNotNull_returnsExpectedObject() { PaymentMethodTokenizationParameters params = mAndroidPayConfiguration.getPaymentMethodTokenizationParameters(); assertNotNull(params); assertEquals(PaymentMethodTokenizationType.PAYMENT_GATEWAY, params.getPaymentMethodTokenizationType()); Bundle bundle = params.getParameters(); assertNotNull(bundle); assertEquals("pk_test_abc123", bundle.getString("stripe:publishableKey")); assertEquals("stripe", bundle.getString("gateway")); assertEquals(com.stripe.android.BuildConfig.VERSION_NAME, bundle.getString("stripe:version")); } @Test public void generateFullWalletRequest_createsExpectedFullWalletRequest() { FullWalletRequest request = AndroidPayConfiguration.generateFullWalletRequest("123abc", mCart); assertEquals("123abc", request.getGoogleTransactionId()); assertNotNull(request.getCart()); assertEquals("10.00", request.getCart().getTotalPrice()); } @Test public void generateMaskedWalletRequest_withJustCart_usesSetDefaults() { final String llamaName = "Llama Food Unlimited"; mAndroidPayConfiguration.setMerchantName(llamaName); mAndroidPayConfiguration.setPublicApiKey("pk_test_llama"); mAndroidPayConfiguration.setPhoneNumberRequired(true); mAndroidPayConfiguration.setShippingAddressRequired(false); mAndroidPayConfiguration.setCurrencyCode("usd"); MaskedWalletRequest maskedWalletRequest = mAndroidPayConfiguration.generateMaskedWalletRequest(mCart); assertNotNull(maskedWalletRequest); assertTrue(maskedWalletRequest.isPhoneNumberRequired()); assertFalse(maskedWalletRequest.isShippingAddressRequired()); assertEquals("USD", maskedWalletRequest.getCurrencyCode()); assertEquals(llamaName, maskedWalletRequest.getMerchantName()); assertEquals(mCart.getTotalPrice(), maskedWalletRequest.getEstimatedTotalPrice()); assertNotNull(maskedWalletRequest.getPaymentMethodTokenizationParameters()); Bundle bundle = maskedWalletRequest.getPaymentMethodTokenizationParameters().getParameters(); assertNotNull(bundle); assertEquals("pk_test_llama", bundle.getString("stripe:publishableKey")); } @Test public void generateMaskedWalletRequest_withAllData_overridesDefaults() { final String llamaName = "Llama Food Unlimited"; mAndroidPayConfiguration.setMerchantName(llamaName); mAndroidPayConfiguration.setPublicApiKey("pk_test_llama"); mAndroidPayConfiguration.setPhoneNumberRequired(true); mAndroidPayConfiguration.setShippingAddressRequired(false); mAndroidPayConfiguration.setCurrencyCode("usd"); MaskedWalletRequest maskedWalletRequest = mAndroidPayConfiguration.generateMaskedWalletRequest( mCart, false, true, "eur"); assertNotNull(maskedWalletRequest); assertFalse(maskedWalletRequest.isPhoneNumberRequired()); assertTrue(maskedWalletRequest.isShippingAddressRequired()); assertEquals("eur", maskedWalletRequest.getCurrencyCode()); assertEquals(llamaName, maskedWalletRequest.getMerchantName()); assertEquals(mCart.getTotalPrice(), maskedWalletRequest.getEstimatedTotalPrice()); assertNotNull(maskedWalletRequest.getPaymentMethodTokenizationParameters()); Bundle bundle = maskedWalletRequest.getPaymentMethodTokenizationParameters().getParameters(); assertNotNull(bundle); assertEquals("pk_test_llama", bundle.getString("stripe:publishableKey")); } @Test public void generateMaskedWalletRequest_withoutCart_returnsNull() { assertNull(mAndroidPayConfiguration.generateMaskedWalletRequest(null)); } @Test public void generateMaskedWalletRequest_whenCartHasNoTotalPrice_returnsNull() { Cart noPriceCart = Cart.newBuilder().build(); assertNull(mAndroidPayConfiguration.generateMaskedWalletRequest(noPriceCart)); } }