@Test public void addListener_flushesPaymentMethodNoncesUpdatedCallback() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.postCallback(new ArrayList<PaymentMethodNonce>()); fragment.addListener(new PaymentMethodNoncesUpdatedListener() { @Override public void onPaymentMethodNoncesUpdated(List<PaymentMethodNonce> paymentMethodNonces) { mCalled.set(true); } }); assertTrue(mCalled.get()); }
@Override public boolean shouldRun() { return getConfiguration() != null && isAdded(); }
private static void launchBrowserSwitch(BraintreeFragment fragment, ThreeDSecureLookup threeDSecureLookup) { String assetsBaseUrl = fragment.getConfiguration().getAssetsUrl() + THREE_D_SECURE_ASSETS_PATH; String returnUrl = String.format("%s/redirect.html?redirect_url=%s://x-callback-url/braintree/threedsecure?", assetsBaseUrl, fragment.getReturnUrlScheme()); Uri redirectUri = Uri.parse(assetsBaseUrl + "/index.html") .buildUpon() .appendQueryParameter("AcsUrl", threeDSecureLookup.getAcsUrl()) .appendQueryParameter("PaReq", threeDSecureLookup.getPareq()) .appendQueryParameter("MD", threeDSecureLookup.getMd()) .appendQueryParameter("TermUrl", threeDSecureLookup.getTermUrl()) .appendQueryParameter("ReturnUrl", returnUrl) .build(); fragment.browserSwitch(BraintreeRequestCodes.THREE_D_SECURE, redirectUri.toString()); } }
@Override public void onConfigurationFetched(Configuration configuration) { setConfiguration(configuration); postConfigurationCallback(); flushCallbacks(); } }, new BraintreeResponseListener<Exception>() {
private static void launchWebView(BraintreeFragment fragment, ThreeDSecureLookup threeDSecureLookup) { Intent intent = new Intent(fragment.getApplicationContext(), ThreeDSecureWebViewActivity.class) .putExtra(ThreeDSecureWebViewActivity.EXTRA_THREE_D_SECURE_LOOKUP, threeDSecureLookup); fragment.startActivityForResult(intent, BraintreeRequestCodes.THREE_D_SECURE); }
@Test public void removeListener_noPaymentMethodNoncesUpdatedCallbacksReceived() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); PaymentMethodNoncesUpdatedListener listener = new PaymentMethodNoncesUpdatedListener() { @Override public void onPaymentMethodNoncesUpdated(List<PaymentMethodNonce> paymentMethodNonces) { fail("Listener was called"); } }; fragment.addListener(listener); fragment.removeListener(listener); fragment.postCallback(new ArrayList<PaymentMethodNonce>()); }
static void onActivityResult(final BraintreeFragment fragment, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { fragment.sendAnalyticsEvent("pay-with-venmo.app-switch.success"); String nonce = data.getStringExtra(EXTRA_PAYMENT_METHOD_NONCE); if (shouldVault(fragment.getApplicationContext()) && fragment.getAuthorization() instanceof ClientToken) { vault(fragment, nonce); } else { String venmoUsername = data.getStringExtra(EXTRA_USERNAME); VenmoAccountNonce venmoAccountNonce = new VenmoAccountNonce(nonce, venmoUsername, venmoUsername); fragment.postCallback(venmoAccountNonce); } } else if (resultCode == Activity.RESULT_CANCELED) { fragment.sendAnalyticsEvent("pay-with-venmo.app-switch.canceled"); } }
public static BraintreeFragment getFragment(Activity activity, String authorization, String configuration) { try { if (authorization == null) { authorization = TestTokenizationKey.TOKENIZATION_KEY; } if (configuration != null) { setConfiguration(authorization, configuration); } BraintreeFragment fragment = BraintreeFragment.newInstance(activity, authorization); while (!fragment.isAdded()) { try { Thread.sleep(10); } catch (InterruptedException ignored) {} } return fragment; } catch (InvalidArgumentException e) { fail(e.getMessage()); return new BraintreeFragment(); } }
@Test public void removeListener_noCancelReceived() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); BraintreeCancelListener listener = new BraintreeCancelListener() { @Override public void onCancel(int requestCode) { fail("Listener was called"); } }; fragment.addListener(listener); fragment.removeListener(listener); fragment.postCancelCallback(42); }
@Test public void startActivityForResult_doesNotPostExceptionWhenAttached() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { fail("onError was called"); } }); fragment.startActivityForResult(new Intent(), 1); assertFalse(mCalled.get()); }
@Test public void addListener_flushesCancelCallback() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.postCancelCallback(42); fragment.addListener(new BraintreeCancelListener() { @Override public void onCancel(int requestCode) { assertEquals(42, requestCode); mCalled.set(true); } }); assertTrue(mCalled.get()); }
@Test public void onActivityResult_handlesPayPalResult() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); mockStatic(PayPal.class); Intent intent = new Intent(); fragment.onActivityResult(BraintreeRequestCodes.PAYPAL, Activity.RESULT_FIRST_USER, intent); verifyStatic(); PayPal.onActivityResult(fragment, Activity.RESULT_FIRST_USER, intent); }
@Test public void sendEvent_doesNothingIfAnalyticsNotEnabled() throws InvalidArgumentException { AnalyticsDatabase db = AnalyticsDatabase.getInstance(mActivity); BraintreeFragment fragment = spy(BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY)); when(fragment.getConfiguration()).thenReturn((Configuration) basicConfig()); fragment.sendAnalyticsEvent("test.event"); assertEquals(0, db.getPendingRequests().size()); }
public BraintreeFragment build() { BraintreeFragment fragment = mock(BraintreeFragment.class); when(fragment.getApplicationContext()).thenReturn(mContext); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { ((ConfigurationListener) invocation.getArguments()[0]).onConfigurationFetched(mConfiguration); return null; } }).when(fragment).waitForConfiguration(any(ConfigurationListener.class)); when(fragment.getConfiguration()).thenReturn(mConfiguration); when(fragment.getHttpClient()).thenReturn(mock(BraintreeHttpClient.class)); when(fragment.getGraphQLHttpClient()).thenReturn(mock(BraintreeGraphQLHttpClient.class)); return fragment; } }
@Override public void onResume() { super.onResume(); if (getActivity() instanceof BraintreeListener) { addListener((BraintreeListener) getActivity()); if (mNewActivityNeedsConfiguration && getConfiguration() != null) { mNewActivityNeedsConfiguration = false; postConfigurationCallback(); } } flushCallbacks(); if (mGoogleApiClient != null && !mGoogleApiClient.isConnected() && !mGoogleApiClient.isConnecting()) { mGoogleApiClient.connect(); } }
@Test public void getBraintreeApiHttpClient_returnsNull_whenNotPresent() throws InvalidArgumentException, JSONException { String configuration = new TestConfigurationBuilder() .build(); mockConfigurationManager(Configuration.fromJson(configuration)); BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); assertNull(fragment.getBraintreeApiHttpClient()); }
@Test public void onActivityResult_postsCancelCallbackWhenResultCodeIsCanceled() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.addListener(new BraintreeCancelListener() { @Override public void onCancel(int requestCode) { assertEquals(42, requestCode); mCalled.set(true); } }); fragment.onActivityResult(42, Activity.RESULT_CANCELED, null); assertTrue(mCalled.get()); }
@Test public void postCallback_addsPaymentMethodNonceToCache() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); assertEquals(0, fragment.getCachedPaymentMethodNonces().size()); fragment.postCallback(new CardNonce()); assertEquals(1, fragment.getCachedPaymentMethodNonces().size()); assertTrue(fragment.getCachedPaymentMethodNonces().get(0) instanceof CardNonce); }
@Test public void onBrowserSwitchResult_callsOnActivityResultForOkResult() throws InvalidArgumentException { BraintreeFragment fragment = spy(BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY)); fragment.onBrowserSwitchResult(42, BrowserSwitchResult.OK, Uri.parse("http://example.com")); ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); verify(fragment).onActivityResult(eq(42), eq(Activity.RESULT_OK), captor.capture()); assertEquals("http://example.com", captor.getValue().getData().toString()); }
private void flushAnalyticsEvents() { if (getConfiguration() != null && getConfiguration().toJson() != null && getConfiguration().getAnalytics().isEnabled()) { Intent intent = new Intent(mContext, AnalyticsIntentService.class) .putExtra(AnalyticsIntentService.EXTRA_AUTHORIZATION, getAuthorization().toString()) .putExtra(AnalyticsIntentService.EXTRA_CONFIGURATION, getConfiguration().toJson()); try { getApplicationContext().startService(intent); } catch (RuntimeException e) { AnalyticsSender.send(getApplicationContext(), mAuthorization, getHttpClient(), getConfiguration().getAnalytics().getUrl(), false); } } }