Skip to content

Commit 8e8945b

Browse files
committed
OrdersRemote: Search Order API
1 parent 744668f commit 8e8945b

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

Networking/Networking/Remote/OrdersRemote.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,35 @@ public class OrdersRemote: Remote {
6464
enqueue(request, mapper: mapper, completion: completion)
6565
}
6666

67+
/// Retrieves all of the `Orders` available.
68+
///
69+
/// - Parameters:
70+
/// - siteID: Site for which we'll fetch remote orders.
71+
/// - keyword: Search string that should be matched by the orders.
72+
/// - pageNumber: Number of page that should be retrieved.
73+
/// - pageSize: Number of Orders to be retrieved per page.
74+
/// - completion: Closure to be executed upon completion.
75+
///
76+
public func searchOrders(for siteID: Int,
77+
keyword: String,
78+
pageNumber: Int = Defaults.pageNumber,
79+
pageSize: Int = Defaults.pageSize,
80+
completion: @escaping ([Order]?, Error?) -> Void)
81+
{
82+
let parameters = [
83+
ParameterKeys.keyword: keyword,
84+
ParameterKeys.page: String(pageNumber),
85+
ParameterKeys.perPage: String(pageSize),
86+
ParameterKeys.status: Defaults.statusAny
87+
]
88+
89+
let path = Constants.ordersPath
90+
let request = JetpackRequest(wooApiVersion: .mark3, method: .get, siteID: siteID, path: path, parameters: parameters)
91+
let mapper = OrderListMapper(siteID: siteID)
92+
93+
enqueue(request, mapper: mapper, completion: completion)
94+
}
95+
6796
/// Updates the `OrderStatus` of a given Order.
6897
///
6998
/// - Parameters:
@@ -121,6 +150,7 @@ public extension OrdersRemote {
121150
private enum ParameterKeys {
122151
static let addedByUser: String = "added_by_user"
123152
static let customerNote: String = "customer_note"
153+
static let keyword: String = "search"
124154
static let note: String = "note"
125155
static let page: String = "page"
126156
static let perPage: String = "per_page"

Networking/NetworkingTests/Remote/OrdersRemoteTests.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,42 @@ class OrdersRemoteTests: XCTestCase {
108108
}
109109

110110

111+
// MARK: - Search Orders
112+
113+
/// Verifies that searchOrders properly parses the `orders-load-all` sample response.
114+
///
115+
func testSearchOrdersProperlyReturnsParsedOrders() {
116+
let remote = OrdersRemote(network: network)
117+
let expectation = self.expectation(description: "Load All Orders")
118+
119+
network.simulateResponse(requestUrlSuffix: "orders", filename: "orders-load-all")
120+
121+
remote.searchOrders(for: sampleSiteID, keyword: String()) { (orders, error) in
122+
XCTAssertNil(error)
123+
XCTAssertNotNil(orders)
124+
XCTAssert(orders!.count == 3)
125+
expectation.fulfill()
126+
}
127+
128+
wait(for: [expectation], timeout: Constants.expectationTimeout)
129+
}
130+
131+
/// Verifies that searchOrders properly relays Networking Layer errors.
132+
///
133+
func testSearchOrdersProperlyRelaysNetwokingErrors() {
134+
let remote = OrdersRemote(network: network)
135+
let expectation = self.expectation(description: "Load All Orders")
136+
137+
remote.searchOrders(for: sampleSiteID, keyword: String()) { (orders, error) in
138+
XCTAssertNil(orders)
139+
XCTAssertNotNil(error)
140+
expectation.fulfill()
141+
}
142+
143+
wait(for: [expectation], timeout: Constants.expectationTimeout)
144+
}
145+
146+
111147
// MARK: - Update Orders Tests
112148

113149
/// Verifies that updateOrder properly parses the `order` sample response.

0 commit comments

Comments
 (0)