Skip to content

Commit eadb931

Browse files
committed
Merge branch 'trunk' into issue/6487-coupon-details-update
2 parents 0cb823b + 462691f commit eadb931

File tree

9 files changed

+95
-18
lines changed

9 files changed

+95
-18
lines changed

WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -817,5 +817,28 @@ extension WooAnalyticsEvent {
817817
]
818818
)
819819
}
820+
821+
/// Tracked when the "learn more" button in the In-Person Payments onboarding is tapped.
822+
///
823+
/// - Parameter countryCode: the country code of the store.
824+
///
825+
static func cardPresentOnboardingLearnMoreTapped(countryCode: String) -> WooAnalyticsEvent {
826+
WooAnalyticsEvent(statName: .cardPresentOnboardingLearnMoreTapped,
827+
properties: [Keys.countryCode: countryCode])
828+
}
829+
830+
/// Tracked when the In-Person Payments onboarding cannot be completed for some reason.
831+
///
832+
/// - Parameters:
833+
/// - reason: the reason why the onboarding is not completed.
834+
/// - countryCode: the country code of the store.
835+
///
836+
static func cardPresentOnboardingNotCompleted(reason: String, countryCode: String) -> WooAnalyticsEvent {
837+
WooAnalyticsEvent(statName: .cardPresentOnboardingNotCompleted,
838+
properties: [
839+
Keys.countryCode: countryCode,
840+
"reason": reason
841+
])
842+
}
820843
}
821844
}

WooCommerce/Classes/ViewModels/CardPresentPayments/CardPresentModalReaderIsReady.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,26 @@ final class CardPresentModalReaderIsReady: CardPresentPaymentsModalViewModel {
4141
return topTitle + bottomTitle
4242
}
4343

