@Test public void onActivityResult_sendsAnalyticsEventOnSuccess() { BraintreeFragment fragment = new MockFragmentBuilder() .build(); Intent intent = new Intent() .putExtra(Venmo.EXTRA_PAYMENT_METHOD_NONCE, "123456-12345-12345-a-adfa") .putExtra(Venmo.EXTRA_USERNAME, "username"); Venmo.onActivityResult(fragment, Activity.RESULT_OK, intent); verify(fragment).sendAnalyticsEvent("pay-with-venmo.app-switch.success"); }
@Test public void onActivityResult_postsPaymentMethodNonceOnSuccess() { BraintreeFragment fragment = new MockFragmentBuilder() .build(); Intent intent = new Intent() .putExtra(Venmo.EXTRA_PAYMENT_METHOD_NONCE, "123456-12345-12345-a-adfa") .putExtra(Venmo.EXTRA_USERNAME, "username"); Venmo.onActivityResult(fragment, Activity.RESULT_OK, intent); ArgumentCaptor<VenmoAccountNonce> captor = ArgumentCaptor.forClass(VenmoAccountNonce.class); verify(fragment).postCallback(captor.capture()); assertEquals("123456-12345-12345-a-adfa", captor.getValue().getNonce()); assertEquals("username", captor.getValue().getDescription()); assertEquals("username", captor.getValue().getUsername()); }
@Test public void onActivityResult_sendsAnalyticsEventOnCancel() { BraintreeFragment fragment = new MockFragmentBuilder() .build(); Venmo.onActivityResult(fragment, Activity.RESULT_CANCELED, new Intent()); verify(fragment).sendAnalyticsEvent("pay-with-venmo.app-switch.canceled"); }
@Test public void onActivityResult_handlesVenmoResult() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); mockStatic(Venmo.class); Intent intent = new Intent(); fragment.onActivityResult(BraintreeRequestCodes.VENMO, Activity.RESULT_OK, intent); verifyStatic(); Venmo.onActivityResult(fragment, Activity.RESULT_OK, intent); }
@Test public void onActivityResult_withFailedVaultCall_postsCallbackToErrorListener() 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(); ArgumentCaptor<Exception> responseCaptor = ArgumentCaptor.forClass(Exception.class); Venmo.authorizeAccount(fragment, true); Intent responseIntent = new Intent() .putExtra(Venmo.EXTRA_PAYMENT_METHOD_NONCE, "nonce"); Venmo.onActivityResult(fragment, Activity.RESULT_OK, responseIntent); verify(fragment).postCallback(responseCaptor.capture()); Exception exception = responseCaptor.getValue(); assertTrue(exception instanceof AuthorizationException); assertEquals("Bad fingerprint", exception.getMessage()); }
@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 onActivityResult_withSuccessfulVaultCall_returnsVenmoAccountNonce() 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); ArgumentCaptor<PaymentMethodNonce> responseCaptor = ArgumentCaptor.forClass(PaymentMethodNonce.class); Intent responseIntent = new Intent() .putExtra(Venmo.EXTRA_PAYMENT_METHOD_NONCE, "nonce"); Venmo.onActivityResult(fragment, Activity.RESULT_OK, responseIntent); verify(fragment).postCallback(responseCaptor.capture()); PaymentMethodNonce capturedNonce = responseCaptor.getValue(); assertTrue(capturedNonce instanceof VenmoAccountNonce); VenmoAccountNonce venmoAccountNonce = (VenmoAccountNonce) capturedNonce; assertEquals("Venmo", venmoAccountNonce.getTypeLabel()); assertEquals("fake-venmo-nonce", venmoAccountNonce.getNonce()); assertEquals("venmojoe", venmoAccountNonce.getUsername()); }
break; case BraintreeRequestCodes.VENMO: Venmo.onActivityResult(this, resultCode, data); break; case BraintreeRequestCodes.VISA_CHECKOUT:
@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 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")); }