@@ -59,6 +59,10 @@ import kotlin.test.assertEquals
5959import kotlin.test.assertNull
6060import kotlin.test.assertTrue
6161
62+ private const val COD_PAYMENT_METHOD_ID = " cod"
63+ private const val CUSTOM_PAYMENT_METHOD_TITLE = " Pay in Person"
64+
65+
6266@InternalCoroutinesApi
6367@Config(manifest = Config .NONE )
6468@RunWith(RobolectricTestRunner ::class )
@@ -194,8 +198,9 @@ class WCOrderStoreTest {
194198 ordersDaoDecorator.insertOrUpdateOrder(orderModel)
195199 val site = SiteModel ().apply { id = orderModel.localSiteId.value }
196200 val result = RemoteOrderPayload .Updating (orderModel.copy(status = CoreOrderStatus .REFUNDED .value), site)
197- whenever(orderRestClient.updateOrderStatus(orderModel, site, CoreOrderStatus .REFUNDED .value))
198- .thenReturn(result)
201+ whenever(orderRestClient
202+ .updateOrderStatusAndPaymentMethod(orderModel, site, CoreOrderStatus .REFUNDED .value)
203+ ).thenReturn(result)
199204
200205 orderStore.updateOrderStatus(orderModel.orderId, site, WCOrderStatusModel (CoreOrderStatus .REFUNDED .value))
201206 .toList()
@@ -325,7 +330,7 @@ class WCOrderStoreTest {
325330 .saveToDb()
326331 val site = SiteModel ().apply { id = orderModel.localSiteId.value }
327332 val result = RemoteOrderPayload .Updating (orderModel.copy(status = CoreOrderStatus .COMPLETED .value), site)
328- whenever(orderRestClient.updateOrderStatus (orderModel, site, CoreOrderStatus .COMPLETED .value))
333+ whenever(orderRestClient.updateOrderStatusAndPaymentMethod (orderModel, site, CoreOrderStatus .COMPLETED .value))
329334 .thenReturn(result)
330335
331336 assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.status)
@@ -348,7 +353,15 @@ class WCOrderStoreTest {
348353 .saveToDb()
349354 val site = SiteModel ().apply { id = orderModel.localSiteId.value }
350355 val error = OrderError ()
351- whenever(orderRestClient.updateOrderStatus(any(), any(), any())).thenReturn(
356+ whenever(
357+ orderRestClient.updateOrderStatusAndPaymentMethod(
358+ any(),
359+ any(),
360+ any(),
361+ anyOrNull(),
362+ anyOrNull()
363+ )
364+ ).thenReturn(
352365 RemoteOrderPayload .Updating (
353366 error = error,
354367 order = orderModel,
@@ -370,6 +383,106 @@ class WCOrderStoreTest {
370383 Unit
371384 }
372385
386+
387+ @Test
388+ fun testUpdateOrderPaymentMethodRequestUpdatesLocalDatabase () = runBlocking {
389+ val orderModel = OrderTestUtils .generateSampleOrder(
390+ 42 ,
391+ orderStatus = CoreOrderStatus .PROCESSING .value,
392+ paymentMethod = " " ,
393+ paymentMethodTitle = " " )
394+ .saveToDb()
395+ val site = SiteModel ().apply { id = orderModel.localSiteId.value }
396+ whenever(orderRestClient.updateOrderStatusAndPaymentMethod(
397+ orderModel,
398+ site,
399+ CoreOrderStatus .COMPLETED .value,
400+ COD_PAYMENT_METHOD_ID ,
401+ CUSTOM_PAYMENT_METHOD_TITLE
402+ )).thenReturn(
403+ RemoteOrderPayload .Updating (
404+ orderModel.copy(
405+ status = CoreOrderStatus .COMPLETED .value,
406+ paymentMethod = COD_PAYMENT_METHOD_ID ,
407+ paymentMethodTitle = CUSTOM_PAYMENT_METHOD_TITLE
408+ ),
409+ site
410+ )
411+ )
412+
413+ assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethod)
414+ .isEqualTo(" " )
415+ assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethodTitle)
416+ .isEqualTo(" " )
417+
418+ orderStore.updateOrderStatusAndPaymentMethod(
419+ orderModel.orderId,
420+ site,
421+ WCOrderStatusModel (CoreOrderStatus .COMPLETED .value),
422+ newPaymentMethodId = COD_PAYMENT_METHOD_ID ,
423+ newPaymentMethodTitle = CUSTOM_PAYMENT_METHOD_TITLE
424+ ).toList()
425+
426+ assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethod)
427+ .isEqualTo(COD_PAYMENT_METHOD_ID )
428+ assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethodTitle)
429+ .isEqualTo(CUSTOM_PAYMENT_METHOD_TITLE )
430+ Unit
431+ }
432+
433+ @Test
434+ fun testRevertLocalPaymentMethodIfRemoteUpdateFails () = runBlocking {
435+ val orderModel = OrderTestUtils .generateSampleOrder(
436+ 42 ,
437+ orderStatus = CoreOrderStatus .PROCESSING .value,
438+ paymentMethod = " " ,
439+ paymentMethodTitle = " " )
440+ .saveToDb()
441+ val site = SiteModel ().apply { id = orderModel.localSiteId.value }
442+ val error = OrderError ()
443+ whenever(
444+ orderRestClient.updateOrderStatusAndPaymentMethod(
445+ orderModel,
446+ site,
447+ CoreOrderStatus .COMPLETED .value,
448+ COD_PAYMENT_METHOD_ID ,
449+ CUSTOM_PAYMENT_METHOD_TITLE
450+ )
451+ ).thenReturn(
452+ RemoteOrderPayload .Updating (
453+ error = error,
454+ order = orderModel,
455+ site = site
456+ )
457+ )
458+
459+ assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethod)
460+ .isEqualTo(" " )
461+ assertThat(ordersDaoDecorator.getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethodTitle)
462+ .isEqualTo(" " )
463+
464+ val response = orderStore.updateOrderStatusAndPaymentMethod(
465+ orderModel.orderId,
466+ site,
467+ WCOrderStatusModel (CoreOrderStatus .COMPLETED .value),
468+ newPaymentMethodId = COD_PAYMENT_METHOD_ID ,
469+ newPaymentMethodTitle = CUSTOM_PAYMENT_METHOD_TITLE
470+ ).toList().last()
471+
472+ // Ensure the error is sent in the response
473+ assertThat(response.event.error).isEqualTo(error)
474+
475+ assertThat(
476+ ordersDaoDecorator
477+ .getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethod
478+ ).isEqualTo(" " )
479+ assertThat(
480+ ordersDaoDecorator
481+ .getOrder(orderModel.orderId, orderModel.localSiteId)?.paymentMethodTitle
482+ ).isEqualTo(" " )
483+ Unit
484+ }
485+
373486 @Test
374487 fun testObserveOrdersCount () {
375488 runBlocking {
0 commit comments