Skip to content

Commit 8ba4420

Browse files
committed
Add CardPresentConfigurationLoader tests
1 parent d8c85dc commit 8ba4420

File tree

2 files changed

+127
-0
lines changed

2 files changed

+127
-0
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,6 +1548,7 @@
15481548
E1BE703A265E6F47006CA4D9 /* CardPresentModalScanningFailed.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BE7039265E6F47006CA4D9 /* CardPresentModalScanningFailed.swift */; };
15491549
E1C47209267A1ECC00D06DA1 /* CrashLoggingStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C47208267A1ECC00D06DA1 /* CrashLoggingStack.swift */; };
15501550
E1C5E78226C2A971008D4C47 /* InPersonPaymentsPluginNotSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C5E78126C2A971008D4C47 /* InPersonPaymentsPluginNotSetup.swift */; };
1551+
E1C6535C27BD1D0A003E87D4 /* CardPresentConfigurationLoaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C6535B27BD1D0A003E87D4 /* CardPresentConfigurationLoaderTests.swift */; };
15511552
E1D4E84426776A6B00256B83 /* HeadlineTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D4E84326776A6A00256B83 /* HeadlineTableViewCell.swift */; };
15521553
E1D4E84526776AD900256B83 /* HeadlineTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E1D4E84226776A6A00256B83 /* HeadlineTableViewCell.xib */; };
15531554
E1E125AA26EB42530068A9B0 /* CardPresentModalUpdateProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E125A926EB42530068A9B0 /* CardPresentModalUpdateProgress.swift */; };
@@ -3182,6 +3183,7 @@
31823183
E1BE7039265E6F47006CA4D9 /* CardPresentModalScanningFailed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentModalScanningFailed.swift; sourceTree = "<group>"; };
31833184
E1C47208267A1ECC00D06DA1 /* CrashLoggingStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashLoggingStack.swift; sourceTree = "<group>"; };
31843185
E1C5E78126C2A971008D4C47 /* InPersonPaymentsPluginNotSetup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsPluginNotSetup.swift; sourceTree = "<group>"; };
3186+
E1C6535B27BD1D0A003E87D4 /* CardPresentConfigurationLoaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentConfigurationLoaderTests.swift; sourceTree = "<group>"; };
31853187
E1D4E84226776A6A00256B83 /* HeadlineTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HeadlineTableViewCell.xib; sourceTree = "<group>"; };
31863188
E1D4E84326776A6A00256B83 /* HeadlineTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadlineTableViewCell.swift; sourceTree = "<group>"; };
31873189
E1E125A926EB42530068A9B0 /* CardPresentModalUpdateProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentModalUpdateProgress.swift; sourceTree = "<group>"; };
@@ -5671,6 +5673,7 @@
56715673
B53A569521123D27000776C9 /* Tools */ = {
56725674
isa = PBXGroup;
56735675
children = (
5676+
E1C6535A27BD1CFC003E87D4 /* In-Person Payments */,
56745677
029700ED24FE38DE00D242F8 /* InfiniteScroll */,
56755678
028AFFB42484ED7F00693C09 /* Logging */,
56765679
D8A8C4F22268288F001C72BF /* AddManualCustomTrackingViewModelTests.swift */,
@@ -7451,6 +7454,14 @@
74517454
path = "In-Person Payments";
74527455
sourceTree = "<group>";
74537456
};
7457+
E1C6535A27BD1CFC003E87D4 /* In-Person Payments */ = {
7458+
isa = PBXGroup;
7459+
children = (
7460+
E1C6535B27BD1D0A003E87D4 /* CardPresentConfigurationLoaderTests.swift */,
7461+
);
7462+
path = "In-Person Payments";
7463+
sourceTree = "<group>";
7464+
};
74547465
F4B77A83B2A3D94EA331691B /* Pods */ = {
74557466
isa = PBXGroup;
74567467
children = (
@@ -9375,6 +9386,7 @@
93759386
02524A5D252ED5C60033E7BD /* ProductVariationLoadUseCaseTests.swift in Sources */,
93769387
028AFFB62484EDA000693C09 /* Dictionary+LoggingTests.swift in Sources */,
93779388
02BC5AA824D2802B00C43326 /* MockProductVariationStoresManager.swift in Sources */,
9389+
E1C6535C27BD1D0A003E87D4 /* CardPresentConfigurationLoaderTests.swift in Sources */,
93789390
2688644325D471C700821BA5 /* EditAttributesViewModelTests.swift in Sources */,
93799391
DE001323279A793A00EB0350 /* CouponWooTests.swift in Sources */,
93809392
45B98E1F25DECC1C00A1232B /* ShippingLabelAddressFormViewModelTests.swift in Sources */,
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import XCTest
2+
import Yosemite
3+
@testable import WooCommerce
4+
5+
final class CardPresentConfigurationLoaderTests: XCTestCase {
6+
/// Mock Storage: InMemory
7+
///
8+
private var storageManager: MockStorageManager!
9+
10+
/// Mock Stores
11+
///
12+
private var stores: MockStoresManager!
13+
14+
/// Dummy Site ID
15+
///
16+
private let sampleSiteID: Int64 = 1234
17+
18+
override func setUpWithError() throws {
19+
try super.setUpWithError()
20+
storageManager = MockStorageManager()
21+
stores = MockStoresManager(sessionManager: .makeForTesting(authenticated: true))
22+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
23+
switch action {
24+
case .loadStripeInPersonPaymentsSwitchState(let completion):
25+
completion(.success(true))
26+
case .loadCanadaInPersonPaymentsSwitchState(let completion):
27+
completion(.success(true))
28+
default:
29+
break
30+
}
31+
}
32+
stores.sessionManager.setStoreId(sampleSiteID)
33+
ServiceLocator.setSelectedSiteSettings(SelectedSiteSettings(stores: stores, storageManager: storageManager))
34+
}
35+
36+
override func tearDownWithError() throws {
37+
ServiceLocator.setSelectedSiteSettings(SelectedSiteSettings())
38+
storageManager.reset()
39+
storageManager = nil
40+
stores = nil
41+
try super.tearDownWithError()
42+
}
43+
44+
func test_configuration_for_US_with_stripe_enabled_and_canada_enabled() {
45+
// Given
46+
setupFeatures(stripe: true, canada: true)
47+
setupCountry(country: .us)
48+
49+
// When
50+
let loader = CardPresentConfigurationLoader(stores: stores)
51+
let configuration = loader.configuration
52+
53+
// Then
54+
XCTAssertTrue(configuration.isSupportedCountry)
55+
}
56+
57+
func test_configuration_for_Canada_with_stripe_enabled_and_canada_enabled() {
58+
// Given
59+
setupFeatures(stripe: true, canada: true)
60+
setupCountry(country: .ca)
61+
62+
// When
63+
let loader = CardPresentConfigurationLoader(stores: stores)
64+
let configuration = loader.configuration
65+
66+
// Then
67+
XCTAssertTrue(configuration.isSupportedCountry)
68+
}
69+
70+
func test_configuration_for_Spain_with_stripe_enabled_and_canada_enabled() {
71+
// Given
72+
setupFeatures(stripe: true, canada: true)
73+
setupCountry(country: .es)
74+
75+
// When
76+
let loader = CardPresentConfigurationLoader(stores: stores)
77+
let configuration = loader.configuration
78+
79+
// Then
80+
XCTAssertFalse(configuration.isSupportedCountry)
81+
}
82+
}
83+
84+
private extension CardPresentConfigurationLoaderTests {
85+
func setupCountry(country: Country) {
86+
let setting = SiteSetting.fake()
87+
.copy(
88+
siteID: sampleSiteID,
89+
settingID: "woocommerce_default_country",
90+
value: country.rawValue,
91+
settingGroupKey: SiteSettingGroup.general.rawValue
92+
)
93+
storageManager.insertSampleSiteSetting(readOnlySiteSetting: setting)
94+
ServiceLocator.selectedSiteSettings.refresh()
95+
}
96+
97+
enum Country: String {
98+
case us = "US:CA"
99+
case ca = "CA:NS"
100+
case es = "ES"
101+
}
102+
103+
func setupFeatures(stripe: Bool, canada: Bool) {
104+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
105+
switch action {
106+
case .loadStripeInPersonPaymentsSwitchState(onCompletion: let completion):
107+
completion(.success(stripe))
108+
case .loadCanadaInPersonPaymentsSwitchState(onCompletion: let completion):
109+
completion(.success(canada))
110+
default:
111+
break
112+
}
113+
}
114+
}
115+
}

0 commit comments

Comments
 (0)