Skip to content

Commit e590dc1

Browse files
committed
move reader observation from aggregate to settings controller
1 parent 0163bfc commit e590dc1

File tree

4 files changed

+34
-45
lines changed

4 files changed

+34
-45
lines changed

WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ protocol PointOfSaleAggregateModelProtocol {
133133
publishCardReaderConnectionStatus()
134134
publishPaymentMessages()
135135
setupReaderReconnectionObservation()
136-
observeCardReaderForSettings()
137136
}
138137
}
139138

@@ -324,21 +323,6 @@ extension PointOfSaleAggregateModel {
324323
}
325324
}
326325

327-
private func observeCardReaderForSettings() {
328-
cardPresentPaymentService.readerConnectionStatusPublisher
329-
.sink(receiveValue: { [weak self] connectionStatus in
330-
guard let self else { return }
331-
let cardReader: CardPresentPaymentCardReader?
332-
switch connectionStatus {
333-
case .connected(let reader):
334-
cardReader = reader
335-
default:
336-
cardReader = nil
337-
}
338-
settingsController.updateCardReader(cardReader)
339-
})
340-
.store(in: &cancellables)
341-
}
342326

343327
/// Starts a payment immediately if a reader is connected.
344328
/// Otherwise, schedules a payment to start the next time a reader connects.

WooCommerce/Classes/POS/Models/PointOfSaleSettingsController.swift

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Combine
23
import struct Yosemite.SiteSetting
34
import enum Yosemite.Plugin
45
import class Yosemite.PluginsService
@@ -22,7 +23,6 @@ protocol PointOfSaleSettingsControllerProtocol {
2223
var connectedCardReader: CardPresentPaymentCardReader? { get }
2324

2425
func retrievePOSReceiptSettings() async
25-
func updateCardReader(_ cardReader: CardPresentPaymentCardReader?)
2626
}
2727