44-
init(name: String, amount: String) {
44+
private let paymentGatewayAccountID: String?
45+
private let countryCode: String
46+
private let analytics: Analytics
47+
48+
init(name: String, amount: String, paymentGatewayAccountID: String?, countryCode: String, analytics: Analytics = ServiceLocator.analytics) {
4549
self.name = name
4650
self.amount = amount
51+
self.paymentGatewayAccountID = paymentGatewayAccountID
52+
self.countryCode = countryCode
53+
self.analytics = analytics
4754
}
4855

4956
func didTapPrimaryButton(in viewController: UIViewController?) {
5057
//
5158
}
5259

5360
func didTapSecondaryButton(in viewController: UIViewController?) {
54-
ServiceLocator.analytics.track(.collectPaymentCanceled)
61+
analytics.track(event: WooAnalyticsEvent.InPersonPayments
62+
.collectPaymentCanceled(forGatewayID: paymentGatewayAccountID,
63+
countryCode: countryCode))
5564

5665
let action = CardPresentPaymentAction.cancelPayment(onCompletion: nil)
5766

WooCommerce/Classes/ViewModels/Order Details/OrderDetailsPaymentAlerts.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ final class OrderDetailsPaymentAlerts {
2424
private var name: String = ""
2525
private var amount: String = ""
2626

27-
init(presentingController: UIViewController) {
27+
private let paymentGatewayAccountID: String?
28+
private let countryCode: String
29+
30+
init(presentingController: UIViewController, paymentGatewayAccountID: String?, countryCode: String) {
2831
self.presentingController = presentingController
32+
self.paymentGatewayAccountID = paymentGatewayAccountID
33+
self.countryCode = countryCode
2934
}
3035

3136
func presentViewModel(viewModel: CardPresentPaymentsModalViewModel) {
@@ -89,7 +94,7 @@ final class OrderDetailsPaymentAlerts {
8994

9095
private extension OrderDetailsPaymentAlerts {
9196
func readerIsReady() -> CardPresentPaymentsModalViewModel {
92-
CardPresentModalReaderIsReady(name: name, amount: amount)
97+
CardPresentModalReaderIsReady(name: name, amount: amount, paymentGatewayAccountID: paymentGatewayAccountID, countryCode: countryCode)
9398
}
9499

95100
func tapOrInsert(onCancel: @escaping () -> Void) -> CardPresentPaymentsModalViewModel {

WooCommerce/Classes/ViewRelated/Coupons/Add and Edit Coupons/AddEditCoupon.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ private extension AddEditCoupon {
4141
}
4242
}
4343

44+
#if DEBUG
4445
struct AddEditCoupon_Previews: PreviewProvider {
4546
static var previews: some View {
4647

@@ -50,3 +51,4 @@ struct AddEditCoupon_Previews: PreviewProvider {
5051
AddEditCoupon(editingViewModel)
5152
}
5253
}
54+
#endif

WooCommerce/Classes/ViewRelated/Dashboard/Settings/CardReadersV2/CardReaderSettingsConnectedViewController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ final class CardReaderSettingsConnectedViewController: UIViewController, CardRea
2121

2222
/// Card Present Payments alerts
2323
private lazy var paymentAlerts: OrderDetailsPaymentAlerts = {
24-
OrderDetailsPaymentAlerts(presentingController: self)
24+
OrderDetailsPaymentAlerts(presentingController: self,
25+
paymentGatewayAccountID: viewModel?.dataSource.cardPresentPaymentGatewayID(),
26+
countryCode: CardPresentConfigurationLoader().configuration.countryCode)
2527
}()
2628

2729
private let settingsAlerts = CardReaderSettingsAlerts()

WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsLearnMore.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ struct InPersonPaymentsLearnMore: View {
44
static let learnMoreURL = URL(string: "woocommerce://in-person-payments/learn-more")!
55
@Environment(\.customOpenURL) var customOpenURL
66

7+
private let cardPresentConfiguration = CardPresentConfigurationLoader().configuration
8+
79
var body: some View {
810
HStack(spacing: 16) {
911
Image(uiImage: .infoOutlineImage)
@@ -15,7 +17,8 @@ struct InPersonPaymentsLearnMore: View {
1517
}
1618
.padding(.vertical, Constants.verticalPadding)
1719
.onTapGesture {
18-
ServiceLocator.analytics.track(.cardPresentOnboardingLearnMoreTapped)
20+
ServiceLocator.analytics.track(event: WooAnalyticsEvent.InPersonPayments
21+
.cardPresentOnboardingLearnMoreTapped(countryCode: cardPresentConfiguration.countryCode))
1922
customOpenURL?(InPersonPaymentsLearnMore.learnMoreURL)
2023
}
2124
}

WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/InPersonPaymentsViewModel.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,14 @@ final class InPersonPaymentsViewModel: ObservableObject {
7474
}
7575
}
7676

77-
private func trackState(_ state: CardPresentPaymentOnboardingState) {
78-
guard let reason = state.reasonForAnalytics else {
79-
return
77+
private extension InPersonPaymentsViewModel {
78+
func trackState(_ state: CardPresentPaymentOnboardingState) {
79+
guard let reason = state.reasonForAnalytics else {
80+
return
81+
}
82+
ServiceLocator.analytics
83+
.track(event: .InPersonPayments
84+
.cardPresentOnboardingNotCompleted(reason: reason,
85+
countryCode: useCase.configurationLoader.configuration.countryCode))
8086
}
81-
let properties = [
82-
"reason": reason
83-
]
84-
ServiceLocator.analytics.track(.cardPresentOnboardingNotCompleted, withProperties: properties)
8587
}

WooCommerce/Classes/ViewRelated/Orders/Collect Payments/CollectOrderPaymentUseCase.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ final class CollectOrderPaymentUseCase: NSObject, CollectOrderPaymentProtocol {
6060

6161
/// Alert manager to inform merchants about reader & card actions.
6262
///
63-
private lazy var alerts = OrderDetailsPaymentAlerts(presentingController: rootViewController)
63+
private lazy var alerts = OrderDetailsPaymentAlerts(presentingController: rootViewController,
64+
paymentGatewayAccountID: paymentGatewayAccount.gatewayID,
65+
countryCode: configurationLoader.configuration.countryCode)
6466

6567
/// IPP payments collector.
6668
///

WooCommerce/WooCommerceTests/ViewModels/CardPresentPayments/CardPresentModalReaderIsReadyTests.swift

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,24 @@ import TestKit
66
final class CardPresentModalReaderIsReadyTests: XCTestCase {
77
private var viewModel: CardPresentModalReaderIsReady!
88

9+
private var analyticsProvider: MockAnalyticsProvider!
10+
private var analytics: WooAnalytics!
11+
912
override func setUp() {
1013
super.setUp()
11-
viewModel = CardPresentModalReaderIsReady(name: Expectations.name, amount: Expectations.amount)
14+
analyticsProvider = MockAnalyticsProvider()
15+
analytics = WooAnalytics(analyticsProvider: analyticsProvider)
16+
viewModel = CardPresentModalReaderIsReady(name: Expectations.name,
17+
amount: Expectations.amount,
18+
paymentGatewayAccountID: Expectations.paymentGatewayAccountID,
19+
countryCode: Expectations.countryCode,
20+
analytics: analytics)
1221
}
1322

1423
override func tearDown() {
1524
viewModel = nil
25+
analytics = nil
26+
analyticsProvider = nil
1627
super.tearDown()
1728
}
1829

@@ -68,13 +79,31 @@ final class CardPresentModalReaderIsReadyTests: XCTestCase {
6879
XCTFail("Primary button failed to dispatch .cancelPayment action")
6980
}
7081
}
82+
83+
func test_tapping_secondary_button_tracks_cancel_event() throws {
84+
// Given
85+
assertEmpty(analyticsProvider.receivedEvents)
86+
87+
// When
88+
viewModel.didTapSecondaryButton(in: nil)
89+
90+
// Then
91+
XCTAssertEqual(analyticsProvider.receivedEvents.count, 1)
92+
XCTAssertEqual(analyticsProvider.receivedEvents.first, "card_present_collect_payment_canceled")
93+
94+
let firstPropertiesBatch = try XCTUnwrap(analyticsProvider.receivedProperties.first)
95+
XCTAssertEqual(firstPropertiesBatch["country"] as? String, Expectations.countryCode)
96+
XCTAssertEqual(firstPropertiesBatch["plugin_slug"] as? String, Expectations.paymentGatewayAccountID)
97+
}
7198
}
7299

73100

74101
private extension CardPresentModalReaderIsReadyTests {
75102
enum Expectations {
76-
static var name = "name"
77-
static var amount = "amount"
78-
static var image = UIImage.cardPresentImage
103+
static let name = "name"
104+
static let amount = "amount"
105+
static let image = UIImage.cardPresentImage
106+
static let countryCode = "CA"
107+
static let paymentGatewayAccountID = "woocommerce-payments"
79108
}
80109
}

0 commit comments

Comments
 (0)