CheckoutPresenter extends BasePresenter<Checkout.View> implements Checkout.Actions { @Override public void onCardFlowCancel() { initRepository.init().enqueue(new Callback<InitResponse>() { @Override public void success(final InitResponse initResponse) { new DefaultPaymentMethodDriver(initResponse, paymentSettingRepository.getCheckoutPreference().getPaymentPreference()).drive( new DefaultPaymentMethodDriver.PaymentMethodDriverCallback() { @Override public void driveToCardVault(@NonNull final Card card) { cancelCheckout(); } @Override public void driveToNewCardFlow(final String defaultPaymentTypeId) { cancelCheckout(); } @Override public void doNothing() { state.paymentMethodEdited = true; getView().showPaymentMethodSelection(); } }); } @Override public void failure(final ApiException apiException) { state.paymentMethodEdited = true; getView().showPaymentMethodSelection(); } }); } CheckoutPresenter(@NonNull final CheckoutStateModel persistentData,
        @NonNull final PaymentSettingRepository paymentSettingRepository,
        @NonNull final UserSelectionRepository userSelectionRepository,
        @NonNull final InitRepository initRepository,
        @NonNull final PluginRepository pluginRepository,
        @NonNull final PaymentRepository paymentRepository,
        @NonNull final CongratsRepository congratsRepository,
        @NonNull final InternalConfiguration internalConfiguration); @NonNull CheckoutStateModel getState(); @Override void initialize(); @Override void onErrorCancel(@Nullable final MercadoPagoError mercadoPagoError); @Override void onPaymentMethodSelectionError(final MercadoPagoError mercadoPagoError); @Override void onPaymentMethodSelectionCancel(); @Override void onReviewAndConfirmCancel(); @Override void onReviewAndConfirmError(final MercadoPagoError mercadoPagoError); @Override void onCardFlowResponse(); @Override void onTerminalError(@NonNull final MercadoPagoError mercadoPagoError); @Override void onCardFlowCancel(); @Override void onCustomReviewAndConfirmResponse(final Integer customResultCode); @Override void recoverFromFailure(); @Override void setFailureRecovery(final FailureRecovery failureRecovery); @Override void onPaymentResultResponse(@Nullable final Integer customResultCode); @Override void cancelCheckout(); @Override boolean isUniquePaymentMethod(); @Override void onChangePaymentMethod(); @Override void onCardAdded(@NonNull final String cardId, @NonNull final LifecycleListener.Callback callback);  }
@Test public void whenCardFlowCanceledAndThereIsInValidCardThenShowPaymentMethodSelection() { final InitResponse paymentMethodSearch = mockPaymentMethodSearchForDriver(false); when(initRepository.init()).thenReturn(new StubSuccessMpCall<>(paymentMethodSearch)); presenter.onCardFlowCancel(); verify(checkoutView).showPaymentMethodSelection(); verifyNoMoreInteractions(checkoutView); }
@Test public void whenCardFlowCanceledAndPaymentMethodSearchFailsThenShowPaymentMethodSelection() { final ApiException apiException = mock(ApiException.class); when(initRepository.init()).thenReturn(new StubFailMpCall<>(apiException)); presenter.onCardFlowCancel(); verify(checkoutView).showPaymentMethodSelection(); verifyNoMoreInteractions(checkoutView); }