@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_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()); }
@Test public void addListener_flushesExceptionCallbacks() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.postCallback(new Exception("Error!")); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertEquals("Error!", error.getMessage()); mCalled.set(true); } }); assertTrue(mCalled.get()); }
@Test public void postCallback_exceptionIsPostedToListeners() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertEquals("Error!", error.getMessage()); mCalled.set(true); } }); fragment.postCallback(new Exception("Error!")); assertTrue(mCalled.get()); }
@Test public void postCancelCallback_postsRequestCodeToListener() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); final AtomicBoolean wasCalled = new AtomicBoolean(false); fragment.addListener(new BraintreeCancelListener() { @Override public void onCancel(int requestCode) { assertEquals(42, requestCode); wasCalled.set(true); } }); fragment.postCancelCallback(42); assertTrue(wasCalled.get()); }
@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 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 postCallback_postsPaymentMethodNonceToListener() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); final AtomicBoolean wasCalled = new AtomicBoolean(false); fragment.addListener(new PaymentMethodNonceCreatedListener() { @Override public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) { assertTrue(paymentMethodNonce instanceof CardNonce); wasCalled.set(true); } }); fragment.postCallback(new CardNonce()); assertTrue(wasCalled.get()); }
@Test public void addListener_flushesPaymentMethodNonceCreatedCallback() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.postCallback(new CardNonce()); fragment.addListener(new PaymentMethodNonceCreatedListener() { @Override public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) { mCalled.set(true); } }); assertTrue(mCalled.get()); }
@Test public void addListener_flushesErrorWithResponseCallback() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.postCallback(new ErrorWithResponse(422, "")); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertTrue(error instanceof ErrorWithResponse); assertEquals(422, ((ErrorWithResponse) error).getStatusCode()); mCalled.set(true); } }); assertTrue(mCalled.get()); }
@Test public void postCallback_ErrorWithResponseIsPostedToListeners() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertTrue(error instanceof ErrorWithResponse); assertEquals(422, ((ErrorWithResponse) error).getStatusCode()); mCalled.set(true); } }); fragment.postCallback(new ErrorWithResponse(422, "")); assertTrue(mCalled.get()); }
@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>()); }
@Test public void startActivityForResult_postsExceptionWhenNotAttached() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); mActivity.getFragmentManager().beginTransaction().detach(fragment).commit(); mActivity.getFragmentManager().executePendingTransactions(); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertEquals("BraintreeFragment is not attached to an Activity. Please ensure it is attached and try again.", error.getMessage()); mCalled.set(true); } }); fragment.startActivityForResult(new Intent(), 1); assertTrue(mCalled.get()); }
@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(timeout = 2000) public void onActivityResult_postsUnrecoverableErrorsToListeners() throws InterruptedException { BraintreeFragment fragment = getFragmentWithAuthorization(mActivity, new TestClientTokenBuilder().withThreeDSecure().build()); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertEquals("Error!", error.getMessage()); mCountDownLatch.countDown(); } }); ThreeDSecureAuthenticationResponse authResponse = ThreeDSecureAuthenticationResponse.fromException("Error!"); Intent data = new Intent() .putExtra(ThreeDSecureWebViewActivity.EXTRA_THREE_D_SECURE_RESULT, authResponse); ThreeDSecure.onActivityResult(fragment, Activity.RESULT_OK, data); mCountDownLatch.await(); }
@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 removeListener_noErrorCallbacksReceived() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); BraintreeErrorListener listener = new BraintreeErrorListener() { @Override public void onError(Exception error) { fail("Listener was called"); } }; fragment.addListener(listener); fragment.removeListener(listener); fragment.postCallback(new Exception()); fragment.postCallback(new ErrorWithResponse(400, "")); }
@Test public void removeListener_noPaymentMethodNonceCreatedReceived() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); PaymentMethodNonceCreatedListener listener = new PaymentMethodNonceCreatedListener() { @Override public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) { fail("Listener was called"); } }; fragment.addListener(listener); fragment.removeListener(listener); fragment.postCallback(new CardNonce()); }
@Test(timeout = 1000) public void performVerification_withInvalidThreeDSecureRequest_postsException() throws InterruptedException, InvalidArgumentException { String clientToken = new TestClientTokenBuilder().withThreeDSecure().build(); BraintreeFragment fragment = getFragmentWithAuthorization(mActivity, clientToken); fragment.addListener(new BraintreeErrorListener() { @Override public void onError(Exception error) { assertEquals("The ThreeDSecureRequest nonce and amount cannot be null", error.getMessage()); mCountDownLatch.countDown(); } }); ThreeDSecureRequest request = new ThreeDSecureRequest() .amount("5"); ThreeDSecure.performVerification(fragment, request); mCountDownLatch.await(); }
@Test(timeout = 30000) public void performVerification_callsCancelListenerWhenBackIsPressed() throws InterruptedException { CardBuilder cardBuilder = new CardBuilder() .cardNumber(THREE_D_SECURE_VERIFICATON) .expirationDate("12/30"); BraintreeFragment fragment = getFragment(); fragment.addListener(new BraintreeCancelListener() { @Override public void onCancel(int requestCode) { assertEquals(BraintreeRequestCodes.THREE_D_SECURE, requestCode); mCountDownLatch.countDown(); } }); ThreeDSecure.performVerification(fragment, cardBuilder, TEST_AMOUNT); waitForView(withId(android.R.id.widget_frame)); pressBack(); mCountDownLatch.await(); }