@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()); }
@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")); }
@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()); } }
@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)); }
@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"); }