@Test public void deletePaymentMethodNonce_withApiBelowLollipop_doesNotPostToGraphQL() throws InvalidArgumentException { Authorization authorization = Authorization.fromString(stringFromFixture("client_token.json")); BraintreeFragment fragment = new MockFragmentBuilder() .authorization(authorization) .graphQLSuccessResponse("Success") .sessionId("test-session-id") .integration("test-integration") .build(); PaymentMethod.deletePaymentMethod(fragment, mCardNonce); ArgumentCaptor<Exception> captor = ArgumentCaptor.forClass(Exception.class); verify(fragment).postCallback(captor.capture()); assertTrue(captor.getValue() instanceof BraintreeException); assertEquals("Payment Method Nonce deletion is not supported for API < 21", captor.getValue().getMessage()); verifyZeroInteractions(fragment.getGraphQLHttpClient()); } }
private BraintreeFragment getMockFragment(String authorization, Configuration configuration) { try { return new MockFragmentBuilder() .authorization(Authorization.fromString(authorization)) .configuration(configuration) .build(); } catch (InvalidArgumentException e) { fail(e.getMessage()); return null; } }
@Config(sdk = 21) @Test public void deletePaymentMethodNonce_sendNoncePostCallbackForSuccess() throws InvalidArgumentException { Authorization authorization = Authorization.fromString(stringFromFixture("client_token.json")); BraintreeFragment fragment = new MockFragmentBuilder() .authorization(authorization) .graphQLSuccessResponse("Success") .build(); PaymentMethod.deletePaymentMethod(fragment, mCardNonce); verify(fragment).postPaymentMethodDeletedCallback(eq(mCardNonce)); }
private BraintreeFragment getMockFragment(String authorization, Configuration configuration) { try { return new MockFragmentBuilder() .authorization(Authorization.fromString(authorization)) .configuration(configuration) .build(); } catch (InvalidArgumentException e) { fail(e.getMessage()); return null; } }
@Config(sdk = 21) @Test public void deletePaymentMethodNonce_throwsAnError() throws InvalidArgumentException { Authorization authorization = Authorization.fromString(stringFromFixture("client_token.json")); BraintreeFragment fragment = new MockFragmentBuilder() .authorization(authorization) .graphQLErrorResponse(new UnexpectedException("Error")) .build(); PaymentMethod.deletePaymentMethod(fragment, mCardNonce); ArgumentCaptor<Exception> captor = ArgumentCaptor.forClass(Exception.class); verify(fragment).postCallback(captor.capture()); PaymentMethodDeleteException paymentMethodDeleteException = (PaymentMethodDeleteException)captor.getValue(); PaymentMethodNonce paymentMethodNonce = paymentMethodDeleteException.getPaymentMethodNonce(); assertEquals(mCardNonce, paymentMethodNonce); }
@Config(sdk = 21) @Test public void deletePaymentMethodNonce_sendAnAnalyticsEventForSuccess() throws InvalidArgumentException { Authorization authorization = Authorization.fromString(stringFromFixture("client_token.json")); BraintreeFragment fragment = new MockFragmentBuilder() .authorization(authorization) .graphQLSuccessResponse("Success") .build(); PaymentMethod.deletePaymentMethod(fragment, mCardNonce); verify(fragment).sendAnalyticsEvent("delete-payment-methods.succeeded"); }
@Config(sdk = 21) @Test public void deletePaymentMethodNonce_sendAnAnalyticsEventForFailure() throws InvalidArgumentException { Authorization authorization = Authorization.fromString(stringFromFixture("client_token.json")); BraintreeFragment fragment = new MockFragmentBuilder() .authorization(authorization) .graphQLErrorResponse(new UnexpectedException("Error")) .build(); PaymentMethod.deletePaymentMethod(fragment, mCardNonce); verify(fragment).sendAnalyticsEvent("delete-payment-methods.failed"); }
@Test public void startPayment_failure_sendsAnalyticsEvent() throws JSONException, InvalidArgumentException { mConfiguration = new TestConfigurationBuilder() .assetsUrl("http://assets.example.com") .buildConfiguration(); mBraintreeFragment = new MockFragmentBuilder() .authorization(Authorization.fromString(stringFromFixture("client_token.json"))) .configuration(mConfiguration) .build(); Ideal.startPayment(mBraintreeFragment, new IdealRequest(), null); verify(mBraintreeFragment).sendAnalyticsEvent(eq("ideal.start-payment.selected")); verify(mBraintreeFragment).sendAnalyticsEvent(eq("ideal.start-payment.invalid-configuration")); }
@Test public void onActivityResult_doesNotPerformRequestIfTokenizationKeyUsed() throws NoSuchAlgorithmException, InvalidArgumentException { Configuration configuration = getConfigurationFromFixture(); mockStatic(TokenizationClient.class); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(Authorization.fromString("sandbox_tk_abcd")) .sessionId("another-session-id") .build(); Venmo.authorizeAccount(fragment, true); Venmo.onActivityResult(fragment, Activity.RESULT_OK, new Intent()); verifyStatic(times(0)); TokenizationClient.tokenize(eq(fragment), any(VenmoAccountBuilder.class), any(PaymentMethodNonceCallback.class)); }
@Test public void getAuthorizationRequest_buildsWithLiveStageUrl() throws JSONException, InvalidArgumentException { Configuration configuration = Configuration.fromJson(stringFromFixture("configuration/with_live_paypal.json")); BraintreeFragment fragment = mMockFragmentBuilder .authorization(Authorization.fromString(TOKENIZATION_KEY)) .configuration(configuration) .build(); Request request = PayPal.getAuthorizationRequest(fragment); assertEquals(EnvironmentManager.LIVE, request.getEnvironment()); }
@Test public void getAuthorizationRequest_buildsWithOfflineStageUrl() throws JSONException, InvalidArgumentException { Configuration configuration = Configuration.fromJson(stringFromFixture("configuration/with_offline_paypal.json")); BraintreeFragment fragment = mMockFragmentBuilder .authorization(Authorization.fromString(TOKENIZATION_KEY)) .configuration(configuration) .build(); Request request = PayPal.getAuthorizationRequest(fragment); assertEquals(EnvironmentManager.MOCK, request.getEnvironment()); }
@Test public void getAuthorizationRequest_buildsWithCustomStageUrl() throws JSONException, InvalidArgumentException { Configuration configuration = Configuration.fromJson(stringFromFixture("configuration/with_custom_paypal.json")); BraintreeFragment fragment = mMockFragmentBuilder .authorization(Authorization.fromString(TOKENIZATION_KEY)) .configuration(configuration) .build(); Request request = PayPal.getAuthorizationRequest(fragment); assertEquals("custom", request.getEnvironment()); }
@Before public void setup() throws Exception { spy(PayPal.class); doReturn(true).when(PayPal.class, "isManifestValid", any(Context.class)); spy(Recipe.class); doReturn(true).when(Recipe.class, "isValidBrowserTarget", any(Context.class), anyString(), anyString()); Authorization authorization = mock(Authorization.class); when(authorization.getBearer()).thenReturn("authorization"); when(authorization.toString()).thenReturn("authorization"); Configuration configuration = new TestConfigurationBuilder() .withAnalytics() .paypal(new TestPayPalConfigurationBuilder(true) .environment("offline") .billingAgreementsEnabled(false)) .buildConfiguration(); mMockFragmentBuilder = new MockFragmentBuilder() .authorization(authorization) .configuration(configuration); }
@Before public void setup() throws Exception { spy(ManifestValidator.class); doReturn(true).when(ManifestValidator.class, "isUrlSchemeDeclaredInAndroidManifest", any(Context.class), anyString(), any(Class.class)); Configuration configuration = new TestConfigurationBuilder() .threeDSecureEnabled(true) .buildConfiguration(); mMockFragmentBuilder = new MockFragmentBuilder() .authorization(Authorization.fromString(stringFromFixture("base_64_client_token.txt"))) .configuration(configuration); mFragment = mMockFragmentBuilder.build(); mFragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { fail(error.getMessage()); } }); }
@Test public void performAppSwitch_persistsIfVaultTrue() throws InvalidArgumentException { Configuration configuration = getConfigurationFromFixture(); Authorization clientToken = Authorization.fromString(stringFromFixture("base_64_client_token.txt")); disableSignatureVerification(); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(clientToken) .build(); Venmo.authorizeAccount(fragment, true); SharedPreferences prefs = SharedPreferencesHelper.getSharedPreferences(fragment.getApplicationContext()); assertTrue(prefs.getBoolean("com.braintreepayments.api.Venmo.VAULT_VENMO_KEY", false)); }
@Test public void onActivityResult_performsVaultRequestIfRequestPersisted() throws InvalidArgumentException, NoSuchAlgorithmException { Configuration configuration = getConfigurationFromFixture(); Authorization clientToken = Authorization.fromString(stringFromFixture("base_64_client_token.txt")); disableSignatureVerification(); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(clientToken) .sessionId("session-id") .build(); Venmo.authorizeAccount(fragment, true); mockStatic(TokenizationClient.class); Venmo.onActivityResult(fragment, Activity.RESULT_OK, new Intent()); verifyStatic(); TokenizationClient.tokenize(eq(fragment), any(VenmoAccountBuilder.class), any(PaymentMethodNonceCallback.class)); }
@Test public void performAppSwitch_persistsIfVaultFalse() throws InvalidArgumentException { Configuration configuration = getConfigurationFromFixture(); Authorization clientToken = Authorization.fromString(stringFromFixture("base_64_client_token.txt")); disableSignatureVerification(); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(clientToken) .build(); Venmo.authorizeAccount(fragment, false); SharedPreferences prefs = SharedPreferencesHelper.getSharedPreferences(fragment.getApplicationContext()); assertFalse(prefs.getBoolean("com.braintreepayments.api.Venmo.VAULT_VENMO_KEY", true)); }
@Test public void performAppSwitch_persistsFalseIfTokenizationKeyUsed() throws InvalidArgumentException { Configuration configuration = getConfigurationFromFixture(); Authorization tokenizationkey = Authorization.fromString("sandbox_tk_abcd"); disableSignatureVerification(); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(tokenizationkey) .sessionId("session-id") .build(); Venmo.authorizeAccount(fragment, true); SharedPreferences prefs = SharedPreferencesHelper.getSharedPreferences(fragment.getApplicationContext()); assertFalse(prefs.getBoolean("com.braintreepayments.api.Venmo.VAULT_VENMO_KEY", true)); }
@Test public void onActivityResult_withFailedVaultCall_sendsAnalyticsEvent() throws InvalidArgumentException { Configuration configuration = getConfigurationFromFixture(); Authorization clientToken = Authorization.fromString(stringFromFixture("base_64_client_token.txt")); disableSignatureVerification(); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(clientToken) .sessionId("session-id") .errorResponse(new AuthorizationException("Bad fingerprint")) .build(); Venmo.authorizeAccount(fragment, true); Intent responseIntent = new Intent() .putExtra(Venmo.EXTRA_PAYMENT_METHOD_NONCE, "nonce"); Venmo.onActivityResult(fragment, Activity.RESULT_OK, responseIntent); verify(fragment).sendAnalyticsEvent(endsWith("pay-with-venmo.vault.failed")); }
@Test public void onActivityResult_withSuccessfulVaultCall_sendsAnalyticsEvent() throws InvalidArgumentException { Configuration configuration = getConfigurationFromFixture(); Authorization clientToken = Authorization.fromString(stringFromFixture("base_64_client_token.txt")); disableSignatureVerification(); BraintreeFragment fragment = new MockFragmentBuilder() .context(VenmoInstalledContextFactory.venmoInstalledContext(true, RuntimeEnvironment.application)) .configuration(configuration) .authorization(clientToken) .sessionId("session-id") .successResponse(stringFromFixture("payment_methods/venmo_account_response.json")) .build(); Venmo.authorizeAccount(fragment, true); Intent responseIntent = new Intent() .putExtra(Venmo.EXTRA_PAYMENT_METHOD_NONCE, "nonce"); Venmo.onActivityResult(fragment, Activity.RESULT_OK, responseIntent); verify(fragment).sendAnalyticsEvent(endsWith("pay-with-venmo.vault.success")); }