2828
@Observable final class PointOfSaleSettingsController: PointOfSaleSettingsControllerProtocol {
@@ -38,17 +38,32 @@ protocol PointOfSaleSettingsControllerProtocol {
3838
private let settingsService: PointOfSaleSettingsServiceProtocol
3939
private let siteSettings: [SiteSetting]
4040
private(set) var connectedCardReader: CardPresentPaymentCardReader?
41+
private var cancellables: AnyCancellable?
4142

4243
init(settingsService: PointOfSaleSettingsServiceProtocol,
44+
cardPresentPaymentService: CardPresentPaymentFacade,
4345
defaultSiteName: String? = ServiceLocator.stores.sessionManager.defaultSite?.name,
4446
siteSettings: [SiteSetting] = ServiceLocator.selectedSiteSettings.siteSettings) {
4547
self.settingsService = settingsService
4648
self.defaultSiteName = defaultSiteName
4749
self.siteSettings = siteSettings
50+
51+
observeCardReader(from: cardPresentPaymentService)
4852
}
4953

50-
func updateCardReader(_ cardReader: CardPresentPaymentCardReader?) {
51-
connectedCardReader = cardReader
54+
private func observeCardReader(from service: CardPresentPaymentFacade) {
55+
cancellables = service.readerConnectionStatusPublisher
56+
.sink(receiveValue: { [weak self] connectionStatus in
57+
guard let self else { return }
58+
let cardReader: CardPresentPaymentCardReader?
59+
switch connectionStatus {
60+
case .connected(let reader):
61+
cardReader = reader
62+
default:
63+
cardReader = nil
64+
}
65+
connectedCardReader = cardReader
66+
})
5267
}
5368

5469
var storeName: String {
@@ -149,8 +164,5 @@ final class PointOfSaleSettingsPreviewController: PointOfSaleSettingsControllerP
149164
// no-op
150165
}
151166

152-
func updateCardReader(_ cardReader: CardPresentPaymentCardReader?) {
153-
// no-op for preview
154-
}
155167
}
156168
#endif

WooCommerce/Classes/POS/TabBar/POSTabCoordinator.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ private extension POSTabCoordinator {
121121
cardPresentPaymentService: cardPresentPaymentService,
122122
orderController: PointOfSaleOrderController(orderService: orderService,
123123
receiptService: receiptService),
124-
settingsController: PointOfSaleSettingsController(settingsService: settingsService),
124+
settingsController: PointOfSaleSettingsController(settingsService: settingsService,
125+
cardPresentPaymentService: cardPresentPaymentService),
125126
collectOrderPaymentAnalyticsTracker: collectOrderPaymentAnalyticsTracker,
126127
searchHistoryService: POSSearchHistoryService(siteID: siteID),
127128
popularPurchasableItemsController: PointOfSaleItemsController(

WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleSettingsControllerTests.swift

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
import Testing
32
import Foundation
43
@testable import WooCommerce
@@ -9,11 +8,13 @@ import Storage
98
struct PointOfSaleSettingsControllerTests {
109
private let mockSettingsService = MockPointOfSaleSettingsService()
1110
private let mockStorageManager = MockStorageManager()
11+
private let mockCardPresentPaymentService = MockCardPresentPaymentService()
1212

1313
@Test func storeName_when_defaultSiteName_provided_then_returns_defaultSiteName() async throws {
1414
// Given
1515
let expectedStoreName = "My Test Store"
1616
let sut = PointOfSaleSettingsController(settingsService: mockSettingsService,
17+
cardPresentPaymentService: mockCardPresentPaymentService,
1718
defaultSiteName: expectedStoreName,
1819
siteSettings: [])
1920

@@ -27,6 +28,7 @@ struct PointOfSaleSettingsControllerTests {
2728
@Test func storeName_when_defaultSiteName_nil_then_returns_notSet() async throws {
2829
// Given
2930
let sut = PointOfSaleSettingsController(settingsService: mockSettingsService,
31+
cardPresentPaymentService: mockCardPresentPaymentService,
3032
defaultSiteName: nil,
3133
siteSettings: [])
3234

@@ -41,6 +43,7 @@ struct PointOfSaleSettingsControllerTests {
4143
// Given
4244
let siteSettings = makeSampleSiteSettings()
4345
let sut = PointOfSaleSettingsController(settingsService: mockSettingsService,
46+
cardPresentPaymentService: mockCardPresentPaymentService,
4447
defaultSiteName: "Test Store",
4548
siteSettings: siteSettings)
4649

@@ -54,6 +57,7 @@ struct PointOfSaleSettingsControllerTests {
5457
@Test func connectedCardReader_initially_nil() async throws {
5558
// Given
5659
let sut = PointOfSaleSettingsController(settingsService: mockSettingsService,
60+
cardPresentPaymentService: mockCardPresentPaymentService,
5761
defaultSiteName: "Test Store",
5862
siteSettings: [])
5963

@@ -64,35 +68,26 @@ struct PointOfSaleSettingsControllerTests {
6468
#expect(cardReader == nil)
6569
}
6670

67-
@Test func updateCardReader_sets_connectedCardReader() async throws {
71+
@Test func cardReader_observation_updates_connectedCardReader() async throws {
6872
// Given
73+
let mockService = MockCardPresentPaymentService()
6974
let sut = PointOfSaleSettingsController(settingsService: mockSettingsService,
75+
cardPresentPaymentService: mockService,
7076
defaultSiteName: "Test Store",
7177
siteSettings: [])
72-
let cardReader = CardPresentPaymentCardReader(name: "WisePad 3", batteryLevel: 0.85)
78+
79+
// Initially nil
80+
#expect(sut.connectedCardReader == nil)
7381

7482
// When
75-
sut.updateCardReader(cardReader)
83+
let cardReader = CardPresentPaymentCardReader(name: "WisePad 3", batteryLevel: 0.75)
84+
mockService.connectedReader = cardReader
7685

7786
// Then
7887
#expect(sut.connectedCardReader?.name == "WisePad 3")
79-
#expect(sut.connectedCardReader?.batteryLevel == 0.85)
88+
#expect(sut.connectedCardReader?.batteryLevel == 0.75)
8089
}
8190

82-
@Test func updateCardReader_with_nil_clears_connectedCardReader() async throws {
83-
// Given
84-
let sut = PointOfSaleSettingsController(settingsService: mockSettingsService,
85-
defaultSiteName: "Test Store",
86-
siteSettings: [])
87-
let cardReader = CardPresentPaymentCardReader(name: "WisePad 3", batteryLevel: 0.85)
88-
sut.updateCardReader(cardReader)
89-
90-
// When
91-
sut.updateCardReader(nil)
92-
93-
// Then
94-
#expect(sut.connectedCardReader == nil)
95-
}
9691

9792
private func makeSampleSiteSettings() -> [Yosemite.SiteSetting] {
9893
return [
@@ -154,7 +149,4 @@ final class MockPointOfSaleSettingsController: PointOfSaleSettingsControllerProt
154149
// no-op
155150
}
156151

157-
func updateCardReader(_ cardReader: CardPresentPaymentCardReader?) {
158-
// no-op
159-
}
160152
}

0 commit comments

Comments
 (0)