Skip to content

Commit

Permalink
Make PaymentMethodClient Methods Public (#433)
Browse files Browse the repository at this point in the history
* Make PaymentMethodClient methods public

* Add CHANGELOG

* Fix integration tests
  • Loading branch information
sarahkoop committed Aug 23, 2023
1 parent f756ce6 commit a75d304
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 22 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## unreleased

* Add `PaymentMethodClient` with API `getPaymentMethodNonces` and `deletePaymentMethod`
* Bump braintree_android module dependency versions to `4.37.0`

## 6.11.1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,23 @@ import com.braintreepayments.cardform.utils.CardType
import junit.framework.TestCase.assertNull
import org.hamcrest.CoreMatchers.not
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class AddCardFragmentUITest {

private val args: Bundle = Bundle()

@Before
fun setup() {
args.putParcelable("EXTRA_DROP_IN_REQUEST", DropInRequest())
}

@Test
fun whenStateIsRESUMED_buttonTextIsAddCard() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -39,15 +47,15 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_cardNumberFieldIsFocused() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

onView(withId(R.id.bt_card_form_card_number)).check(matches(isFocused()))
}

@Test
fun whenStateIsRESUMED_andNonCardNumberError_doesNotShowError() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -61,7 +69,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_sendsAnalyticsEvent() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -77,7 +85,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_onSubmitButtonClick_whenCardFormValid_showsLoader() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -93,7 +101,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_onSubmitButtonClick_whenCardFormNotValid_showsSubmitButton() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -109,7 +117,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_onSubmitButtonClick_whenCardTypeNotSupported_showsSubmitButton() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -125,7 +133,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_onSubmitButtonClickWithValidCardNumber_sendsAddCardEvent() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -149,7 +157,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_whenCardNumberValidationErrorsArePresentInViewModel_displaysErrorsInlineToUser() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -164,7 +172,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_whenCardNumberIsDuplicate_displaysErrorsInlineToUser() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -179,7 +187,7 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_whenCardFromInvalid_showsSubmitButton() {
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, null, R.style.bt_drop_in_activity_theme)
val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
scenario.moveToState(Lifecycle.State.RESUMED)

scenario.onFragment { fragment ->
Expand All @@ -196,7 +204,6 @@ class AddCardFragmentUITest {
val dropInRequest = DropInRequest()
dropInRequest.setCardLogosDisabled(true);

val args = Bundle()
args.putParcelable("EXTRA_DROP_IN_REQUEST", dropInRequest)
args.putString("EXTRA_CARD_NUMBER", VISA)

Expand All @@ -212,10 +219,6 @@ class AddCardFragmentUITest {

@Test
fun whenStateIsRESUMED_andCardLogosEnabled_supportedCardTypesViewIsVISIBLE() {
val dropInRequest = DropInRequest()

val args = Bundle()
args.putParcelable("EXTRA_DROP_IN_REQUEST", dropInRequest)
args.putString("EXTRA_CARD_NUMBER", VISA)

val scenario = FragmentScenario.launchInContainer(AddCardFragment::class.java, args, R.style.bt_drop_in_activity_theme)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
/**
* Callback for receiving result of {@link PaymentMethodClient#deletePaymentMethod(Context, PaymentMethodNonce, DeletePaymentMethodNonceCallback)}.
*/
interface DeletePaymentMethodNonceCallback {
public interface DeletePaymentMethodNonceCallback {

/**
* @param deletedNonce {@link PaymentMethodNonce}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
* {@link PaymentMethodClient#getPaymentMethodNonces(GetPaymentMethodNoncesCallback)} and
* {@link PaymentMethodClient#getPaymentMethodNonces(boolean, GetPaymentMethodNoncesCallback)}.
*/
interface GetPaymentMethodNoncesCallback {
public interface GetPaymentMethodNoncesCallback {

/**
* @param paymentMethodNonceList {@link PaymentMethodNonce} list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
/**
* Class used to retrieve a customer's payment methods.
*/
class PaymentMethodClient {
public class PaymentMethodClient {

private static final String PAYMENT_METHOD_NONCE_COLLECTION_KEY = "paymentMethods";
private static final String PAYMENT_METHOD_TYPE_KEY = "type";
Expand All @@ -33,7 +33,12 @@ class PaymentMethodClient {

private final BraintreeClient braintreeClient;

PaymentMethodClient(BraintreeClient braintreeClient) {
/**
* Creates a new instance of {@link PaymentMethodClient}
*
* @param braintreeClient a {@link BraintreeClient}
*/
public PaymentMethodClient(BraintreeClient braintreeClient) {
this.braintreeClient = braintreeClient;
}

Expand Down Expand Up @@ -68,7 +73,14 @@ private static PaymentMethodNonce parseVaultSupportedPaymentMethodNonce(JSONObje
}
}

void getPaymentMethodNonces(boolean defaultFirst, final GetPaymentMethodNoncesCallback callback) {
/**
* Retrieves the current list of {@link PaymentMethodNonce} for the current user.
*
* @param defaultFirst when {@code true}, the user's default payment method will be first in the
* list
* @param callback a {@link GetPaymentMethodNoncesCallback} to handle results
*/
public void getPaymentMethodNonces(boolean defaultFirst, final GetPaymentMethodNoncesCallback callback) {
final Uri uri = Uri.parse(ApiClient.versionedPath(ApiClient.PAYMENT_METHOD_ENDPOINT))
.buildUpon()
.appendQueryParameter("default_first", String.valueOf(defaultFirst))
Expand All @@ -95,7 +107,16 @@ void getPaymentMethodNonces(GetPaymentMethodNoncesCallback callback) {
getPaymentMethodNonces(false, callback);
}

void deletePaymentMethod(final Context context, final PaymentMethodNonce paymentMethodNonce, final DeletePaymentMethodNonceCallback callback) {
/**
* Deletes a payment method for the user whose ID was used to generate the {@link ClientToken}
* used to instantiate the {@link BraintreeClient}.
*
* @param context an Android {@link Context}
* @param paymentMethodNonce the {@link PaymentMethodNonce} that references a vaulted payment
* method to be deleted.
* @param callback a {@link DeletePaymentMethodNonceCallback} to handle results
*/
public void deletePaymentMethod(final Context context, final PaymentMethodNonce paymentMethodNonce, final DeletePaymentMethodNonceCallback callback) {
braintreeClient.getAuthorization(new AuthorizationCallback() {
@Override
public void onAuthorizationResult(@Nullable Authorization authorization, @Nullable Exception error) {
Expand Down

0 comments on commit a75d304

Please sign in to comment.