Skip to content

Shippling lines M1 analytics #11479

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
May 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,8 @@ enum class AnalyticsEvent(val siteless: Boolean = false) {
ORDER_FORM_ADD_GIFT_CARD_CTA_SHOWN,
ORDER_FORM_ADD_GIFT_CARD_CTA_TAPPED,
ORDER_FORM_GIFT_CARD_SET,
ORDER_SHIPPING_METHOD_SELECTED,
ORDER_ADD_SHIPPING_TAPPED,

// -- Custom Amounts
ORDER_CREATION_ADD_CUSTOM_AMOUNT_TAPPED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ class AnalyticsTracker private constructor(
const val KEY_CUSTOM_AMOUNTS_COUNT = "custom_amounts_Count"
const val KEY_CUSTOM_AMOUNT_TAX_STATUS = "tax_status"
const val KEY_EXPANDED = "expanded"
const val KEY_SHIPPING_METHOD = "shipping_method"

const val VALUE_CUSTOM_AMOUNT_TAX_STATUS_TAXABLE = "taxable"
const val VALUE_CUSTOM_AMOUNT_TAX_STATUS_NONE = "none"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_PRODUCT_
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_SCANNING_BARCODE_FORMAT
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_SCANNING_FAILURE_REASON
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_SCANNING_SOURCE
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_SHIPPING_METHOD
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_SOURCE
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_STATUS
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_TO
Expand Down Expand Up @@ -1224,6 +1225,7 @@ class OrderCreateEditViewModel @Inject constructor(
}

fun onShippingButtonClicked() {
tracker.track(AnalyticsEvent.ORDER_ADD_SHIPPING_TAPPED)
triggerEvent(EditShipping(currentDraft.shippingLines.firstOrNull { it.methodId != null }))
}

Expand Down Expand Up @@ -1502,7 +1504,10 @@ class OrderCreateEditViewModel @Inject constructor(
fun onUpdatedShipping(shippingUpdateResult: ShippingUpdateResult) {
tracker.track(
ORDER_SHIPPING_METHOD_ADD,
mapOf(KEY_FLOW to flow)
buildMap {
put(KEY_FLOW, flow)
putIfNotNull(KEY_SHIPPING_METHOD to shippingUpdateResult.methodId)
}
)
_orderDraft.update { draft ->
val shipping: List<ShippingLine> = draft.shippingLines.map { shippingLine ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package com.woocommerce.android.ui.orders.creation.shipping
import android.os.Parcelable
import androidx.lifecycle.SavedStateHandle
import com.woocommerce.android.R
import com.woocommerce.android.analytics.AnalyticsEvent
import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
import com.woocommerce.android.model.Order
import com.woocommerce.android.model.ShippingMethod
import com.woocommerce.android.viewmodel.MultiLiveEvent
Expand All @@ -20,7 +23,8 @@ import javax.inject.Inject
class OrderShippingViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val resourceProvider: ResourceProvider,
private val getShippingMethodById: GetShippingMethodById
private val getShippingMethodById: GetShippingMethodById,
private val tracker: AnalyticsTrackerWrapper
) : ScopedViewModel(savedStateHandle) {

private val navArgs: OrderShippingFragmentArgs by savedState.navArgs()
Expand Down Expand Up @@ -93,6 +97,10 @@ class OrderShippingViewModel @Inject constructor(

fun onMethodSelected(selected: ShippingMethod) {
(viewState.value as? ViewState.ShippingState)?.let {
tracker.track(
AnalyticsEvent.ORDER_SHIPPING_METHOD_SELECTED,
mapOf(AnalyticsTracker.KEY_SHIPPING_METHOD to selected.id)
)
viewState.value = it.copy(
method = selected,
isSaveChangesEnabled = isSaveChangesEnabled(newMethodId = selected.id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.woocommerce.android.ui.orders.creation.configuration.ProductConfigura
import com.woocommerce.android.ui.orders.creation.configuration.ProductRules
import com.woocommerce.android.ui.orders.creation.navigation.OrderCreateEditNavigationTarget
import com.woocommerce.android.ui.orders.creation.product.discount.CurrencySymbolFinder
import com.woocommerce.android.ui.orders.creation.shipping.ShippingUpdateResult
import com.woocommerce.android.ui.orders.creation.taxes.GetAddressFromTaxRate
import com.woocommerce.android.ui.orders.creation.taxes.GetTaxRatesInfoDialogViewState
import com.woocommerce.android.ui.orders.creation.taxes.rates.GetTaxRateLabel
Expand Down Expand Up @@ -309,6 +310,25 @@ abstract class UnifiedOrderEditViewModelTest : BaseUnitTest() {
)
}

@Test
fun `when shipping line added or edited, send tracks event`() {
val result = ShippingUpdateResult(
id = 1L,
amount = BigDecimal.TEN,
name = "Other",
methodId = "other"
)
sut.onUpdatedShipping(result)

verify(tracker).track(
AnalyticsEvent.ORDER_SHIPPING_METHOD_ADD,
mapOf(
AnalyticsTracker.KEY_FLOW to tracksFlow,
AnalyticsTracker.KEY_SHIPPING_METHOD to result.methodId
)
)
}

@Test
fun `when customer note added or edited, send tracks event`() {
sut.onCustomerNoteEdited("")
Expand Down Expand Up @@ -2478,6 +2498,13 @@ abstract class UnifiedOrderEditViewModelTest : BaseUnitTest() {
)
)
}

@Test
fun `when shipping button tapped, send tracks event`() {
sut.onShippingButtonClicked()

verify(tracker).track(AnalyticsEvent.ORDER_ADD_SHIPPING_TAPPED)
}
//endregion

protected fun createSut(savedStateHandle: SavedStateHandle = savedState) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package com.woocommerce.android.ui.orders.creation.shipping

import com.woocommerce.android.analytics.AnalyticsEvent
import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
import com.woocommerce.android.model.Order
import com.woocommerce.android.model.ShippingMethod
import com.woocommerce.android.util.getOrAwaitValue
import com.woocommerce.android.viewmodel.BaseUnitTest
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand All @@ -9,6 +13,7 @@ import kotlinx.coroutines.test.advanceTimeBy
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import java.math.BigDecimal

@OptIn(ExperimentalCoroutinesApi::class)
Expand All @@ -29,11 +34,14 @@ class OrderShippingViewModelTest : BaseUnitTest() {

private val getShippingMethodById: GetShippingMethodById = mock()

private val tracker: AnalyticsTrackerWrapper = mock()

fun setup(args: OrderShippingFragmentArgs) {
viewModel = OrderShippingViewModel(
savedStateHandle = args.toSavedStateHandle(),
resourceProvider = mock(),
getShippingMethodById = getShippingMethodById
getShippingMethodById = getShippingMethodById,
tracker = tracker
)
}

Expand Down Expand Up @@ -87,6 +95,37 @@ class OrderShippingViewModelTest : BaseUnitTest() {
.isEqualTo(name)
}

@Test
fun `when editing method, then update the state`() {
setup(creationArgs)
val selected = ShippingMethod(
id = "other",
title = "Other"
)

viewModel.onMethodSelected(selected)

val viewState = viewModel.viewState.value
assertThat((viewState as OrderShippingViewModel.ViewState.ShippingState).method)
.isEqualTo(selected)
}

@Test
fun `when editing method, then track the method selected`() {
setup(creationArgs)
val selected = ShippingMethod(
id = "other",
title = "Other"
)

viewModel.onMethodSelected(selected)

verify(tracker).track(
AnalyticsEvent.ORDER_SHIPPING_METHOD_SELECTED,
mapOf(AnalyticsTracker.KEY_SHIPPING_METHOD to selected.id)
)
}

@Test
fun `when done button is clicked, then update shipping line data`() {
setup(creationArgs)
Expand Down
Loading