Skip to content

Commit 705f431

Browse files
committed
Added another order storage unit test.
1 parent 10aa71c commit 705f431

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

Yosemite/Yosemite/Stores/OrderStore.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,9 @@ private extension OrderStore {
8080

8181
let storage = storageManager.viewStorage
8282
let storageOrder = storage.loadOrder(orderID: readOnlyOrder.orderID) ?? storage.insertNewObject(ofType: Storage.Order.self)
83-
84-
// TODO: items & coupons
85-
8683
storageOrder.update(with: readOnlyOrder)
84+
handleOrderItems(readOnlyOrder, storageOrder, storage)
85+
handleOrderCoupons(readOnlyOrder, storageOrder, storage)
8786
storage.saveIfNeeded()
8887
}
8988

@@ -103,7 +102,7 @@ private extension OrderStore {
103102
storage.saveIfNeeded()
104103
}
105104

106-
/// Updates, inserts, and prunes the provided StorageOrder's items using the provided read-only Order's items
105+
/// Updates, inserts, or prunes the provided StorageOrder's items using the provided read-only Order's items
107106
///
108107
func handleOrderItems(_ readOnlyOrder: Networking.Order, _ storageOrder: Storage.Order, _ storage: StorageType) {
109108
guard !readOnlyOrder.items.isEmpty else {
@@ -131,7 +130,7 @@ private extension OrderStore {
131130
})
132131
}
133132

134-
/// Updates, inserts, and prunes the provided StorageOrder's coupons using the provided read-only Order's coupons
133+
/// Updates, inserts, or prunes the provided StorageOrder's coupons using the provided read-only Order's coupons
135134
///
136135
func handleOrderCoupons(_ readOnlyOrder: Networking.Order, _ storageOrder: Storage.Order, _ storage: StorageType) {
137136
guard !readOnlyOrder.coupons.isEmpty else {

Yosemite/YosemiteTests/Stores/OrderStoreTests.swift

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class OrderStoreTests: XCTestCase {
8080

8181
/// Verifies that `OrderAction.retrieveOrders` effectively persists all of the order fields correctly across all of the related Order objects (items, coupons, etc).
8282
///
83-
func testRetrieveOrdersEffectivelyPersistsOrderFields() {
83+
func testRetrieveOrdersEffectivelyPersistsOrderFieldsAndRelatedObjects() {
8484
let expectation = self.expectation(description: "Persist order list")
8585
let orderStore = OrderStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
8686
let remoteOrder = sampleOrder()
@@ -89,7 +89,9 @@ class OrderStoreTests: XCTestCase {
8989
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Order.self), 0)
9090

9191
let action = OrderAction.retrieveOrders(siteID: 123) { (orders, error) in
92+
XCTAssertNotNil(orders)
9293
XCTAssertNil(error)
94+
9395
let predicate = NSPredicate(format: "orderID = %ld", remoteOrder.orderID)
9496
let storedOrder = self.viewStorage.firstObject(ofType: Storage.Order.self, matching: predicate)
9597
let readOnlyStoredOrder = storedOrder?.toReadOnly()
@@ -170,6 +172,34 @@ class OrderStoreTests: XCTestCase {
170172
wait(for: [expectation], timeout: Constants.expectationTimeout)
171173
}
172174

175+
/// Verifies that `OrderAction.retrieveOrder` effectively persists all of the remote order fields correctly across all of the related `Order` objects (items, coupons, etc).
176+
///
177+
func testRetrieveSingleOrderEffectivelyPersistsOrderFieldsAndRelatedObjects() {
178+
let expectation = self.expectation(description: "Persist order")
179+
let orderStore = OrderStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
180+
let remoteOrder = sampleOrder()
181+
182+
network.simulateResponse(requestUrlSuffix: "orders/963", filename: "order")
183+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Order.self), 0)
184+
185+
let action = OrderAction.retrieveOrder(siteID: 123, orderID: 963) { (order, error) in
186+
XCTAssertNotNil(order)
187+
XCTAssertNil(error)
188+
189+
let predicate = NSPredicate(format: "orderID = %ld", remoteOrder.orderID)
190+
let storedOrder = self.viewStorage.firstObject(ofType: Storage.Order.self, matching: predicate)
191+
let readOnlyStoredOrder = storedOrder?.toReadOnly()
192+
XCTAssertNotNil(storedOrder)
193+
XCTAssertNotNil(readOnlyStoredOrder)
194+
XCTAssertEqual(readOnlyStoredOrder, remoteOrder)
195+
196+
expectation.fulfill()
197+
}
198+
199+
orderStore.onAction(action)
200+
wait(for: [expectation], timeout: Constants.expectationTimeout)
201+
}
202+
173203
/// Verifies that OrderAction.retrieveOrder returns an error whenever there is an error response from the backend.
174204
///
175205
func testRetrieveSingleOrderReturnsErrorUponReponseError() {

0 commit comments

Comments
 (0)