Skip to content

Commit 1420231

Browse files
Merge pull request #14828 from woocommerce/issue/WOOMOB-1554-CIAB-hide-card-reader
[CIAB] Hide Card Reader and TTP options
2 parents 917cc7c + e0fdd12 commit 1420231

File tree

11 files changed

+112
-37
lines changed

11 files changed

+112
-37
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ciab/CIABAffectedFeature.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.woocommerce.android.ciab
22

33
enum class CIABAffectedFeature {
44
Blaze,
5-
Payments,
5+
WooPayments,
66
WooShippingSplitShipments,
77
GroupedProducts,
88
VariableProducts,

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/moremenu/MoreMenuViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ class MoreMenuViewModel @Inject constructor(
452452
doCheckAvailability(MoreMenuItemButton.Type.Inbox) { moreMenuRepository.isInboxEnabled() },
453453
doCheckAvailability(MoreMenuItemButton.Type.Settings) { moreMenuRepository.isUpgradesEnabled() },
454454
doCheckAvailability(MoreMenuItemButton.Type.Payments) {
455-
ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.Payments)
455+
ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.WooPayments)
456456
}
457457
).merge()
458458
.map { update ->

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentCollectibilityChecker.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.woocommerce.android.ui.payments.cardreader.payment
22

3+
import com.woocommerce.android.ciab.CIABAffectedFeature
4+
import com.woocommerce.android.ciab.CIABSiteGateKeeper
35
import com.woocommerce.android.extensions.CASH_ON_DELIVERY_PAYMENT_TYPE
46
import com.woocommerce.android.extensions.STRIPE_PAYMENTS_PAYMENT_TYPE
57
import com.woocommerce.android.extensions.WOOCOMMERCE_BOOKINGS_PAYMENT_TYPE
@@ -17,17 +19,19 @@ import javax.inject.Inject
1719
class CardReaderPaymentCollectibilityChecker @Inject constructor(
1820
private val orderDetailRepository: OrderDetailRepository,
1921
private val cardReaderPaymentCurrencySupportedChecker: CardReaderPaymentCurrencySupportedChecker,
22+
private val ciabSiteGateKeeper: CIABSiteGateKeeper
2023
) {
2124
suspend fun isCollectable(order: Order): Boolean {
22-
return with(order) {
23-
cardReaderPaymentCurrencySupportedChecker.isCurrencySupported(currency) &&
24-
isStatusCollectable() &&
25-
!isOrderPaid &&
26-
order.total.compareTo(BigDecimal.ZERO) == 1 &&
27-
BigDecimal.ZERO.compareTo(order.refundTotal) == 0 &&
28-
isPaymentMethodCollectable() &&
29-
!orderDetailRepository.hasSubscriptionProducts(order.getProductIds())
30-
}
25+
return ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.WooPayments) &&
26+
with(order) {
27+
cardReaderPaymentCurrencySupportedChecker.isCurrencySupported(currency) &&
28+
isStatusCollectable() &&
29+
!isOrderPaid &&
30+
order.total.compareTo(BigDecimal.ZERO) == 1 &&
31+
BigDecimal.ZERO.compareTo(order.refundTotal) == 0 &&
32+
isPaymentMethodCollectable() &&
33+
!orderDetailRepository.hasSubscriptionProducts(order.getProductIds())
34+
}
3135
}
3236

3337
private fun Order.isPaymentMethodCollectable() =

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class SelectPaymentMethodFragment : BaseFragment(R.layout.fragment_select_paymen
126126
with(binding.learnMoreIppPaymentMethodsTv) {
127127
learnMore.setOnClickListener { state.learnMoreIpp.onClick.invoke() }
128128
UiHelpers.setTextOrHide(binding.learnMoreIppPaymentMethodsTv.learnMore, state.learnMoreIpp.label)
129+
learnMore.isVisible = state.learnMoreIpp.isVisible
129130
}
130131
}
131132

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodViewModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_SIMPLE
1111
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_SIMPLE_PAYMENTS_COLLECT_CASH
1212
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_SIMPLE_PAYMENTS_COLLECT_LINK
1313
import com.woocommerce.android.cardreader.internal.payments.PaymentUtils
14+
import com.woocommerce.android.ciab.CIABAffectedFeature
15+
import com.woocommerce.android.ciab.CIABSiteGateKeeper
1416
import com.woocommerce.android.extensions.CASH_ON_DELIVERY_PAYMENT_TYPE
1517
import com.woocommerce.android.extensions.isNotNullOrEmpty
1618
import com.woocommerce.android.model.Order
@@ -78,6 +80,7 @@ class SelectPaymentMethodViewModel @Inject constructor(
7880
private val cardReaderTrackingInfoKeeper: CardReaderTrackingInfoKeeper,
7981
private val paymentsUtils: PaymentUtils,
8082
private val logOrderCurrencyMismatchWithSiteSettings: SelectPaymentMethodCurrencyMissMatchLog,
83+
private val ciabSiteGateKeeper: CIABSiteGateKeeper
8184
) : ScopedViewModel(savedState) {
8285
private val navArgs: SelectPaymentMethodFragmentArgs by savedState.navArgs()
8386

@@ -173,7 +176,8 @@ class SelectPaymentMethodViewModel @Inject constructor(
173176
R.string.card_reader_connect_learn_more,
174177
containsHtml = true
175178
),
176-
onClick = ::onLearnMoreIppClicked
179+
onClick = ::onLearnMoreIppClicked,
180+
isVisible = ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.WooPayments)
177181
)
178182
)
179183
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodViewState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ sealed class SelectPaymentMethodViewState {
3030

3131
data class LearnMoreIpp(
3232
val label: UiString,
33+
val isVisible: Boolean,
3334
val onClick: () -> Unit,
3435
)
3536
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/taptopay/TapToPayAvailabilityStatus.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.woocommerce.android.ui.payments.taptopay
33
import com.woocommerce.android.cardreader.config.CardReaderConfigForSupportedCountry
44
import com.woocommerce.android.cardreader.config.CardReaderConfigForUnsupportedCountry
55
import com.woocommerce.android.cardreader.connection.ReaderType
6+
import com.woocommerce.android.ciab.CIABAffectedFeature
7+
import com.woocommerce.android.ciab.CIABSiteGateKeeper
68
import com.woocommerce.android.tools.SelectedSite
79
import com.woocommerce.android.ui.payments.cardreader.CardReaderCountryConfigProvider
810
import com.woocommerce.android.util.DeviceFeatures
@@ -16,9 +18,11 @@ class TapToPayAvailabilityStatus @Inject constructor(
1618
private val systemVersionUtilsWrapper: SystemVersionUtilsWrapper,
1719
private val cardReaderCountryConfigProvider: CardReaderCountryConfigProvider,
1820
private val wooStore: WooCommerceStore,
21+
private val ciabSiteGateKeeper: CIABSiteGateKeeper
1922
) {
2023
operator fun invoke() =
2124
when {
25+
ciabSiteGateKeeper.isFeatureUnsupported(CIABAffectedFeature.WooPayments) -> Result.Hidden
2226
!systemVersionUtilsWrapper.isAtLeastR() -> Result.NotAvailable.SystemVersionNotSupported
2327
!deviceFeatures.isGooglePlayServicesAvailable() -> Result.NotAvailable.GooglePlayServicesNotAvailable
2428
!deviceFeatures.isNFCAvailable() -> Result.NotAvailable.NfcNotAvailable
@@ -38,6 +42,7 @@ class TapToPayAvailabilityStatus @Inject constructor(
3842

3943
sealed class Result {
4044
object Available : Result()
45+
object Hidden : Result()
4146
sealed class NotAvailable : Result() {
4247
object SystemVersionNotSupported : NotAvailable()
4348
object GooglePlayServicesNotAvailable : NotAvailable()

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/moremenu/MoreMenuViewModelTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ class MoreMenuViewModelTests : BaseUnitTest() {
458458
fun `given CIAB reports payments disabled, when building state, then payments button is hidden`() = testBlocking {
459459
// GIVEN
460460
setup {
461-
whenever(ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.Payments))
461+
whenever(ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.WooPayments))
462462
.thenReturn(false)
463463
}
464464

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/SelectPaymentMethodViewModelTest.kt

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.woocommerce.android.ui.payments
33
import com.woocommerce.android.AppUrls
44
import com.woocommerce.android.R
55
import com.woocommerce.android.cardreader.internal.payments.PaymentUtils
6+
import com.woocommerce.android.ciab.CIABAffectedFeature
7+
import com.woocommerce.android.ciab.CIABSiteGateKeeper
68
import com.woocommerce.android.extensions.CASH_ON_DELIVERY_PAYMENT_TYPE
79
import com.woocommerce.android.model.Order
810
import com.woocommerce.android.model.OrderMapper
@@ -45,6 +47,7 @@ import kotlinx.coroutines.test.runTest
4547
import org.assertj.core.api.Assertions.assertThat
4648
import org.junit.Test
4749
import org.mockito.kotlin.any
50+
import org.mockito.kotlin.doReturn
4851
import org.mockito.kotlin.eq
4952
import org.mockito.kotlin.mock
5053
import org.mockito.kotlin.never
@@ -113,6 +116,9 @@ class SelectPaymentMethodViewModelTest : BaseUnitTest() {
113116
private val paymentsUtils: PaymentUtils = mock()
114117
private val cardReaderTrackingInfoKeeper: CardReaderTrackingInfoKeeper = mock()
115118
private val logOrderCurrencyMismatchWithSiteSettings = mock<SelectPaymentMethodCurrencyMissMatchLog>()
119+
private val ciabSiteGateKeeper: CIABSiteGateKeeper = mock {
120+
on { isFeatureSupported(CIABAffectedFeature.WooPayments) } doReturn true
121+
}
116122

117123
@Test
118124
fun `given hub flow, when view model init, then navigate to hub flow emitted`() = testBlocking {
@@ -1190,24 +1196,41 @@ class SelectPaymentMethodViewModelTest : BaseUnitTest() {
11901196
)
11911197
}
11921198

1199+
@Test
1200+
fun `given WooPayments unsupported by CIAB, when view model initialized, then hide IPP learn more link`() =
1201+
testBlocking {
1202+
// GIVEN
1203+
whenever(ciabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.WooPayments)).thenReturn(false)
1204+
1205+
// WHEN
1206+
val viewModel = initViewModel(Payment(1L, ORDER))
1207+
1208+
// THEN
1209+
val state = (viewModel.viewStateData.value as Success).learnMoreIpp
1210+
assertThat(state.isVisible).isFalse()
1211+
}
1212+
11931213
private fun initViewModel(cardReaderFlowParam: CardReaderFlowParam): SelectPaymentMethodViewModel {
11941214
return SelectPaymentMethodViewModel(
1195-
SelectPaymentMethodFragmentArgs(cardReaderFlowParam = cardReaderFlowParam).toSavedStateHandle(),
1196-
selectedSite,
1197-
orderStore,
1198-
gatewayStore,
1199-
coroutinesTestRule.testDispatchers,
1200-
networkStatus,
1201-
currencyFormatter,
1202-
wooCommerceStore,
1203-
orderMapper,
1204-
cardPaymentCollectibilityChecker,
1205-
learnMoreUrlProvider,
1206-
paymentsFlowTracker,
1207-
tapToPayAvailabilityStatus,
1208-
cardReaderTrackingInfoKeeper,
1209-
paymentsUtils,
1210-
logOrderCurrencyMismatchWithSiteSettings,
1215+
savedState = SelectPaymentMethodFragmentArgs(
1216+
cardReaderFlowParam = cardReaderFlowParam
1217+
).toSavedStateHandle(),
1218+
selectedSite = selectedSite,
1219+
orderStore = orderStore,
1220+
gatewayStore = gatewayStore,
1221+
dispatchers = coroutinesTestRule.testDispatchers,
1222+
networkStatus = networkStatus,
1223+
currencyFormatter = currencyFormatter,
1224+
wooCommerceStore = wooCommerceStore,
1225+
orderMapper = orderMapper,
1226+
cardPaymentCollectibilityChecker = cardPaymentCollectibilityChecker,
1227+
learnMoreUrlProvider = learnMoreUrlProvider,
1228+
paymentsFlowTracker = paymentsFlowTracker,
1229+
tapToPayAvailabilityStatus = tapToPayAvailabilityStatus,
1230+
cardReaderTrackingInfoKeeper = cardReaderTrackingInfoKeeper,
1231+
paymentsUtils = paymentsUtils,
1232+
logOrderCurrencyMismatchWithSiteSettings = logOrderCurrencyMismatchWithSiteSettings,
1233+
ciabSiteGateKeeper = ciabSiteGateKeeper
12111234
)
12121235
}
12131236

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/CardReaderPaymentCollectibilityCheckerTest.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.woocommerce.android.ui.payments.cardreader
22

3+
import com.woocommerce.android.ciab.CIABAffectedFeature
4+
import com.woocommerce.android.ciab.CIABSiteGateKeeper
35
import com.woocommerce.android.model.Order
46
import com.woocommerce.android.ui.orders.OrderTestUtils
57
import com.woocommerce.android.ui.orders.details.OrderDetailRepository
@@ -22,9 +24,13 @@ import java.util.Date
2224
class CardReaderPaymentCollectibilityCheckerTest : BaseUnitTest() {
2325
private val repository: OrderDetailRepository = mock()
2426
private val cardReaderPaymentCurrencySupportedChecker: CardReaderPaymentCurrencySupportedChecker = mock()
27+
private val testCiabSiteGateKeeper: CIABSiteGateKeeper = mock {
28+
on { isFeatureSupported(CIABAffectedFeature.WooPayments) } doReturn true
29+
}
2530
private val checker: CardReaderPaymentCollectibilityChecker = CardReaderPaymentCollectibilityChecker(
26-
repository,
27-
cardReaderPaymentCurrencySupportedChecker,
31+
orderDetailRepository = repository,
32+
cardReaderPaymentCurrencySupportedChecker = cardReaderPaymentCurrencySupportedChecker,
33+
ciabSiteGateKeeper = testCiabSiteGateKeeper
2834
)
2935

3036
private val generatedOrder = OrderTestUtils.generateTestOrder()
@@ -344,6 +350,20 @@ class CardReaderPaymentCollectibilityCheckerTest : BaseUnitTest() {
344350
assertThat(isCollectable).isTrue()
345351
}
346352

353+
@Test
354+
fun `given WooPayments is not supported by CIAB, when check order is collectable, then returns false`() =
355+
testBlocking {
356+
// GIVEN
357+
whenever(testCiabSiteGateKeeper.isFeatureSupported(CIABAffectedFeature.WooPayments)) doReturn false
358+
val order = getOrder()
359+
360+
// WHEN
361+
val isCollectable = checker.isCollectable(order)
362+
363+
// THEN
364+
assertThat(isCollectable).isFalse()
365+
}
366+
347367
private fun getOrder(
348368
total: BigDecimal = BigDecimal.ONE,
349369
currency: String = "USD",

0 commit comments

Comments
 (0)