Skip to content

Commit 494bd14

Browse files
committed
Delete items and coupons if they are removed
1 parent 28ed413 commit 494bd14

File tree

2 files changed

+120
-10
lines changed

2 files changed

+120
-10
lines changed

Yosemite/Yosemite/Stores/OrderStore.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,10 @@ extension OrderStore {
164164
private func handleOrderItems(_ readOnlyOrder: Networking.Order, _ storageOrder: Storage.Order, _ storage: StorageType) {
165165
guard !readOnlyOrder.items.isEmpty else {
166166
// No items in the read-only order, so remove all the items in Storage.Order
167-
storageOrder.items?.forEach { storageOrder.removeFromItems($0) }
167+
storageOrder.items?.forEach {
168+
storageOrder.removeFromItems($0)
169+
storage.deleteObject($0)
170+
}
168171
return
169172
}
170173

@@ -183,6 +186,7 @@ extension OrderStore {
183186
storageOrder.items?.forEach({ storageItem in
184187
if readOnlyOrder.items.first(where: { $0.itemID == storageItem.itemID } ) == nil {
185188
storageOrder.removeFromItems(storageItem)
189+
storage.deleteObject(storageItem)
186190
}
187191
})
188192
}
@@ -192,7 +196,10 @@ extension OrderStore {
192196
private func handleOrderCoupons(_ readOnlyOrder: Networking.Order, _ storageOrder: Storage.Order, _ storage: StorageType) {
193197
guard !readOnlyOrder.coupons.isEmpty else {
194198
// No coupons in the read-only order, so remove all the coupons in Storage.Order
195-
storageOrder.coupons?.forEach { storageOrder.removeFromCoupons($0) }
199+
storageOrder.coupons?.forEach {
200+
storageOrder.removeFromCoupons($0)
201+
storage.deleteObject($0)
202+
}
196203
return
197204
}
198205

@@ -211,6 +218,7 @@ extension OrderStore {
211218
storageOrder.coupons?.forEach({ storageCoupon in
212219
if readOnlyOrder.coupons.first(where: { $0.couponID == storageCoupon.couponID } ) == nil {
213220
storageOrder.removeFromCoupons(storageCoupon)
221+
storage.deleteObject(storageCoupon)
214222
}
215223
})
216224
}

Yosemite/YosemiteTests/Stores/OrderStoreTests.swift

Lines changed: 110 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,27 @@ class OrderStoreTests: XCTestCase {
221221
func testUpdateStoredOrderEffectivelyUpdatesPreexistantOrder() {
222222
let orderStore = OrderStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
223223

224-
XCTAssertNil(viewStorage.firstObject(ofType: Storage.Order.self, matching: nil))
224+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Order.self), 0)
225+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderItem.self), 0)
226+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderCoupon.self), 0)
225227
orderStore.upsertStoredOrder(readOnlyOrder: sampleOrder())
226-
orderStore.upsertStoredOrder(readOnlyOrder: sampleOrderMutated())
227-
XCTAssert(viewStorage.countObjects(ofType: Storage.Order.self, matching: nil) == 1)
228+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Order.self), 1)
229+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderItem.self), 2)
230+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderCoupon.self), 1)
228231

229-
let expectedOrder = sampleOrderMutated()
230-
let storageOrder = viewStorage.loadOrder(orderID: expectedOrder.orderID)
231-
XCTAssertEqual(storageOrder?.toReadOnly(), expectedOrder)
232+
orderStore.upsertStoredOrder(readOnlyOrder: sampleOrderMutated())
233+
let storageOrder1 = viewStorage.loadOrder(orderID: sampleOrderMutated().orderID)
234+
XCTAssertEqual(storageOrder1?.toReadOnly(), sampleOrderMutated())
235+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Order.self), 1)
236+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderItem.self), 3)
237+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderCoupon.self), 2)
238+
239+
orderStore.upsertStoredOrder(readOnlyOrder: sampleOrderMutated2())
240+
let storageOrder2 = viewStorage.loadOrder(orderID: sampleOrderMutated2().orderID)
241+
XCTAssertEqual(storageOrder2?.toReadOnly(), sampleOrderMutated2())
242+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Order.self), 1)
243+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderItem.self), 1)
244+
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.OrderCoupon.self), 0)
232245
}
233246

