Skip to content

Commit 5282088

Browse files
authored
[Woo POS] Show cash payment button for more card payment states (#15160)
2 parents e4a3275 + 00ed1d5 commit 5282088

File tree

5 files changed

+44
-18
lines changed

5 files changed

+44
-18
lines changed

Experiments/Experiments/DefaultFeatureFlagService.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,6 @@ public struct DefaultFeatureFlagService: FeatureFlagService {
8989
return true
9090
case .sendReceiptsForPointOfSale:
9191
return true
92-
case .acceptCashForPointOfSale:
93-
return true
9492
case .hideSitesInStorePicker:
9593
return true
9694
case .filterHistoryOnOrderAndProductLists:

Experiments/Experiments/FeatureFlag.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,6 @@ public enum FeatureFlag: Int {
193193
///
194194
case sendReceiptsForPointOfSale
195195

196-
/// Adds support for accepting cash as payment for POS
197-
///
198-
case acceptCashForPointOfSale
199-
200196
/// Supports hiding sites from the store picker
201197
///
202198
case hideSitesInStorePicker

WooCommerce/Classes/POS/Presentation/Card Present Payments/Reader Messages/PointOfSaleCardPresentPaymentDisconnectedMessageViewModel.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import Foundation
22

33
struct PointOfSaleCardPresentPaymentReaderDisconnectedMessageViewModel {
4-
let isPOSCashEnabled = ServiceLocator.featureFlagService.isFeatureFlagEnabled(.acceptCashForPointOfSale)
5-
64
let title = Localization.title
75
let connectReaderButtonTitle = Localization.collectPayment
86
var instruction: String {
9-
isPOSCashEnabled ? Localization.instruction : Localization.cardOnlyInstruction
7+
Localization.instruction
108
}
119
}
1210

@@ -18,12 +16,6 @@ private extension PointOfSaleCardPresentPaymentReaderDisconnectedMessageViewMode
1816
comment: "Error message. Presented to users when card reader is not connected on the Point of Sale Checkout"
1917
)
2018

21-
static let cardOnlyInstruction = NSLocalizedString(
22-
"pointOfSale.cardPresent.readerNotConnected.instruction",
23-
value: "To process this payment, please connect your reader.",
24-
comment: "Instruction to merchants shown on the Point of Sale Checkout, so they can take a card payment."
25-
)
26-
2719
static let instruction = NSLocalizedString(
2820
"pointOfSale.cardPresent.readerNotConnectedOrCash.instruction",
2921
value: "To process this payment, please connect your reader or choose cash.",

WooCommerce/Classes/POS/ViewHelpers/TotalsViewHelper.swift

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,20 @@ final class TotalsViewHelper {
4242

4343
func shouldShowCollectCashPaymentButton(orderState: PointOfSaleOrderState,
4444
paymentState: PointOfSalePaymentState) -> Bool {
45-
ServiceLocator.featureFlagService.isFeatureFlagEnabled(.acceptCashForPointOfSale) &&
46-
orderState != .syncing &&
47-
(paymentState == .card(.idle) || paymentState == .card(.acceptingCard) || paymentState == .card(.validatingOrderError))
45+
guard orderState != .syncing,
46+
case .card(let cardState) = paymentState else {
47+
return false
48+
}
49+
50+
switch cardState {
51+
case .idle,
52+
.validatingOrder,
53+
.validatingOrderError,
54+
.preparingReader,
55+
.acceptingCard:
56+
return true
57+
default:
58+
return false
59+
}
4860
}
4961
}

WooCommerce/WooCommerceTests/POS/ViewHelpers/TotalsViewHelperTests.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,32 @@ struct TotalsViewHelperTests {
4646
paymentState: paymentState) == false)
4747
}
4848

49+
@Test(arguments: [
50+
(PointOfSaleOrderState.idle, PointOfSalePaymentState.card(.idle)),
51+
(PointOfSaleOrderState.idle, PointOfSalePaymentState.card(.validatingOrder)),
52+
(PointOfSaleOrderState.idle, PointOfSalePaymentState.card(.validatingOrderError)),
53+
(PointOfSaleOrderState.idle, PointOfSalePaymentState.card(.preparingReader)),
54+
(PointOfSaleOrderState.idle, PointOfSalePaymentState.card(.acceptingCard))
55+
])
56+
func test_shouldShowCollectCashPaymentButton_returns_true_for_supported_states(
57+
orderState: PointOfSaleOrderState,
58+
paymentState: PointOfSalePaymentState) {
59+
#expect(TotalsViewHelper().shouldShowCollectCashPaymentButton(orderState: orderState,
60+
paymentState: paymentState))
61+
}
62+
63+
64+
@Test(arguments: [
65+
(PointOfSaleOrderState.syncing, PointOfSalePaymentState.card(.idle)),
66+
(PointOfSaleOrderState.syncing, PointOfSalePaymentState.card(.validatingOrder)),
67+
(PointOfSaleOrderState.syncing, PointOfSalePaymentState.card(.validatingOrderError)),
68+
(PointOfSaleOrderState.syncing, PointOfSalePaymentState.card(.preparingReader)),
69+
(PointOfSaleOrderState.syncing, PointOfSalePaymentState.card(.acceptingCard))
70+
])
71+
func test_shouldShowCollectCashPaymentButton_returns_false_when_order_syncing(
72+
orderState: PointOfSaleOrderState,
73+
paymentState: PointOfSalePaymentState) {
74+
#expect(TotalsViewHelper().shouldShowCollectCashPaymentButton(orderState: orderState,
75+
paymentState: paymentState) == false)
76+
}
4977
}

0 commit comments

Comments
 (0)