Skip to content

Commit 922b380

Browse files
authored
Merge pull request #5819 from woocommerce/issue/payment-link-bits
2 parents 5c909ec + b3d09c3 commit 922b380

File tree

7 files changed

+42
-21
lines changed

7 files changed

+42
-21
lines changed

Experiments/Experiments/DefaultFeatureFlagService.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ public struct DefaultFeatureFlagService: FeatureFlagService {
3737
return buildConfig == .localDeveloper || buildConfig == .alpha
3838
case .couponManagement:
3939
return buildConfig == .localDeveloper || buildConfig == .alpha
40-
case .simplePaymentsLink:
41-
return buildConfig == .localDeveloper || buildConfig == .alpha
4240
case .productSKUInputScanner:
4341
return true
4442
default:

Experiments/Experiments/FeatureFlag.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,6 @@ public enum FeatureFlag: Int {
7070
///
7171
case myStoreTabUpdates
7272

73-
/// Allow merchants to share a payment link when creating a simple payments order.
74-
///
75-
case simplePaymentsLink
76-
7773
/// Displays the option to manage coupons
7874
///
7975
case couponManagement

RELEASE-NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- [***] All merchants can create Simple Payments orders. [https://github.com/woocommerce/woocommerce-ios/pull/5684]
66
- [**] System status report can now be viewed and copied directly from within the app. [https://github.com/woocommerce/woocommerce-ios/pull/5702]
77
- [**] Product SKU input scanner is now available as a beta feature. To try it, enable it from settings and you can scan a barcode to use as the product SKU in product inventory settings! [https://github.com/woocommerce/woocommerce-ios/pull/5695]
8+
- [**] Now you chan share a payment link when creating a Simple Payments order [https://github.com/woocommerce/woocommerce-ios/pull/5819]
89

910
8.2
1011
-----

WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ extension WooAnalyticsEvent {
382382
enum PaymentMethod: String {
383383
case card
384384
case cash
385+
case paymentLink = "payment_link"
385386
}
386387

387388
/// Possible view sources

WooCommerce/Classes/ViewRelated/Orders/Simple Payments/Method/SimplePaymentsMethod.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ struct SimplePaymentsMethod: View {
5858

5959
MethodRow(icon: .linkImage, title: Localization.link) {
6060
sharingPaymentLink = true
61-
// TODO: Analytics
61+
viewModel.trackCollectByPaymentLink()
6262
}
6363
}
6464
}
@@ -161,7 +161,7 @@ private extension SimplePaymentsMethod {
161161
static let header = NSLocalizedString("Choose your payment method", comment: "Heading text on the select payment method screen for simple payments")
162162
static let cash = NSLocalizedString("Cash", comment: "Cash method title on the select payment method screen for simple payments")
163163
static let card = NSLocalizedString("Card", comment: "Card method title on the select payment method screen for simple payments")
164-
static let link = NSLocalizedString("Payment Link", comment: "Payment Link method title on the select payment method screen for simple payments")
164+
static let link = NSLocalizedString("Share Payment Link", comment: "Payment Link method title on the select payment method screen for simple payments")
165165
static let markAsPaidTitle = NSLocalizedString("Mark as Paid?", comment: "Alert title when selecting the cash payment method for simple payments")
166166
static let markAsPaidButton = NSLocalizedString("Mark as Paid", comment: "Alert button when selecting the cash payment method for simple payments")
167167
}

WooCommerce/Classes/ViewRelated/Orders/Simple Payments/Method/SimplePaymentsMethodsViewModel.swift

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ final class SimplePaymentsMethodsViewModel: ObservableObject {
3737
/// Defines if the view should show a payment link payment method.
3838
///
3939
var showPaymentLinkRow: Bool {
40-
enablePaymentLink && paymentLink != nil
40+
paymentLink != nil
4141
}
4242

4343
/// Store's ID.
@@ -72,10 +72,6 @@ final class SimplePaymentsMethodsViewModel: ObservableObject {
7272
///
7373
private let analytics: Analytics
7474

75-
/// Defines if sharing a payment link should be enabled or not.
76-
///
77-
private let enablePaymentLink: Bool
78-
7975
/// Stored payment gateways accounts.
8076
/// We will care about the first one because only one is supported right now.
8177
///
@@ -109,8 +105,7 @@ final class SimplePaymentsMethodsViewModel: ObservableObject {
109105
cppStoreStateObserver: CardPresentPaymentsOnboardingUseCaseProtocol = CardPresentPaymentsOnboardingUseCase(),
110106
stores: StoresManager = ServiceLocator.stores,
111107
storage: StorageManagerType = ServiceLocator.storageManager,
112-
analytics: Analytics = ServiceLocator.analytics,
113-
enablePaymentLink: Bool = ServiceLocator.featureFlagService.isFeatureFlagEnabled(FeatureFlag.simplePaymentsLink)) {
108+
analytics: Analytics = ServiceLocator.analytics) {
114109
self.siteID = siteID
115110
self.orderID = orderID
116111
self.formattedTotal = formattedTotal
@@ -119,7 +114,6 @@ final class SimplePaymentsMethodsViewModel: ObservableObject {
119114
self.stores = stores
120115
self.storage = storage
121116
self.analytics = analytics
122-
self.enablePaymentLink = enablePaymentLink
123117
self.title = Localization.title(total: formattedTotal)
124118

125119
bindStoreCPPState()
@@ -203,11 +197,15 @@ final class SimplePaymentsMethodsViewModel: ObservableObject {
203197
trackCollectIntention(method: .cash)
204198
}
205199

200+
func trackCollectByPaymentLink() {
201+
trackCollectIntention(method: .paymentLink)
202+
}
203+
206204
/// Perform the necesary tasks after a link is shared.
207205
///
208206
func performLinkSharedTasks() {
209-
self.presentNoticeSubject.send(.created)
210-
// TODO: Analytics
207+
presentNoticeSubject.send(.created)
208+
trackFlowCompleted(method: .paymentLink)
211209
}
212210
}
213211

WooCommerce/WooCommerceTests/ViewRelated/Orders/Simple Payments/SimplePaymentsMethodsViewModelTests.swift

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,20 @@ final class SimplePaymentsMethodsViewModelTests: XCTestCase {
177177
assertEqual(analytics.receivedProperties.first?["amount"] as? String, "$12.00")
178178
}
179179

180+
func test_completed_event_is_tracked_after_sharing_a_link() {
181+
// Given
182+
let analytics = MockAnalyticsProvider()
183+
let viewModel = SimplePaymentsMethodsViewModel(formattedTotal: "$12.00", analytics: WooAnalytics(analyticsProvider: analytics))
184+
185+
// When
186+
viewModel.performLinkSharedTasks()
187+
188+
// Then
189+
assertEqual(analytics.receivedEvents.first, WooAnalyticsStat.simplePaymentsFlowCompleted.rawValue)
190+
assertEqual(analytics.receivedProperties.first?["payment_method"] as? String, "payment_link")
191+
assertEqual(analytics.receivedProperties.first?["amount"] as? String, "$12.00")
192+
}
193+
180194
func test_failed_event_is_tracked_after_failing_to_mark_order_as_paid() {
181195
// Given
182196
let stores = MockStoresManager(sessionManager: .testingInstance)
@@ -200,7 +214,7 @@ final class SimplePaymentsMethodsViewModelTests: XCTestCase {
200214
assertEqual(analytics.receivedProperties.first?["source"] as? String, "payment_method")
201215
}
202216

203-
func test_collect_event_is_tracked_when_required() {
217+
func test_collect_event_is_tracked_when_paying_by_cash() {
204218
// Given
205219
let analytics = MockAnalyticsProvider()
206220
let stores = MockStoresManager(sessionManager: .testingInstance)
@@ -214,6 +228,19 @@ final class SimplePaymentsMethodsViewModelTests: XCTestCase {
214228
assertEqual(analytics.receivedProperties.first?["payment_method"] as? String, "cash")
215229
}
216230

231+
func test_collect_event_is_tracked_when_sharing_payment_links() {
232+
// Given
233+
let analytics = MockAnalyticsProvider()
234+
let viewModel = SimplePaymentsMethodsViewModel(formattedTotal: "$12.00", analytics: WooAnalytics(analyticsProvider: analytics))
235+
236+
// When
237+
viewModel.trackCollectByPaymentLink()
238+
239+
// Then
240+
assertEqual(analytics.receivedEvents, [WooAnalyticsStat.simplePaymentsFlowCollect.rawValue])
241+
assertEqual(analytics.receivedProperties.first?["payment_method"] as? String, "payment_link")
242+
}
243+
217244
func test_collect_event_is_tracked_when_collecting_payment() {
218245
// Given
219246
let analytics = MockAnalyticsProvider()
@@ -273,7 +300,7 @@ final class SimplePaymentsMethodsViewModelTests: XCTestCase {
273300
}
274301

275302
// When
276-
let viewModel = SimplePaymentsMethodsViewModel(formattedTotal: "$12.00", stores: stores, enablePaymentLink: true)
303+
let viewModel = SimplePaymentsMethodsViewModel(formattedTotal: "$12.00", stores: stores)
277304

278305
// Then
279306
XCTAssertFalse(viewModel.showPaymentLinkRow)
@@ -296,7 +323,7 @@ final class SimplePaymentsMethodsViewModelTests: XCTestCase {
296323
}
297324

298325
// When
299-
let viewModel = SimplePaymentsMethodsViewModel(formattedTotal: "$12.00", stores: stores, enablePaymentLink: true)
326+
let viewModel = SimplePaymentsMethodsViewModel(formattedTotal: "$12.00", stores: stores)
300327

301328
// Then
302329
XCTAssertTrue(viewModel.showPaymentLinkRow)

0 commit comments

Comments
 (0)