Skip to content

Commit 040be92

Browse files
committed
Move deleteOrder to existing POSOrderService
1 parent bfcb359 commit 040be92

File tree

12 files changed

+88
-152
lines changed

12 files changed

+88
-152
lines changed

Modules/Sources/Yosemite/Tools/POS/POSOrderManagementService.swift

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

Modules/Sources/Yosemite/Tools/POS/POSOrderService.swift

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import class WooFoundation.CurrencyFormatter
44
import enum WooFoundation.CurrencyCode
55
import struct Combine.AnyPublisher
66
import struct NetworkingCore.JetpackSite
7+
import protocol Storage.StorageManagerType
78

89
public protocol POSOrderServiceProtocol {
910
/// Syncs order based on the cart.
@@ -13,31 +14,38 @@ public protocol POSOrderServiceProtocol {
1314
func syncOrder(cart: POSCart, currency: CurrencyCode) async throws -> Order
1415
func updatePOSOrder(orderID: Int64, recipientEmail: String) async throws
1516
func markOrderAsCompletedWithCashPayment(order: Order, changeDueAmount: String?) async throws
17+
func deleteOrder(siteID: Int64, order: Order, deletePermanently: Bool, onCompletion: @escaping (Result<Order, Error>) -> Void)
1618
}
1719

1820
public final class POSOrderService: POSOrderServiceProtocol {
1921
private let siteID: Int64
2022
private let ordersRemote: POSOrdersRemoteProtocol
23+
private let orderStoreMethods: OrderStoreMethodsProtocol
2124

2225
public convenience init?(siteID: Int64,
2326
credentials: Credentials?,
2427
selectedSite: AnyPublisher<JetpackSite?, Never>,
25-
appPasswordSupportState: AnyPublisher<Bool, Never>) {
28+
appPasswordSupportState: AnyPublisher<Bool, Never>,
29+
storageManager: StorageManagerType) {
2630
guard let credentials else {
2731
DDLogError("⛔️ Could not create POSOrderService due to not finding credentials")
2832
return nil
2933
}
3034
let network = AlamofireNetwork(credentials: credentials,
3135
selectedSite: selectedSite,
3236
appPasswordSupportState: appPasswordSupportState)
37+
let remote = OrdersRemote(network: network)
3338
self.init(siteID: siteID,
34-
ordersRemote: OrdersRemote(network: network))
39+
ordersRemote: remote,
40+
orderStoreMethods: OrderStoreMethods(storageManager: storageManager, remote: remote))
3541
}
3642

37-
public init(siteID: Int64,
38-
ordersRemote: POSOrdersRemoteProtocol) {
43+
internal init(siteID: Int64,
44+
ordersRemote: POSOrdersRemoteProtocol,
45+
orderStoreMethods: OrderStoreMethodsProtocol) {
3946
self.siteID = siteID
4047
self.ordersRemote = ordersRemote
48+
self.orderStoreMethods = orderStoreMethods
4149
}
4250

4351
// MARK: - Protocol conformance
@@ -81,6 +89,10 @@ public final class POSOrderService: POSOrderServiceProtocol {
8189
throw POSOrderServiceError.updateOrderFailed
8290
}
8391
}
92+
93+
public func deleteOrder(siteID: Int64, order: Order, deletePermanently: Bool, onCompletion: @escaping (Result<Order, Error>) -> Void) {
94+
orderStoreMethods.deleteOrder(siteID: siteID, order: order, deletePermanently: deletePermanently, onCompletion: onCompletion)
95+
}
8496
}
8597

