Skip to content

Commit 13850f1

Browse files
authored
Merge pull request #5477 from woocommerce/issue/5405-yosemite-create-order-action
Order Creation: Add action to create a manual order in Yosemite layer
2 parents 8094dee + e49a35a commit 13850f1

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

Yosemite/Yosemite/Actions/OrderAction.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,8 @@ public enum OrderAction: Action {
6868
/// Creates a simple payments order with a specific amount value and no tax.
6969
///
7070
case createSimplePaymentsOrder(siteID: Int64, amount: String, onCompletion: (Result<Order, Error>) -> Void)
71+
72+
/// Creates a manual order with the provided order details.
73+
///
74+
case createOrder(siteID: Int64, order: Order, onCompletion: (Result<Order, Error>) -> Void)
7175
}

Yosemite/Yosemite/Stores/OrderStore.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ public class OrderStore: Store {
6464

6565
case let .createSimplePaymentsOrder(siteID, amount, onCompletion):
6666
createSimplePaymentsOrder(siteID: siteID, amount: amount, onCompletion: onCompletion)
67+
case let .createOrder(siteID, order, onCompletion):
68+
createOrder(siteID: siteID, order: order, onCompletion: onCompletion)
6769
}
6870
}
6971
}
@@ -263,6 +265,21 @@ private extension OrderStore {
263265
}
264266
}
265267

268+
/// Creates a manual order with the provided order details.
269+
///
270+
func createOrder(siteID: Int64, order: Order, onCompletion: @escaping (Result<Order, Error>) -> Void) {
271+
remote.createOrder(siteID: siteID, order: order, fields: []) { [weak self] result in
272+
switch result {
273+
case .success(let order):
274+
self?.upsertStoredOrdersInBackground(readOnlyOrders: [order], onCompletion: {
275+
onCompletion(result)
276+
})
277+
case .failure:
278+
onCompletion(result)
279+
}
280+
}
281+
}
282+
266283
/// Updates an Order with the specified Status.
267284
///
268285
func updateOrder(siteID: Int64, orderID: Int64, status: OrderStatusEnum, onCompletion: @escaping (Error?) -> Void) {

Yosemite/YosemiteTests/Stores/OrderStoreTests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,24 @@ final class OrderStoreTests: XCTestCase {
671671
// Then
672672
XCTAssertNotNil(storedOrder)
673673
}
674+
675+
func test_create_order_stores_orders_correctly() throws {
676+
// Given
677+
let store = OrderStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
678+
network.simulateResponse(requestUrlSuffix: "orders", filename: "order")
679+
680+
// When
681+
let storedOrder: Yosemite.Order? = waitFor { promise in
682+
let action = OrderAction.createOrder(siteID: self.sampleSiteID, order: self.sampleOrder()) { _ in
683+
let order = self.storageManager.viewStorage.loadOrder(siteID: self.sampleSiteID, orderID: self.sampleOrderID)?.toReadOnly()
684+
promise(order)
685+
}
686+
store.onAction(action)
687+
}
688+
689+
// Then
690+
XCTAssertNotNil(storedOrder)
691+
}
674692
}
675693

676694

0 commit comments

Comments
 (0)