234247
/// Verifies that `upsertStoredOrder` effectively inserts a new Order, with the specified payload.
@@ -400,10 +413,35 @@ private extension OrderStoreTests {
400413
total: "41.20",
401414
totalTax: "1.20",
402415
paymentMethodTitle: "Credit Card (Stripe)",
403-
items: sampleItems(),
416+
items: sampleItemsMutated(),
404417
billingAddress: sampleAddress(),
405418
shippingAddress: sampleAddress(),
406-
coupons: sampleCoupons())
419+
coupons: sampleCouponsMutated())
420+
}
421+
422+
func sampleOrderMutated2() -> Networking.Order {
423+
return Order(siteID: sampleSiteID,
424+
orderID: 963,
425+
parentID: 0,
426+
customerID: 11,
427+
number: "963",
428+
status: .completed,
429+
currency: "USD",
430+
customerNote: "",
431+
dateCreated: date(with: "2018-04-03T23:05:12"),
432+
dateModified: date(with: "2018-04-03T23:05:14"),
433+
datePaid: date(with: "2018-04-03T23:05:14"),
434+
discountTotal: "40.00",
435+
discountTax: "1.20",
436+
shippingTotal: "0.00",
437+
shippingTax: "0.00",
438+
total: "41.20",
439+
totalTax: "1.20",
440+
paymentMethodTitle: "Credit Card (Stripe)",
441+
items: sampleItemsMutated2(),
442+
billingAddress: sampleAddress(),
443+
shippingAddress: sampleAddress(),
444+
coupons: [])
407445
}
408446

409447
func sampleAddress() -> Networking.Address {
@@ -428,6 +466,18 @@ private extension OrderStoreTests {
428466
return [coupon1]
429467
}
430468

469+
func sampleCouponsMutated() -> [Networking.OrderCouponLine] {
470+
let coupon1 = OrderCouponLine(couponID: 894,
471+
code: "30$off",
472+
discount: "20",
473+
discountTax: "12.2")
474+
let coupon2 = OrderCouponLine(couponID: 12,
475+
code: "hithere!",
476+
discount: "50",
477+
discountTax: "0.66")
478+
return [coupon1, coupon2]
479+
}
480+
431481
func sampleItems() -> [Networking.OrderItem] {
432482
let item1 = OrderItem(itemID: 890,
433483
name: "Fruits Basket (Mix & Match Product)",
@@ -454,6 +504,58 @@ private extension OrderStoreTests {
454504
return [item1, item2]
455505
}
456506

507+
func sampleItemsMutated() -> [Networking.OrderItem] {
508+
let item1 = OrderItem(itemID: 890,
509+
name: "Fruits Basket (Mix & Match Product) 2",
510+
productID: 52,
511+
quantity: 10,
512+
sku: "",
513+
subtotal: "60.00",
514+
subtotalTax: "4.00",
515+
taxClass: "",
516+
total: "64.00",
517+
totalTax: "4.00",
518+
variationID: 0)
519+
let item2 = OrderItem(itemID: 891,
520+
name: "Fruits Bundle 2",
521+
productID: 234,
522+
quantity: 3,
523+
sku: "5555-A",
524+
subtotal: "30.00",
525+
subtotalTax: "0.40",
526+
taxClass: "",
527+
total: "30.40",
528+
totalTax: "0.40",
529+
variationID: 0)
530+
let item3 = OrderItem(itemID: 23,
531+
name: "Some new product",
532+
productID: 12,
533+
quantity: 1,
534+
sku: "QWE123",
535+
subtotal: "130.00",
536+
subtotalTax: "10.40",
537+
taxClass: "",
538+
total: "140.40",
539+
totalTax: "10.40",
540+
variationID: 0)
541+
return [item1, item2, item3]
542+
}
543+
544+
func sampleItemsMutated2() -> [Networking.OrderItem] {
545+
let item1 = OrderItem(itemID: 890,
546+
name: "Fruits Basket (Mix & Match Product) 2",
547+
productID: 52,
548+
quantity: 10,
549+
sku: "",
550+
subtotal: "60.00",
551+
subtotalTax: "4.00",
552+
taxClass: "",
553+
total: "64.00",
554+
totalTax: "4.00",
555+
variationID: 0)
556+
return [item1]
557+
}
558+
457559
func date(with dateString: String) -> Date {
458560
guard let date = DateFormatter.Defaults.dateTimeFormatter.date(from: dateString) else {
459561
return Date()

0 commit comments

Comments
 (0)