8698
private extension Order {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Foundation
2+
@testable import Yosemite
3+
import Networking
4+
5+
final class MockOrderStoreMethods: OrderStoreMethodsProtocol {
6+
var deleteOrderCalled = false
7+
var deletedOrder: Order?
8+
var deletedSiteID: Int64?
9+
var deletedPermanently: Bool?
10+
var deleteOrderResult: Result<Order, Error> = .success(Order.fake())
11+
12+
func deleteOrder(siteID: Int64,
13+
order: Order,
14+
deletePermanently: Bool,
15+
onCompletion: @escaping (Result<Order, Error>) -> Void) {
16+
deleteOrderCalled = true
17+
deletedOrder = order
18+
deletedSiteID = siteID
19+
deletedPermanently = deletePermanently
20+
onCompletion(deleteOrderResult)
21+
}
22+
}

Modules/Tests/YosemiteTests/Tools/POS/POSOrderServiceTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ import Testing
55
struct POSOrderServiceTests {
66
let sut: POSOrderService
77
let mockOrdersRemote: MockPOSOrdersRemote
8+
let mockOrderStoreMethods: MockOrderStoreMethods
89

910
init() {
1011
let mockOrdersRemote = MockPOSOrdersRemote()
12+
let mockOrderStoreMethods = MockOrderStoreMethods()
1113
self.mockOrdersRemote = mockOrdersRemote
12-
self.sut = POSOrderService(siteID: 123, ordersRemote: mockOrdersRemote)
14+
self.mockOrderStoreMethods = mockOrderStoreMethods
15+
self.sut = POSOrderService(siteID: 123, ordersRemote: mockOrdersRemote, orderStoreMethods: mockOrderStoreMethods)
1316
}
1417

1518
@Test

WooCommerce/Classes/POS/Adaptors/POSServiceLocatorAdaptor.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ final class POSServiceLocatorAdaptor: POSDependencyProviding {
3030
var externalViews: POSExternalViewProviding {
3131
POSExternalViewAdaptor()
3232
}
33-
34-
var orderManagement: POSOrderManagementServiceProtocol {
35-
POSOrderManagementServiceAdaptor()
36-
}
3733
}
3834

3935
// MARK: - Individual Service Adaptors
@@ -123,11 +119,3 @@ private struct POSExternalViewAdaptor: POSExternalViewProviding {
123119
}
124120
}
125121

126-
private struct POSOrderManagementServiceAdaptor: POSOrderManagementServiceProtocol {
127-
func deleteOrder(siteID: Int64, order: Order, deletePermanently: Bool, onCompletion: @escaping (Result<Order, Error>) -> Void) {
128-
let action = OrderAction.deleteOrder(siteID: siteID, order: order, deletePermanently: deletePermanently, onCompletion: onCompletion)
129-
Task { @MainActor in
130-
ServiceLocator.stores.dispatch(action)
131-
}
132-
}
133-
}

WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import enum WooFoundation.CurrencyCode
2020
import protocol WooFoundation.Analytics
2121
import enum Alamofire.AFError
2222
import class Yosemite.OrderTotalsCalculator
23-
import protocol Yosemite.POSOrderManagementServiceProtocol
2423

2524
enum SyncOrderState {
2625
case newOrder
@@ -46,13 +45,11 @@ protocol PointOfSaleOrderControllerProtocol {
4645
receiptSender: POSReceiptSending,
4746
currencySettingsProvider: POSCurrencySettingsProviding,
4847
analytics: POSAnalyticsProviding,
49-
orderManagement: POSOrderManagementServiceProtocol,
5048
celebration: PaymentCaptureCelebrationProtocol = PaymentCaptureCelebration()) {
5149
self.orderService = orderService
5250
self.receiptSender = receiptSender
5351
self.currencySettingsProvider = currencySettingsProvider
5452
self.analytics = analytics
55-
self.orderManagement = orderManagement
5653
self.celebration = celebration
5754
}
5855

@@ -61,7 +58,6 @@ protocol PointOfSaleOrderControllerProtocol {
6158
private let currencySettingsProvider: POSCurrencySettingsProviding
6259
private let celebration: PaymentCaptureCelebrationProtocol
6360
private let analytics: POSAnalyticsProviding
64-
private let orderManagement: POSOrderManagementServiceProtocol
6561

6662
private(set) var orderState: PointOfSaleInternalOrderState = .idle
6763
private var order: Order? = nil
@@ -129,7 +125,7 @@ protocol PointOfSaleOrderControllerProtocol {
129125

130126
await withCheckedContinuation { continuation in
131127
Task { @MainActor in
132-
orderManagement.deleteOrder(siteID: order.siteID, order: order, deletePermanently: true) { _ in
128+
orderService.deleteOrder(siteID: order.siteID, order: order, deletePermanently: true) { _ in
133129
continuation.resume()
134130
}
135131
}

WooCommerce/Classes/POS/Presentation/PointOfSaleEntryPointView.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ public struct PointOfSaleEntryPointView: View {
9393
self.orderController = PointOfSaleOrderController(orderService: orderService,
9494
receiptSender: receiptSender,
9595
currencySettingsProvider: services.currency,
96-
analytics: services.analytics,
97-
orderManagement: services.orderManagement)
96+
analytics: services.analytics)
9897
self.settingsController = PointOfSaleSettingsController(siteID: siteID,
9998
settingsService: settingsService,
10099
cardPresentPaymentService: cardPresentPaymentService,

WooCommerce/Classes/POS/Protocols/POSDependencyProviding.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import enum Experiments.FeatureFlag
55
import struct Yosemite.Coupon
66
import enum Yosemite.CouponDiscountType
77
import enum Yosemite.POSItem
8-
import protocol Yosemite.POSOrderManagementServiceProtocol
98

109
/// POSDepenencyProviding is part of the POS entry point that defines the external dependencies from the Woo app that POS depends on
1110

@@ -73,5 +72,4 @@ public protocol POSDependencyProviding {
7372
var connectivity: POSConnectivityProviding { get }
7473
var externalNavigation: POSExternalNavigationProviding { get }
7574
var externalViews: POSExternalViewProviding { get }
76-
var orderManagement: POSOrderManagementServiceProtocol { get }
7775
}

WooCommerce/Classes/POS/TabBar/POSTabCoordinator.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ private extension POSTabCoordinator {
146146
let orderService = POSOrderService(siteID: siteID,
147147
credentials: credentials,
148148
selectedSite: defaultSitePublisher,
149-
appPasswordSupportState: isAppPasswordSupported),
149+
appPasswordSupportState: isAppPasswordSupported,
150+
storageManager: storageManager),
150151
#available(iOS 17.0, *) {
151152
let posView = PointOfSaleEntryPointView(
152153
siteID: siteID,

WooCommerce/Classes/POS/Utils/PreviewHelpers.swift

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import protocol Yosemite.POSItemFetchAnalyticsTracking
4545
import protocol Yosemite.POSOrderListFetchStrategyFactoryProtocol
4646
import protocol Yosemite.POSOrderListFetchStrategy
4747
import protocol Yosemite.PointOfSaleCouponFetchStrategyFactoryProtocol
48-
import protocol Yosemite.POSOrderManagementServiceProtocol
4948

5049
// MARK: - PreviewProvider helpers
5150
//
@@ -442,13 +441,16 @@ final class POSCollectOrderPaymentPreviewAnalytics: POSCollectOrderPaymentAnalyt
442441
}
443442

444443
final class POSOrderServicePreview: POSOrderServiceProtocol {
444+
445445
func syncOrder(cart: POSCart, currency: CurrencyCode) async throws -> Order {
446446
.empty
447447
}
448448

449449
func updatePOSOrder(orderID: Int64, recipientEmail: String) async throws {}
450450

451451
func markOrderAsCompletedWithCashPayment(order: Yosemite.Order, changeDueAmount: String?) async throws {}
452+
453+
func deleteOrder(siteID: Int64, order: Yosemite.Order, deletePermanently: Bool, onCompletion: @escaping (Result<Yosemite.Order, any Error>) -> Void) {}
452454
}
453455

454456
final class POSReceiptServicePreview: POSReceiptServiceProtocol {
@@ -538,13 +540,6 @@ final class POSPreviewServices: POSDependencyProviding {
538540
var connectivity: POSConnectivityProviding = EmptyPOSConnectivityProvider()
539541
var externalNavigation: POSExternalNavigationProviding = EmptyPOSExternalNavigation()
540542
var externalViews: POSExternalViewProviding = EmptyPOSExternalView()
541-
var orderManagement: POSOrderManagementServiceProtocol = POSPreviewOrderManagementService()
542-
}
543-
544-
final class POSPreviewOrderManagementService: POSOrderManagementServiceProtocol {
545-
func deleteOrder(siteID: Int64, order: Order, deletePermanently: Bool, onCompletion: @escaping (Result<Order, Error>) -> Void) {
546-
onCompletion(.success(order))
547-
}
548543
}
549544

550545
// MARK: - Preview Catalog Services

0 commit comments

Comments
 (0)