@@ -3,6 +3,7 @@ package com.woocommerce.android.ui.woopos.emailreceipt
33import com.woocommerce.android.model.Order
44import com.woocommerce.android.model.OrderMapper
55import com.woocommerce.android.tools.SelectedSite
6+ import com.woocommerce.android.ui.orders.OrderTestUtils
67import com.woocommerce.android.ui.orders.creation.OrderCreateEditRepository
78import com.woocommerce.android.ui.orders.creation.OrderCreationSource
89import com.woocommerce.android.util.GetWooCorePluginCachedVersion
@@ -13,12 +14,15 @@ import org.mockito.kotlin.any
1314import org.mockito.kotlin.anyOrNull
1415import org.mockito.kotlin.eq
1516import org.mockito.kotlin.mock
17+ import org.mockito.kotlin.verify
1618import org.mockito.kotlin.whenever
19+ import org.wordpress.android.fluxc.model.LocalOrRemoteId
1720import org.wordpress.android.fluxc.model.SiteModel
1821import org.wordpress.android.fluxc.network.BaseRequest.GenericErrorType
1922import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
2023import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType
2124import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload
25+ import org.wordpress.android.fluxc.persistence.entity.OrderEntity
2226import org.wordpress.android.fluxc.store.WCOrderStore
2327import java.util.regex.Pattern
2428
@@ -83,10 +87,7 @@ class WooPosEmailReceiptRepositoryTest {
8387 // GIVEN
8488 val orderId = 1L
858986- val mockOrder: Order = mock {
87- on { billingAddress }.thenReturn(mock())
88- on { customer }.thenReturn(mock())
89- }
90+ val mockOrder: Order = OrderTestUtils .generateTestOrder()
9091
9192 whenever(getWooCoreVersion.invoke()).thenReturn(" 9.9.0" )
9293 whenever(orderStore.getOrderByIdAndSite(orderId, siteModel)).thenReturn(mock())
@@ -113,10 +114,7 @@ class WooPosEmailReceiptRepositoryTest {
113114 // GIVEN
114115 val orderId = 1L
115116116- val mockOrder: Order = mock {
117- on { billingAddress }.thenReturn(mock())
118- on { customer }.thenReturn(mock())
119- }
117+ val mockOrder: Order = OrderTestUtils .generateTestOrder()
120118
121119 whenever(getWooCoreVersion.invoke()).thenReturn(" 10.0.0" )
122120 whenever(orderStore.getOrderByIdAndSite(orderId, siteModel)).thenReturn(mock())
@@ -146,6 +144,11 @@ class WooPosEmailReceiptRepositoryTest {
146144 whenever(selectedSite.get()).thenReturn(siteModel)
147145 whenever(orderStore.getOrderByIdAndSite(orderId, siteModel)).thenReturn(null )
148146
147+ val onOrderChangedError = WCOrderStore .OnOrderChanged (
148+ orderError = WCOrderStore .OrderError ()
149+ )
150+ whenever(orderStore.fetchSingleOrder(siteModel, orderId)).thenReturn(onOrderChangedError)
151+
149152 // WHEN
150153 val result = repository.sendReceiptByEmail(orderId, email)
151154
@@ -158,10 +161,7 @@ class WooPosEmailReceiptRepositoryTest {
158161 // GIVEN
159162160163 val orderId = 1L
161- val mockOrder: Order = mock {
162- on { billingAddress }.thenReturn(mock())
163- on { customer }.thenReturn(mock())
164- }
164+ val mockOrder: Order = OrderTestUtils .generateTestOrder()
165165
166166 whenever(selectedSite.get()).thenReturn(siteModel)
167167 whenever(orderStore.getOrderByIdAndSite(orderId, siteModel)).thenReturn(mock())
@@ -188,10 +188,7 @@ class WooPosEmailReceiptRepositoryTest {
188188 // GIVEN
189189 val orderId = 1L
190190191- val mockOrder: Order = mock {
192- on { billingAddress }.thenReturn(mock())
193- on { customer }.thenReturn(mock())
194- }
191+ val mockOrder: Order = OrderTestUtils .generateTestOrder()
195192 whenever(selectedSite.get()).thenReturn(siteModel)
196193 whenever(orderStore.getOrderByIdAndSite(orderId, siteModel)).thenReturn(mock())
197194 whenever(orderMapper.toAppModel(any())).thenReturn(mockOrder)
@@ -218,4 +215,50 @@ class WooPosEmailReceiptRepositoryTest {
218215 // THEN
219216 assertThat(result.isFailure).isTrue()
220217 }
218+
219+ @Test
220+ fun `given order not in DB, when sendReceiptByEmail, then fetches remotely and succeeds` () = runTest {
221+ // GIVEN
222+ val orderId = 123L
223+ 224+
225+ val mockOrder: Order = OrderTestUtils .generateTestOrder()
226+
227+ whenever(selectedSite.get()).thenReturn(siteModel)
228+
229+ val dbEntity = OrderEntity (LocalOrRemoteId .LocalId (1 ), orderId = orderId)
230+ whenever(orderStore.getOrderByIdAndSite(orderId, siteModel))
231+ .thenReturn(null , dbEntity)
232+
233+ val onOrderChangedSuccess = WCOrderStore .OnOrderChanged ()
234+
235+ whenever(orderStore.fetchSingleOrder(siteModel, orderId)).thenReturn(onOrderChangedSuccess)
236+
237+ whenever(orderMapper.toAppModel(dbEntity)).thenReturn(mockOrder)
238+
239+ whenever(
240+ orderCreateEditRepository.createOrUpdateOrder(
241+ any(),
242+ eq(OrderCreationSource .POINT_OF_SALE ),
243+ eq(" " )
244+ )
245+ ).thenReturn(
246+ Result .success(mockOrder)
247+ )
248+
249+ whenever(getWooCoreVersion.invoke()).thenReturn(" 9.9.0" )
250+
251+ val sendOrderReceiptResult = WooPayload <Unit >(Unit )
252+ whenever(orderStore.sendOrderReceipt(siteModel, orderId)).thenReturn(sendOrderReceiptResult)
253+
254+ // WHEN
255+ val result = repository.sendReceiptByEmail(orderId, email)
256+
257+ // THEN
258+ assertThat(result.isSuccess).isTrue()
259+
260+ verify(orderStore).fetchSingleOrder(siteModel, orderId)
261+ verify(orderStore, org.mockito.kotlin.times(2 )).getOrderByIdAndSite(orderId, siteModel)
262+ verify(orderStore).sendOrderReceipt(siteModel, orderId)
263+ }
221264}
0 commit comments