public void getGraphQLHttpClient_returnsNullWhenNotEnabled() throws InvalidArgumentException { BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); assertNull(fragment.getGraphQLHttpClient()); }
@Config(sdk = 21) @Test public void deletePaymentMethodNonce_withTokenizationKey_throwsAnError() { BraintreeFragment fragment = new MockFragmentBuilder().build(); PaymentMethod.deletePaymentMethod(fragment, mCardNonce); ArgumentCaptor<Exception> captor = ArgumentCaptor.forClass(Exception.class); verify(fragment).postCallback(captor.capture()); assertTrue(captor.getValue() instanceof BraintreeException); assertEquals("A client token with a customer id must be used to delete a payment method nonce.", captor.getValue().getMessage()); verifyZeroInteractions(fragment.getGraphQLHttpClient()); }
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; } }
@Test public void tokenize_tokenizesCardsWithRestWhenGraphQLIsDisabled() { BraintreeFragment fragment = new MockFragmentBuilder().build(); CardBuilder cardBuilder = new CardBuilder(); TokenizationClient.tokenize(fragment, cardBuilder, null); ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); verifyZeroInteractions(fragment.getGraphQLHttpClient()); verify(fragment.getHttpClient()).post(anyString(), captor.capture(), any(HttpResponseCallback.class)); assertEquals(cardBuilder.build(), captor.getValue()); }
@Config(sdk = 21) @Test public void deletePaymentMethodNonce_postToGraphQL() throws Exception { 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<String> captor = ArgumentCaptor.forClass(String.class); verify(fragment.getGraphQLHttpClient()).post(captor.capture(), any(HttpResponseCallback.class)); JSONObject graphQlRequest = new JSONObject(captor.getValue()); assertEquals(GraphQLQueryHelper.getQuery(RuntimeEnvironment.application, R.raw.delete_payment_method_mutation), graphQlRequest.getString(GraphQLConstants.Keys.QUERY)); JSONObject metadata = graphQlRequest.getJSONObject("clientSdkMetadata"); assertEquals(mCardNonce.getNonce(), graphQlRequest.getJSONObject("variables") .getJSONObject("input").getString("singleUseTokenId")); assertEquals("DeletePaymentMethodFromSingleUseToken", graphQlRequest .getString(GraphQLConstants.Keys.OPERATION_NAME)); assertEquals("test-integration", metadata.getString("integration")); assertEquals("test-session-id", metadata.getString("sessionId")); assertEquals("client", metadata.getString("source")); }
fragment.getGraphQLHttpClient().post(base.toString(), new HttpResponseCallback() { @Override public void success(String responseBody) {
@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()); } }
@Test public void tokenize_withGraphQLEnabledButApiBelowLollipop_tokenizesCardsWithRest() throws BraintreeException { BraintreeFragment fragment = new MockFragmentBuilder() .configuration(new TestConfigurationBuilder() .graphQL() .build()) .build(); CardBuilder cardBuilder = new CardBuilder(); TokenizationClient.tokenize(fragment, cardBuilder, null); ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); verifyZeroInteractions(fragment.getGraphQLHttpClient()); verify(fragment.getHttpClient()).post(anyString(), captor.capture(), any(HttpResponseCallback.class)); assertEquals(cardBuilder.build(), captor.getValue()); }
private static void tokenizeGraphQL(final BraintreeFragment fragment, final CardBuilder cardBuilder, final PaymentMethodNonceCallback callback) { fragment.sendAnalyticsEvent("card.graphql.tokenization.started"); String payload; try { payload = cardBuilder.buildGraphQL(fragment.getApplicationContext(), fragment.getAuthorization()); } catch (BraintreeException e) { callback.failure(e); return; } fragment.getGraphQLHttpClient().post(payload, new HttpResponseCallback() { @Override public void success(String responseBody) { try { callback.success(parsePaymentMethodNonces(responseBody, cardBuilder.getResponsePaymentMethodType())); fragment.sendAnalyticsEvent("card.graphql.tokenization.success"); } catch (JSONException e) { callback.failure(e); } } @Override public void failure(Exception exception) { fragment.sendAnalyticsEvent("card.graphql.tokenization.failure"); callback.failure(exception); } }); }
@Config(sdk = 21) @Test public void tokenize_tokenizesCardsWithGraphQLWhenEnabled() throws BraintreeException { BraintreeFragment fragment = new MockFragmentBuilder() .configuration(new TestConfigurationBuilder() .graphQL() .build()) .build(); CardBuilder cardBuilder = new CardBuilder(); TokenizationClient.tokenize(fragment, cardBuilder, null); ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); verifyZeroInteractions(fragment.getHttpClient()); verify(fragment.getGraphQLHttpClient()).post(captor.capture(), any(HttpResponseCallback.class)); assertEquals(cardBuilder.buildGraphQL(fragment.getApplicationContext(), fragment.getAuthorization()), captor.getValue()); }
@Test public void getGraphQLHttpClient_returnsGraphQLHttpClientWhenEnabled() throws InvalidArgumentException { Configuration configuration = new TestConfigurationBuilder() .graphQL() .buildConfiguration(); mockConfigurationManager(configuration); BraintreeFragment fragment = BraintreeFragment.newInstance(mActivity, TOKENIZATION_KEY); assertNotNull(fragment.getGraphQLHttpClient()); }
@Test public void tokenize_tokenizesNonCardPaymentMethodsWithRestWhenGraphQLIsEnabled() { BraintreeFragment fragment = new MockFragmentBuilder() .configuration(new TestConfigurationBuilder() .graphQL() .build()) .build(); TokenizationClient.tokenize(fragment, new PayPalAccountBuilder(), null); TokenizationClient.tokenize(fragment, new UnionPayCardBuilder(), null); TokenizationClient.tokenize(fragment, new VenmoAccountBuilder(), null); verifyZeroInteractions(fragment.getGraphQLHttpClient()); }