@@ -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