Skip to content

Commit 469f8a6

Browse files
committed
8314 Add checkDeviceSupport to Card Present Store
1 parent aa8edab commit 469f8a6

File tree

3 files changed

+66
-12
lines changed

3 files changed

+66
-12
lines changed

Yosemite/Yosemite/Actions/CardPresentPaymentAction.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public enum CardPresentPaymentAction: Action {
2323
///
2424
case loadAccounts(siteID: Int64, onCompletion: (Result<Void, Error>) -> Void)
2525

26+
case checkDeviceSupport(siteID: Int64,
27+
cardReaderType: CardReaderType,
28+
discoveryMethod: CardReaderDiscoveryMethod,
29+
onCompletion: (Bool) -> Void)
30+
2631
/// Start the Card Reader discovery process.
2732
///
2833
case startCardReaderDiscovery(siteID: Int64,

Yosemite/Yosemite/Stores/CardPresentPaymentStore.swift

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ public final class CardPresentPaymentStore: Store {
8484
case .loadAccounts(let siteID, let onCompletion):
8585
loadAccounts(siteID: siteID,
8686
onCompletion: onCompletion)
87+
case .checkDeviceSupport(let siteID, let cardReaderType, let discoveryMethod, let completion):
88+
checkDeviceSupport(siteID: siteID,
89+
cardReaderType: cardReaderType,
90+
discoveryMethod: discoveryMethod,
91+
onCompletion: completion)
8792
case .startCardReaderDiscovery(let siteID, let discoveryMethod, let onReaderDiscovered, let onError):
8893
startCardReaderDiscovery(siteID: siteID,
8994
discoveryMethod: discoveryMethod,
@@ -128,19 +133,30 @@ public final class CardPresentPaymentStore: Store {
128133
// MARK: - Services
129134
//
130135
private extension CardPresentPaymentStore {
131-
func startCardReaderDiscovery(siteID: Int64,
132-
discoveryMethod: CardReaderDiscoveryMethod,
133-
onReaderDiscovered: @escaping (_ readers: [CardReader]) -> Void,
134-
onError: @escaping (Error) -> Void) {
136+
func checkDeviceSupport(siteID: Int64,
137+
cardReaderType: CardReaderType,
138+
discoveryMethod: CardReaderDiscoveryMethod,
139+
onCompletion: (Bool) -> Void) {
140+
prepareConfigProvider(siteID: siteID)
141+
onCompletion(cardReaderService.checkSupport(for: cardReaderType, configProvider: commonReaderConfigProvider, discoveryMethod: discoveryMethod))
142+
}
143+
144+
func prepareConfigProvider(siteID: Int64) {
145+
switch usingBackend {
146+
case .wcpay:
147+
commonReaderConfigProvider.setContext(siteID: siteID, remote: self.remote)
148+
case .stripe:
149+
commonReaderConfigProvider.setContext(siteID: siteID, remote: self.stripeRemote)
150+
}
151+
}
152+
153+
func startCardReaderDiscovery(siteID: Int64,
154+
discoveryMethod: CardReaderDiscoveryMethod,
155+
onReaderDiscovered: @escaping (_ readers: [CardReader]) -> Void,
156+
onError: @escaping (Error) -> Void) {
157+
prepareConfigProvider(siteID: siteID)
135158
do {
136-
switch usingBackend {
137-
case .wcpay:
138-
commonReaderConfigProvider.setContext(siteID: siteID, remote: self.remote)
139-
try cardReaderService.start(commonReaderConfigProvider, discoveryMethod: discoveryMethod)
140-
case .stripe:
141-
commonReaderConfigProvider.setContext(siteID: siteID, remote: self.stripeRemote)
142-
try cardReaderService.start(commonReaderConfigProvider, discoveryMethod: discoveryMethod)
143-
}
159+
try cardReaderService.start(commonReaderConfigProvider, discoveryMethod: discoveryMethod)
144160
} catch {
145161
return onError(error)
146162
}

Yosemite/YosemiteTests/Stores/CardPresentPaymentStoreTests.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -775,4 +775,37 @@ final class CardPresentPaymentStoreTests: XCTestCase {
775775
// Then
776776
XCTAssertEqual(result, account)
777777
}
778+
779+
func test_checkDeviceSupport_action_passes_configuration_provider_to_service() {
780+
let cardPresentStore = CardPresentPaymentStore(dispatcher: dispatcher,
781+
storageManager: storageManager,
782+
network: network,
783+
cardReaderService: mockCardReaderService)
784+
785+
let action = CardPresentPaymentAction.checkDeviceSupport(siteID: sampleSiteID,
786+
cardReaderType: .appleBuiltIn,
787+
discoveryMethod: .localMobile,
788+
onCompletion: { _ in })
789+
790+
cardPresentStore.onAction(action)
791+
792+
XCTAssertNotNil(mockCardReaderService.spyCheckSupportConfigProvider)
793+
}
794+
795+
func test_checkDeviceSupport_action_passes_reader_type_and_discovery_method_to_service() {
796+
let cardPresentStore = CardPresentPaymentStore(dispatcher: dispatcher,
797+
storageManager: storageManager,
798+
network: network,
799+
cardReaderService: mockCardReaderService)
800+
801+
let action = CardPresentPaymentAction.checkDeviceSupport(siteID: sampleSiteID,
802+
cardReaderType: .chipper,
803+
discoveryMethod: .bluetoothScan,
804+
onCompletion: { _ in })
805+
806+
cardPresentStore.onAction(action)
807+
808+
assertEqual(.bluetoothScan, mockCardReaderService.spyCheckSupportDiscoveryMethod)
809+
assertEqual(.chipper, mockCardReaderService.spyCheckSupportCardReaderType)
810+
}
778811
}

0 commit comments

Comments
 (0)