Skip to content

Commit f4acfaf

Browse files
authored
Merge pull request #7556 from woocommerce/issue/7478-enable-button-on-cod-onboarding-scren
[Mobile Payments] Enable Pay in Person button on Cash on Delivery onboarding screen
2 parents 1dc2185 + 60b822f commit f4acfaf

File tree

8 files changed

+246
-41
lines changed

8 files changed

+246
-41
lines changed

WooCommerce/Classes/System/WooConstants.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ extension WooConstants {
154154
#else
155155
case couponManagementFeedback = "https://automattic.survey.fm/woo-app-coupon-management-production"
156156
#endif
157+
/// URL for the Enable Cash on Delivery (or Pay in Person) onboarding step's learn more link.
158+
///
159+
case cashOnDeliveryLearnMoreUrl = "https://woocommerce.com/document/stripe/accept-in-person-payments-with-stripe/#section-8"
157160

158161
/// Returns the URL version of the receiver
159162
///

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ struct InPersonPaymentsView: View {
7777
case .stripeAccountRejected:
7878
InPersonPaymentsStripeRejected()
7979
case .codPaymentGatewayNotSetUp:
80-
InPersonPaymentsCodPaymentGatewayNotSetUp(viewModel: viewModel.codStepViewModel)
80+
InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView(viewModel: viewModel.codStepViewModel)
8181
case .completed:
8282
InPersonPaymentsCompleted()
8383
case .noConnectionError:

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ final class InPersonPaymentsViewModel: ObservableObject {
1010
private let useCase: CardPresentPaymentsOnboardingUseCase
1111
let stores: StoresManager
1212

13-
lazy var codStepViewModel: InPersonPaymentsCodPaymentGatewayNotSetUpViewModel = {
14-
InPersonPaymentsCodPaymentGatewayNotSetUpViewModel(completion: refresh)
13+
lazy var codStepViewModel: InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel = {
14+
InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel(completion: refresh)
1515
}()
1616

1717
/// Initializes the view model for a specific site

WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCodPaymentGatewayNotSetUp.swift renamed to WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import SwiftUI
22

3-
struct InPersonPaymentsCodPaymentGatewayNotSetUp: View {
4-
let viewModel: InPersonPaymentsCodPaymentGatewayNotSetUpViewModel
3+
struct InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView: View {
4+
@ObservedObject var viewModel: InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel
55

66
var body: some View {
77
ScrollableVStack {
@@ -22,21 +22,21 @@ struct InPersonPaymentsCodPaymentGatewayNotSetUp: View {
2222
Button(Localization.skipButton, action: viewModel.skipTapped)
2323
.buttonStyle(SecondaryButtonStyle())
2424

25-
Button(Localization.enableButton, action: {})
26-
.buttonStyle(PrimaryLoadingButtonStyle(isLoading: false))
25+
Button(Localization.enableButton, action: viewModel.enableTapped)
26+
.buttonStyle(PrimaryLoadingButtonStyle(isLoading: viewModel.awaitingResponse))
2727

2828
Spacer()
2929

30-
InPersonPaymentsLearnMore(url: Constants.cashOnDeliveryLearnMoreUrl,
30+
InPersonPaymentsLearnMore(url: WooConstants.URLs.cashOnDeliveryLearnMoreUrl.asURL(),
3131
formatText: Localization.cashOnDeliveryLearnMore)
3232
}
3333
}
3434
}
3535

3636
struct InPersonPaymentsCodPaymentGatewayNotSetUp_Previews: PreviewProvider {
3737
static var previews: some View {
38-
let viewModel = InPersonPaymentsCodPaymentGatewayNotSetUpViewModel(completion: {})
39-
return InPersonPaymentsCodPaymentGatewayNotSetUp(viewModel: viewModel)
38+
let viewModel = InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel(completion: {})
39+
return InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView(viewModel: viewModel)
4040
}
4141
}
4242

@@ -70,6 +70,4 @@ private enum Localization {
7070

7171
private enum Constants {
7272
static let imageHeight: CGFloat = 140.0
73-
static let cashOnDeliveryLearnMoreUrl = URL(
74-
string: "https://woocommerce.com/document/stripe/accept-in-person-payments-with-stripe/#section-8")!
7573
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import Foundation
2+
import Yosemite
3+
4+
final class InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel: ObservableObject {
5+
let completion: () -> Void
6+
private let stores: StoresManager
7+
private let noticePresenter: NoticePresenter
8+
9+
@Published var awaitingResponse = false
10+
11+
private var siteID: Int64? {
12+
stores.sessionManager.defaultStoreID
13+
}
14+
15+
init(stores: StoresManager = ServiceLocator.stores,
16+
noticePresenter: NoticePresenter = ServiceLocator.noticePresenter,
17+
completion: @escaping () -> Void) {
18+
self.stores = stores
19+
self.noticePresenter = noticePresenter
20+
self.completion = completion
21+
}
22+
23+
func skipTapped() {
24+
guard let siteID = siteID else {
25+
return completion()
26+
}
27+
28+
let action = AppSettingsAction.setSkippedCashOnDeliveryOnboardingStep(siteID: siteID)
29+
stores.dispatch(action)
30+
completion()
31+
}
32+
33+
func enableTapped() {
34+
guard let siteID = siteID else {
35+
return completion()
36+
}
37+
38+
awaitingResponse = true
39+
40+
let action = PaymentGatewayAction.updatePaymentGateway(defaultCashOnDeliveryGateway(siteID: siteID)) { [weak self] result in
41+
guard let self = self else { return }
42+
guard result.isSuccess else {
43+
DDLogError("💰 Could not update Payment Gateway: \(String(describing: result.failure))")
44+
self.awaitingResponse = false
45+
self.displayEnableCashOnDeliveryFailureNotice()
46+
return
47+
}
48+
49+
self.completion()
50+
}
51+
stores.dispatch(action)
52+
}
53+
54+
private func defaultCashOnDeliveryGateway(siteID: Int64) -> PaymentGateway {
55+
PaymentGateway(siteID: siteID,
56+
gatewayID: Constants.cashOnDeliveryGatewayID,
57+
title: Localization.cashOnDeliveryCheckoutTitle,
58+
description: Localization.cashOnDeliveryCheckoutDescription,
59+
enabled: true,
60+
features: [.products],
61+
instructions: Localization.cashOnDeliveryCheckoutInstructions)
62+
}
63+
64+
private func displayEnableCashOnDeliveryFailureNotice() {
65+
let notice = Notice(title: Localization.cashOnDeliveryFailureNoticeTitle,
66+
message: nil,
67+
feedbackType: .error,
68+
actionTitle: Localization.cashOnDeliveryFailureNoticeRetryTitle,
69+
actionHandler: enableTapped)
70+
71+
noticePresenter.enqueue(notice: notice)
72+
}
73+
}
74+
75+
private enum Localization {
76+
static let cashOnDeliveryCheckoutTitle = NSLocalizedString(
77+
"Pay in Person",
78+
comment: "Customer-facing title for the payment option added to the store checkout when the merchant enables " +
79+
"Pay in Person")
80+
81+
static let cashOnDeliveryCheckoutDescription = NSLocalizedString(
82+
"Pay by card or another accepted payment method",
83+
comment: "Customer-facing description showing more details about the Pay in Person option which is added to " +
84+
"the store checkout when the merchant enables Pay in Person")
85+
86+
static let cashOnDeliveryCheckoutInstructions = NSLocalizedString(
87+
"Pay by card or another accepted payment method",
88+
comment: "Customer-facing instructions shown on Order Thank-you pages and confirmation emails, showing more " +
89+
"details about the Pay in Person option added to the store checkout when the merchant enables Pay in Person")
90+
91+
static let cashOnDeliveryFailureNoticeTitle = NSLocalizedString(
92+
"Failed to enable Pay in Person. Please try again later.",
93+
comment: "Error displayed when the attempt to enable a Pay in Person checkout payment option fails")
94+
95+
static let cashOnDeliveryFailureNoticeRetryTitle = NSLocalizedString(
96+
"Retry",
97+
comment: "Retry Action on error displayed when the attempt to enable a Pay in Person checkout payment option fails")
98+
}
99+
100+
private enum Constants {
101+
static let cashOnDeliveryGatewayID = "cod"
102+
}

WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/Onboarding Errors/InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift

Lines changed: 0 additions & 21 deletions
This file was deleted.

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -430,9 +430,9 @@
430430
02F843DA273646A30017FE12 /* JetpackBenefitsBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02F843D9273646A30017FE12 /* JetpackBenefitsBanner.swift */; };
431431
02FE1B9F287F51F400EC03B3 /* LoginOnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02FE1B9E287F51F400EC03B3 /* LoginOnboardingViewController.swift */; };
432432
02FE89C7231FAA4100E85EF8 /* MainTabBarControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02FE89C6231FAA4100E85EF8 /* MainTabBarControllerTests.swift */; };
433-
0313651128AB81B100EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0313651028AB81B100EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUp.swift */; };
433+
0313651128AB81B100EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0313651028AB81B100EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift */; };
434434
0313651328ABCB2D00EEE571 /* InPersonPaymentsOnboardingErrorMainContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0313651228ABCB2D00EEE571 /* InPersonPaymentsOnboardingErrorMainContentView.swift */; };
435-
0313651728ACE9F400EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0313651628ACE9F400EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift */; };
435+
0313651728ACE9F400EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0313651628ACE9F400EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift */; };
436436
031B10E3274FE2AE007390BA /* CardPresentModalConnectionFailedUpdateAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031B10E2274FE2AE007390BA /* CardPresentModalConnectionFailedUpdateAddress.swift */; };
437437
035C6DEB273EA12D00F70406 /* SoftwareUpdateTypeProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035C6DEA273EA12D00F70406 /* SoftwareUpdateTypeProperty.swift */; };
438438
035F2308275690970019E1B0 /* CardPresentModalConnectingFailedUpdatePostalCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035F2307275690970019E1B0 /* CardPresentModalConnectingFailedUpdatePostalCode.swift */; };
@@ -449,6 +449,7 @@
449449
0386CFEB2852108B00134466 /* PaymentMethodsHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0386CFEA2852108B00134466 /* PaymentMethodsHostingController.swift */; };
450450
039D948D27610C6F0044EF38 /* UIView+SafeAreaConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039D948C27610C6F0044EF38 /* UIView+SafeAreaConstraints.swift */; };
451451
039D948F276113490044EF38 /* UIView+SuperviewConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039D948E276113490044EF38 /* UIView+SuperviewConstraints.swift */; };
452+
03A6C18428B52B1500AADF23 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A6C18328B52B1500AADF23 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift */; };
452453
03AA165E2719B7EF005CCB7B /* ReceiptActionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AA165D2719B7EF005CCB7B /* ReceiptActionCoordinator.swift */; };
453454
03AA16602719B83D005CCB7B /* ReceiptActionCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AA165F2719B83D005CCB7B /* ReceiptActionCoordinatorTests.swift */; };
454455
03AFDE02282C0B82003B67CD /* InPersonPaymentsCompletedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AFDE01282C0B82003B67CD /* InPersonPaymentsCompletedView.swift */; };
@@ -2267,9 +2268,9 @@
22672268
02F843D9273646A30017FE12 /* JetpackBenefitsBanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackBenefitsBanner.swift; sourceTree = "<group>"; };
22682269
02FE1B9E287F51F400EC03B3 /* LoginOnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginOnboardingViewController.swift; sourceTree = "<group>"; };
22692270
02FE89C6231FAA4100E85EF8 /* MainTabBarControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarControllerTests.swift; sourceTree = "<group>"; };
2270-
0313651028AB81B100EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCodPaymentGatewayNotSetUp.swift; sourceTree = "<group>"; };
2271+
0313651028AB81B100EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift; sourceTree = "<group>"; };
22712272
0313651228ABCB2D00EEE571 /* InPersonPaymentsOnboardingErrorMainContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsOnboardingErrorMainContentView.swift; sourceTree = "<group>"; };
2272-
0313651628ACE9F400EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift; sourceTree = "<group>"; };
2273+
0313651628ACE9F400EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift; sourceTree = "<group>"; };
22732274
03180BE52763AA8F00B938A8 /* Woo-Release-macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Woo-Release-macOS.entitlements"; sourceTree = "<group>"; };
22742275
03180BE62763AA8F00B938A8 /* Woo-Alpha-macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Woo-Alpha-macOS.entitlements"; sourceTree = "<group>"; };
22752276
03180BE72763AA9000B938A8 /* Woo-Debug-macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Woo-Debug-macOS.entitlements"; sourceTree = "<group>"; };
@@ -2289,6 +2290,7 @@
22892290
0386CFEA2852108B00134466 /* PaymentMethodsHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentMethodsHostingController.swift; sourceTree = "<group>"; };
22902291
039D948C27610C6F0044EF38 /* UIView+SafeAreaConstraints.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+SafeAreaConstraints.swift"; sourceTree = "<group>"; };
22912292
039D948E276113490044EF38 /* UIView+SuperviewConstraints.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+SuperviewConstraints.swift"; sourceTree = "<group>"; };
2293+
03A6C18328B52B1500AADF23 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift; sourceTree = "<group>"; };
22922294
03AA165D2719B7EF005CCB7B /* ReceiptActionCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptActionCoordinator.swift; sourceTree = "<group>"; };
22932295
03AA165F2719B83D005CCB7B /* ReceiptActionCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptActionCoordinatorTests.swift; sourceTree = "<group>"; };
22942296
03AFDE01282C0B82003B67CD /* InPersonPaymentsCompletedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsCompletedView.swift; sourceTree = "<group>"; };
@@ -4727,6 +4729,22 @@
47274729
path = "Payment Methods";
47284730
sourceTree = "<group>";
47294731
};
4732+
03A6C18128B52ACC00AADF23 /* In-Person Payments */ = {
4733+
isa = PBXGroup;
4734+
children = (
4735+
03A6C18228B52ADB00AADF23 /* Onboarding Errors */,
4736+
);
4737+
path = "In-Person Payments";
4738+
sourceTree = "<group>";
4739+
};
4740+
03A6C18228B52ADB00AADF23 /* Onboarding Errors */ = {
4741+
isa = PBXGroup;
4742+
children = (
4743+
03A6C18328B52B1500AADF23 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift */,
4744+
);
4745+
path = "Onboarding Errors";
4746+
sourceTree = "<group>";
4747+
};
47304748
03FBDA9B263AD47200ACE257 /* Coupons */ = {
47314749
isa = PBXGroup;
47324750
children = (
@@ -8223,15 +8241,16 @@
82238241
ABC35A4B736A0B2D8348DD08 /* InPersonPaymentsOnboardingError.swift */,
82248242
0313651228ABCB2D00EEE571 /* InPersonPaymentsOnboardingErrorMainContentView.swift */,
82258243
B979A9B9282D62A500EBB383 /* InPersonPaymentsDeactivateStripeView.swift */,
8226-
0313651028AB81B100EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUp.swift */,
8227-
0313651628ACE9F400EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift */,
8244+
0313651028AB81B100EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift */,
8245+
0313651628ACE9F400EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift */,
82288246
);
82298247
path = "Onboarding Errors";
82308248
sourceTree = "<group>";
82318249
};
82328250
E10DFC76267331450083AFF2 /* Settings */ = {
82338251
isa = PBXGroup;
82348252
children = (
8253+
03A6C18128B52ACC00AADF23 /* In-Person Payments */,
82358254
E10DFC77267331590083AFF2 /* ApplicationLogViewModelTests.swift */,
82368255
DEC51B03276B30F6009F3DF4 /* SystemStatusReportViewModelTests.swift */,
82378256
);
@@ -9515,7 +9534,7 @@
95159534
DE61978B28991F0E005E4362 /* WKWebView+Authenticated.swift in Sources */,
95169535
D8810086257DCCF0008DE6F2 /* WordPressComSiteInfo+Woo.swift in Sources */,
95179536
311237EE2714DA240033C44E /* CardPresentModalDisplayMessage.swift in Sources */,
9518-
0313651128AB81B100EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUp.swift in Sources */,
9537+
0313651128AB81B100EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpView.swift in Sources */,
95199538
45E3C8F325E7D30300102E84 /* ShippingLabelAddress+Woo.swift in Sources */,
95209539
57A25C7C25ACFAEC00A54A62 /* OrderFulfillmentNoticePresenter.swift in Sources */,
95219540
B9E4364C287587D300883CFA /* FeatureAnnouncementCardView.swift in Sources */,
@@ -9956,7 +9975,7 @@
99569975
4515C88D25D6BE540099C8E3 /* ShippingLabelAddressFormViewController.swift in Sources */,
99579976
CE5F462A23AACA0A006B1A5C /* RefundDetailsDataSource.swift in Sources */,
99589977
02162726237963AF000208D2 /* ProductFormViewController.swift in Sources */,
9959-
0313651728ACE9F400EEE571 /* InPersonPaymentsCodPaymentGatewayNotSetUpViewModel.swift in Sources */,
9978+
0313651728ACE9F400EEE571 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModel.swift in Sources */,
99609979
571CDD5A250ACC470076B8CC /* UITableViewDiffableDataSource+Helpers.swift in Sources */,
99619980
4580BA7423F192D400B5F764 /* ProductSettingsViewController.swift in Sources */,
99629981
45977EBA2603F632006CDFB8 /* MapsHelper.swift in Sources */,
@@ -10372,6 +10391,7 @@
1037210391
DE3877E4283E35E80075D87E /* DiscountTypeBottomSheetListSelectorCommandTests.swift in Sources */,
1037310392
025678C725773399009D7E6C /* Collection+ShippingLabelTests.swift in Sources */,
1037410393
02BC5AA624D27F8900C43326 /* ProductVariationFormViewModel+ChangesTests.swift in Sources */,
10394+
03A6C18428B52B1500AADF23 /* InPersonPaymentsCashOnDeliveryPaymentGatewayNotSetUpViewModelTests.swift in Sources */,
1037510395
DE279BAD26E9CBEA002BA963 /* ShippingLabelPackagesFormViewModelTests.swift in Sources */,
1037610396
57C2F6E624C27B3100131012 /* SwitchStoreNoticePresenterTests.swift in Sources */,
1037710397
020BE77123B4A4C6007FE54C /* AztecHorizontalRulerFormatBarCommandTests.swift in Sources */,

0 commit comments

Comments
 (0)