Skip to content

Commit

Permalink
Merge pull request #10627 from woocommerce/10626-backend-receipts-ref…
Browse files Browse the repository at this point in the history
…actor-current-receipts-implementation-to-be-it-payments-wide

[Backend Receipts] Refactor current receipts implementation to be it payments wide
  • Loading branch information
kidinov authored Jan 30, 2024
2 parents f861cd3 + 114c363 commit 114fc4e
Show file tree
Hide file tree
Showing 12 changed files with 46 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.BuiltInR
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.BuiltInReaderPaymentSuccessfulState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.ExternalReaderPaymentSuccessfulReceiptSentAutomaticallyState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.ExternalReaderPaymentSuccessfulState
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.SendReceipt
import com.woocommerce.android.ui.payments.refunds.RefundSummaryFragment.Companion.KEY_INTERAC_SUCCESS
import com.woocommerce.android.util.ActivityUtils
import com.woocommerce.android.util.PrintHtmlHelper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,7 @@ import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.Processi
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.ReFetchingOrderState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.RefundLoadingDataState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.RefundSuccessfulState
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.SendReceipt
import com.woocommerce.android.ui.payments.receipt.PaymentReceiptHelper
import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoKeeper
import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTracker
import com.woocommerce.android.util.CoroutineDispatchers
Expand Down Expand Up @@ -115,7 +114,7 @@ class CardReaderPaymentViewModel
private val cardReaderTrackingInfoKeeper: CardReaderTrackingInfoKeeper,
private val cardReaderPaymentReaderTypeStateProvider: CardReaderPaymentReaderTypeStateProvider,
private val cardReaderPaymentOrderHelper: CardReaderPaymentOrderHelper,
private val cardReaderPaymentReceiptHelper: CardReaderPaymentReceiptHelper,
private val paymentReceiptHelper: PaymentReceiptHelper,
private val cardReaderOnboardingChecker: CardReaderOnboardingChecker,
private val cardReaderConfigProvider: CardReaderCountryConfigProvider,
) : ScopedViewModel(savedState) {
Expand Down Expand Up @@ -302,7 +301,7 @@ class CardReaderPaymentViewModel
currency = order.currency,
orderKey = order.orderKey,
customerEmail = customerEmail.ifEmpty { null },
isPluginCanSendReceipt = cardReaderPaymentReceiptHelper.isPluginCanSendReceipt(site),
isPluginCanSendReceipt = paymentReceiptHelper.isPluginCanSendReceipt(site),
customerName = "${order.billingAddress.firstName} ${order.billingAddress.lastName}".ifBlank { null },
storeName = selectedSite.get().name.ifEmpty { null },
siteUrl = selectedSite.get().url.ifEmpty { null },
Expand Down Expand Up @@ -457,7 +456,7 @@ class CardReaderPaymentViewModel
paymentStatus: PaymentCompleted,
orderId: Long,
) {
cardReaderPaymentReceiptHelper.storeReceiptUrl(orderId, paymentStatus.receiptUrl)
paymentReceiptHelper.storeReceiptUrl(orderId, paymentStatus.receiptUrl)
appPrefs.setCardReaderSuccessfulPaymentTime()
triggerEvent(PlayChaChing)
showPaymentSuccessfulState()
Expand Down Expand Up @@ -606,7 +605,7 @@ class CardReaderPaymentViewModel
launch {
val order = requireNotNull(orderRepository.getOrderById(orderId)) { "Order URL not available." }
val amountLabel = cardReaderPaymentOrderHelper.getAmountLabel(order)
val receiptUrl = cardReaderPaymentReceiptHelper.getReceiptUrl(order.id)
val receiptUrl = paymentReceiptHelper.getReceiptUrl(order.id)
val onPrintReceiptClicked = {
onPrintReceiptClicked(
amountLabel,
Expand Down Expand Up @@ -719,7 +718,7 @@ class CardReaderPaymentViewModel
?: throw IllegalStateException("Order URL not available.")
triggerEvent(
PrintReceipt(
cardReaderPaymentReceiptHelper.getReceiptUrl(order.id),
paymentReceiptHelper.getReceiptUrl(order.id),
cardReaderPaymentOrderHelper.getReceiptDocumentName(order)
)
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.woocommerce.android.ui.payments.cardreader.payment

import androidx.annotation.StringRes
import com.woocommerce.android.model.UiString
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event

class ShowSnackbarInDialog(@StringRes val message: Int) : Event()
Expand All @@ -14,3 +15,7 @@ object ContactSupport : Event()
object EnableNfc : Event()

data class PurchaseCardReader(val url: String) : Event()

data class PrintReceipt(val receiptUrl: String, val documentName: String) : Event()

data class SendReceipt(val content: UiString, val subject: UiString, val address: String) : Event()

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.woocommerce.android.ui.payments.cardreader.payment
package com.woocommerce.android.ui.payments.receipt

import com.woocommerce.android.AppPrefsWrapper
import com.woocommerce.android.extensions.semverCompareTo
Expand All @@ -8,7 +8,7 @@ import com.woocommerce.android.ui.payments.cardreader.onboarding.WCPAY_RECEIPTS_
import org.wordpress.android.fluxc.model.SiteModel
import javax.inject.Inject

class CardReaderPaymentReceiptHelper @Inject constructor(
class PaymentReceiptHelper @Inject constructor(
private val selectedSite: SelectedSite,
private val appPrefsWrapper: AppPrefsWrapper
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.woocommerce.android.ui.payments.cardreader.receipt
package com.woocommerce.android.ui.payments.receipt.preview

import android.os.Bundle
import android.view.Menu
Expand All @@ -14,9 +14,6 @@ import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.databinding.FragmentReceiptPreviewBinding
import com.woocommerce.android.ui.base.BaseFragment
import com.woocommerce.android.ui.base.UIMessageResolver
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.SendReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewEvent.LoadUrl
import com.woocommerce.android.util.ActivityUtils
import com.woocommerce.android.util.PrintHtmlHelper
import com.woocommerce.android.util.UiHelpers
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.woocommerce.android.ui.payments.cardreader.receipt
package com.woocommerce.android.ui.payments.receipt.preview

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
Expand All @@ -14,16 +14,12 @@ import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
import com.woocommerce.android.model.UiString.UiStringRes
import com.woocommerce.android.model.UiString.UiStringText
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.SendReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewEvent.LoadUrl
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewViewState.Content
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewViewState.Loading
import com.woocommerce.android.ui.payments.receipt.preview.ReceiptPreviewViewModel.ReceiptPreviewViewState.Content
import com.woocommerce.android.ui.payments.receipt.preview.ReceiptPreviewViewModel.ReceiptPreviewViewState.Loading
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult.CANCELLED
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult.FAILED
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult.STARTED
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.ShowSnackbar
import com.woocommerce.android.viewmodel.ScopedViewModel
import com.woocommerce.android.viewmodel.navArgs
Expand Down Expand Up @@ -97,8 +93,4 @@ class ReceiptPreviewViewModel
object Loading : ReceiptPreviewViewState(isProgressVisible = true)
object Content : ReceiptPreviewViewState(isContentVisible = true)
}

sealed class ReceiptPreviewEvent : Event() {
data class LoadUrl(val url: String) : ReceiptPreviewEvent()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.woocommerce.android.ui.payments.receipt.preview

import com.woocommerce.android.model.UiString
import com.woocommerce.android.viewmodel.MultiLiveEvent

data class LoadUrl(val url: String) : MultiLiveEvent.Event()

data class PrintReceipt(val receiptUrl: String, val documentName: String) : MultiLiveEvent.Event()

data class SendReceipt(val content: UiString, val subject: UiString, val address: String) : MultiLiveEvent.Event()
2 changes: 1 addition & 1 deletion WooCommerce/src/main/res/navigation/nav_graph_orders.xml
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@
</fragment>
<fragment
android:id="@+id/receiptPreviewFragment"
android:name="com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewFragment"
android:name="com.woocommerce.android.ui.payments.receipt.preview.ReceiptPreviewFragment"
android:label="ReceiptPreviewFragment"
tools:layout="@layout/fragment_receipt_preview">
<argument
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentD
import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentErrorMapper
import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentOrderHelper
import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentReaderTypeStateProvider
import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentReceiptHelper
import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentViewModel
import com.woocommerce.android.ui.payments.cardreader.payment.ContactSupport
import com.woocommerce.android.ui.payments.cardreader.payment.EnableNfc
Expand All @@ -67,7 +66,9 @@ import com.woocommerce.android.ui.payments.cardreader.payment.PaymentFlowError
import com.woocommerce.android.ui.payments.cardreader.payment.PaymentFlowError.AmountTooSmall
import com.woocommerce.android.ui.payments.cardreader.payment.PaymentFlowError.Unknown
import com.woocommerce.android.ui.payments.cardreader.payment.PlayChaChing
import com.woocommerce.android.ui.payments.cardreader.payment.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.payment.PurchaseCardReader
import com.woocommerce.android.ui.payments.cardreader.payment.SendReceipt
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.BuiltInReaderCapturingPaymentState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.BuiltInReaderCollectPaymentState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.BuiltInReaderFailedPaymentState
Expand All @@ -88,8 +89,7 @@ import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.Processi
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.ReFetchingOrderState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.RefundLoadingDataState
import com.woocommerce.android.ui.payments.cardreader.payment.ViewState.RefundSuccessfulState
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.SendReceipt
import com.woocommerce.android.ui.payments.receipt.PaymentReceiptHelper
import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoKeeper
import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTracker
import com.woocommerce.android.util.CurrencyFormatter
Expand Down Expand Up @@ -178,7 +178,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
private val interacRefundableChecker: CardReaderInteracRefundableChecker = mock()
private val cardReaderPaymentReaderTypeStateProvider = CardReaderPaymentReaderTypeStateProvider()
private val cardReaderPaymentOrderHelper: CardReaderPaymentOrderHelper = mock()
private val cardReaderPaymentReceiptHelper: CardReaderPaymentReceiptHelper = mock()
private val paymentReceiptHelper: PaymentReceiptHelper = mock()
private val cardReaderOnboardingChecker: CardReaderOnboardingChecker = mock()
private val cardReaderConfigProvider: CardReaderCountryConfigProvider = mock()
private val cardReaderConfig: CardReaderConfigForSupportedCountry = CardReaderConfigForUSA
Expand Down Expand Up @@ -206,7 +206,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
cardReaderTrackingInfoKeeper = cardReaderTrackingInfoKeeper,
cardReaderPaymentReaderTypeStateProvider = cardReaderPaymentReaderTypeStateProvider,
cardReaderPaymentOrderHelper = cardReaderPaymentOrderHelper,
cardReaderPaymentReceiptHelper = cardReaderPaymentReceiptHelper,
paymentReceiptHelper = paymentReceiptHelper,
cardReaderOnboardingChecker = cardReaderOnboardingChecker,
cardReaderConfigProvider = cardReaderConfigProvider,
)
Expand Down Expand Up @@ -240,8 +240,8 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
whenever(cardReaderManager.displayBluetoothCardReaderMessages).thenAnswer {
flow<BluetoothCardReaderMessages> {}
}
whenever(cardReaderPaymentReceiptHelper.isPluginCanSendReceipt(siteModel)).thenReturn(true)
whenever(cardReaderPaymentReceiptHelper.getReceiptUrl(ORDER_ID)).thenReturn("test url")
whenever(paymentReceiptHelper.isPluginCanSendReceipt(siteModel)).thenReturn(true)
whenever(paymentReceiptHelper.getReceiptUrl(ORDER_ID)).thenReturn("test url")
whenever(cardReaderPaymentOrderHelper.getPaymentDescription(mockedOrder)).thenReturn("test description")
whenever(cardReaderPaymentOrderHelper.getAmountLabel(mockedOrder))
.thenReturn("$DUMMY_CURRENCY_SYMBOL$DUMMY_TOTAL")
Expand Down Expand Up @@ -1916,7 +1916,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {

viewModel.start()

verify(cardReaderPaymentReceiptHelper).storeReceiptUrl(eq(ORDER_ID), eq(receiptUrl))
verify(paymentReceiptHelper).storeReceiptUrl(eq(ORDER_ID), eq(receiptUrl))
}

@Test
Expand Down Expand Up @@ -3054,7 +3054,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
fun `given plugin can not be send, when flow started, then wc pay can send receipt is false`() =
testBlocking {
// Given
whenever(cardReaderPaymentReceiptHelper.isPluginCanSendReceipt(siteModel)).thenReturn(false)
whenever(paymentReceiptHelper.isPluginCanSendReceipt(siteModel)).thenReturn(false)
val captor = argumentCaptor<PaymentInfo>()

// When
Expand All @@ -3069,7 +3069,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
fun `given plugin can be send, when flow started, then wc pay can send receipt is true`() =
testBlocking {
// Given
whenever(cardReaderPaymentReceiptHelper.isPluginCanSendReceipt(siteModel)).thenReturn(true)
whenever(paymentReceiptHelper.isPluginCanSendReceipt(siteModel)).thenReturn(true)
val captor = argumentCaptor<PaymentInfo>()

// When
Expand Down Expand Up @@ -4328,7 +4328,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
cardReaderTrackingInfoKeeper = cardReaderTrackingInfoKeeper,
cardReaderPaymentReaderTypeStateProvider = cardReaderPaymentReaderTypeStateProvider,
cardReaderPaymentOrderHelper = cardReaderPaymentOrderHelper,
cardReaderPaymentReceiptHelper = cardReaderPaymentReceiptHelper,
paymentReceiptHelper = paymentReceiptHelper,
cardReaderOnboardingChecker = cardReaderOnboardingChecker,
cardReaderConfigProvider = cardReaderConfigProvider,
)
Expand Down Expand Up @@ -4360,7 +4360,7 @@ class CardReaderPaymentViewModelTest : BaseUnitTest() {
cardReaderTrackingInfoKeeper = cardReaderTrackingInfoKeeper,
cardReaderPaymentReaderTypeStateProvider = cardReaderPaymentReaderTypeStateProvider,
cardReaderPaymentOrderHelper = cardReaderPaymentOrderHelper,
cardReaderPaymentReceiptHelper = cardReaderPaymentReceiptHelper,
paymentReceiptHelper = paymentReceiptHelper,
cardReaderOnboardingChecker = cardReaderOnboardingChecker,
cardReaderConfigProvider = cardReaderConfigProvider,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.woocommerce.android.ui.payments.cardreader.payment
package com.woocommerce.android.ui.payments.receipt

import com.woocommerce.android.AppPrefsWrapper
import com.woocommerce.android.tools.SelectedSite
Expand All @@ -12,13 +12,13 @@ import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever

@ExperimentalCoroutinesApi
class CardReaderPaymentReceiptHelperTest {
class PaymentReceiptHelperTest {
private val selectedSite: SelectedSite = mock {
on { get() }.thenReturn(mock())
}
private val appPrefsWrapper: AppPrefsWrapper = mock()

private val helper = CardReaderPaymentReceiptHelper(selectedSite, appPrefsWrapper)
private val helper = PaymentReceiptHelper(selectedSite, appPrefsWrapper)

@Test
fun `given selected site, when storeReceiptUrl, then url is stored`() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.woocommerce.android.ui.payments.cardreader
package com.woocommerce.android.ui.payments.receipt.preview

import androidx.lifecycle.SavedStateHandle
import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_EMAIL_FAILED
Expand All @@ -9,13 +9,8 @@ import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_PRINT_SUCCESS
import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_PRINT_TAPPED
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.PrintReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptEvent.SendReceipt
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewFragmentArgs
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewEvent.LoadUrl
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewViewState.Content
import com.woocommerce.android.ui.payments.cardreader.receipt.ReceiptPreviewViewModel.ReceiptPreviewViewState.Loading
import com.woocommerce.android.ui.payments.receipt.preview.ReceiptPreviewViewModel.ReceiptPreviewViewState.Content
import com.woocommerce.android.ui.payments.receipt.preview.ReceiptPreviewViewModel.ReceiptPreviewViewState.Loading
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult.CANCELLED
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult.FAILED
import com.woocommerce.android.util.PrintHtmlHelper.PrintJobResult.STARTED
Expand Down

0 comments on commit 114fc4e

Please sign in to comment.