Skip to content
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 @@ -4,7 +4,6 @@ import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
import com.google.gson.reflect.TypeToken
import com.woocommerce.android.R
import com.woocommerce.android.model.Product
import com.woocommerce.android.model.ProductVariation
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
import com.woocommerce.android.util.WooLog
Expand Down Expand Up @@ -118,7 +117,7 @@ class WooPosVariationMapper @Inject constructor(
}
}

fun getName(variation: WooPosVariation, parentProduct: Product? = null): String {
fun getName(variation: WooPosVariation, parentProduct: WooPosProductModelVersion2? = null): String {
return parentProduct?.variationEnabledAttributes?.joinToString(" - ") { attribute ->
val option = variation.attributes.firstOrNull { it.name == attribute.name }
option?.option ?: "Any ${attribute.name}"
Expand Down Expand Up @@ -172,5 +171,5 @@ fun WooPosVariation.getNameForPOS(
resourceProvider: ResourceProvider,
): String = mapper.getNameForPOS(this, parentProduct, resourceProvider)

fun WooPosVariation.getName(mapper: WooPosVariationMapper, parentProduct: Product? = null): String =
fun WooPosVariation.getName(mapper: WooPosVariationMapper, parentProduct: WooPosProductModelVersion2? = null): String =
mapper.getName(this, parentProduct)
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.woocommerce.android.ui.woopos.home.items.search

import com.woocommerce.android.model.Product
import com.woocommerce.android.ui.woopos.common.data.WooPosPopularProductsProvider
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
import com.woocommerce.android.ui.woopos.util.datastore.WooPosPreferencesRepository
import kotlinx.coroutines.flow.first
import javax.inject.Inject
Expand All @@ -10,7 +10,7 @@ class WooPosItemsSearchEmptyStateRepository @Inject constructor(
private val preferencesRepository: WooPosPreferencesRepository,
private val popularProductsProvider: WooPosPopularProductsProvider,
) {
suspend fun getPopularItems(): List<Product> = popularProductsProvider.getPopularProducts()
suspend fun getPopularItems(): List<WooPosProductModelVersion2> = popularProductsProvider.getPopularProducts()

suspend fun getLastSearches(): List<String> = preferencesRepository.recentProductSearches.first()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ package com.woocommerce.android.ui.woopos.home.items.search

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.woocommerce.android.model.Product
import com.woocommerce.android.ui.products.ProductType
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
import com.woocommerce.android.ui.woopos.home.ChildToParentEvent
import com.woocommerce.android.ui.woopos.home.ChildToParentEvent.SearchEvent.RecentSearchSelected
import com.woocommerce.android.ui.woopos.home.ParentToChildrenEvent
Expand Down Expand Up @@ -148,7 +147,7 @@ class WooPosItemsSearchViewModel @Inject constructor(
}

childToParentEventSender.sendToParent(ChildToParentEvent.SearchEvent.Started)
var result: Result<List<Product>>
var result: Result<List<WooPosProductModelVersion2>>
val searchTimeMillis = measureTimeMillis {
result = dataSource.searchRemoteProducts(query)
}
Expand Down Expand Up @@ -287,7 +286,7 @@ class WooPosItemsSearchViewModel @Inject constructor(
}
}

private suspend fun List<Product>.toContentState(
private suspend fun List<WooPosProductModelVersion2>.toContentState(
searchQuery: String,
paginationState: WooPosPaginationState = WooPosPaginationState.None,
) = WooPosItemsSearchViewState.Content(
Expand All @@ -296,21 +295,21 @@ class WooPosItemsSearchViewModel @Inject constructor(
paginationState = paginationState,
)

private suspend fun Product.toViewModelProduct(): WooPosItemSelectionViewState.Product =
if (productType == ProductType.VARIABLE) {
private suspend fun WooPosProductModelVersion2.toViewModelProduct(): WooPosItemSelectionViewState.Product =
if (type == WooPosProductModelVersion2.WooPosProductType.VARIABLE) {
WooPosItemSelectionViewState.Product.Variable(
id = this.remoteId,
name = this.name,
price = priceFormat(this.price),
price = priceFormat(this.pricing.displayPrice),
imageUrl = this.firstImageUrl,
numOfVariations = this.numVariations,
numOfVariations = this.variationIds.size,
variationIds = this.variationIds
)
} else {
WooPosItemSelectionViewState.Product.Simple(
id = this.remoteId,
name = this.name,
price = priceFormat(this.price),
price = priceFormat(this.pricing.displayPrice),
imageUrl = this.firstImageUrl,
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.woocommerce.android.ui.woopos.home.items.search

import app.cash.turbine.test
import com.woocommerce.android.ui.products.ProductTestUtils
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
import com.woocommerce.android.ui.woopos.home.ChildToParentEvent
import com.woocommerce.android.ui.woopos.home.ParentToChildrenEvent
import com.woocommerce.android.ui.woopos.home.WooPosChildrenToParentEventSender
Expand All @@ -13,6 +13,7 @@ import com.woocommerce.android.ui.woopos.util.WooPosCoroutineTestRule
import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsEvent
import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsEventConstant
import com.woocommerce.android.ui.woopos.util.format.WooPosFormatPrice
import com.woocommerce.android.ui.woopos.util.generateWooPosProduct
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.emptyFlow
Expand Down Expand Up @@ -51,11 +52,11 @@ class WooPosItemsSearchViewModelTest {
private val mockAnalyticsTracker: WooPosItemsSearchAnalyticsTracker = mock()

private val defaultQuery = "test query"
private val defaultProduct = ProductTestUtils.generateProduct(
private val defaultProduct = generateWooPosProduct(
productId = 1,
productName = "Test Product",
amount = "10.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)

@Before
Expand Down Expand Up @@ -280,13 +281,12 @@ class WooPosItemsSearchViewModelTest {
runTest {
// GIVEN
val variableProduct =
ProductTestUtils.generateProduct(
generateWooPosProduct(
productId = 1,
productName = "Variable Product",
amount = "10.0",
productType = "variable",
isVariable = true,
variationIds = "[101,102,103]"
productType = WooPosProductModelVersion2.WooPosProductType.VARIABLE,
variationIds = listOf(101L, 102L, 103L)
)

mockSuccessfulSearch(defaultQuery, listOf(variableProduct))
Expand All @@ -312,11 +312,11 @@ class WooPosItemsSearchViewModelTest {
@Test
fun `given content state and more pages available, when end of list reached, then load more data`() = runTest {
// GIVEN
val additionalProduct = ProductTestUtils.generateProduct(
val additionalProduct = generateWooPosProduct(
productId = 2,
productName = "Test Product 2",
amount = "20.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)

mockSuccessfulSearch(defaultQuery, listOf(defaultProduct))
Expand Down Expand Up @@ -346,11 +346,11 @@ class WooPosItemsSearchViewModelTest {
fun `given content state and more pages available, when end of list reached, then track ItemsNextPageLoaded event`() =
runTest {
// GIVEN
val additionalProduct = ProductTestUtils.generateProduct(
val additionalProduct = generateWooPosProduct(
productId = 2,
productName = "Test Product 2",
amount = "20.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)

mockSuccessfulSearch(defaultQuery, listOf(defaultProduct))
Expand Down Expand Up @@ -393,18 +393,18 @@ class WooPosItemsSearchViewModelTest {
@Test
fun `given cached products, when search performed, then cached results shown while loading`() = runTest {
// GIVEN
val cachedProduct = ProductTestUtils.generateProduct(
val cachedProduct = generateWooPosProduct(
productId = 1,
productName = "Cached Product",
amount = "10.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)

val remoteProduct = ProductTestUtils.generateProduct(
val remoteProduct = generateWooPosProduct(
productId = 2,
productName = "Remote Product",
amount = "20.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)

mockCachedThenRemoteSearch(defaultQuery, cachedProduct, remoteProduct)
Expand Down Expand Up @@ -437,11 +437,11 @@ class WooPosItemsSearchViewModelTest {
whenever(mockEmptyStateProvider.getLastSearches()).thenReturn(emptyList())

val products = listOf(
ProductTestUtils.generateProduct(
generateWooPosProduct(
productId = 1,
productName = "Test Product",
amount = "10.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)
)

Expand Down Expand Up @@ -479,11 +479,11 @@ class WooPosItemsSearchViewModelTest {
// GIVEN
val query = "test query"
val products = listOf(
ProductTestUtils.generateProduct(
generateWooPosProduct(
productId = 1,
productName = "Test Product",
amount = "10.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)
)

Expand Down Expand Up @@ -517,11 +517,11 @@ class WooPosItemsSearchViewModelTest {
// GIVEN
val query = "test query"
val products = listOf(
ProductTestUtils.generateProduct(
generateWooPosProduct(
productId = 1,
productName = "Test Product",
amount = "10.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)
)

Expand Down Expand Up @@ -557,11 +557,11 @@ class WooPosItemsSearchViewModelTest {
// GIVEN
val query = "test query"
val products = listOf(
ProductTestUtils.generateProduct(
generateWooPosProduct(
productId = 1,
productName = "Test Product",
amount = "10.0",
productType = "simple"
productType = WooPosProductModelVersion2.WooPosProductType.SIMPLE
)
)

Expand Down Expand Up @@ -784,7 +784,7 @@ class WooPosItemsSearchViewModelTest {
)
}

private fun mockSuccessfulSearch(query: String, products: List<com.woocommerce.android.model.Product>) {
private fun mockSuccessfulSearch(query: String, products: List<WooPosProductModelVersion2>) {
wheneverBlocking { mockDataSource.searchLocalProducts(query) }.thenReturn(emptyList())
wheneverBlocking { mockDataSource.searchRemoteProducts(query) }.thenReturn(Result.success(products))
whenever(mockParentToChildrenEventReceiver.events).thenReturn(
Expand All @@ -800,7 +800,7 @@ class WooPosItemsSearchViewModelTest {
)
}

private suspend fun mockSuccessfulPagination(query: String, products: List<com.woocommerce.android.model.Product>) {
private suspend fun mockSuccessfulPagination(query: String, products: List<WooPosProductModelVersion2>) {
whenever(mockDataSource.hasMorePages).thenReturn(true)
whenever(mockDataSource.loadMore(query)).thenReturn(
Result.success(products)
Expand All @@ -816,8 +816,8 @@ class WooPosItemsSearchViewModelTest {

private fun mockCachedThenRemoteSearch(
query: String,
cachedProduct: com.woocommerce.android.model.Product,
remoteProduct: com.woocommerce.android.model.Product
cachedProduct: WooPosProductModelVersion2,
remoteProduct: WooPosProductModelVersion2
) {
wheneverBlocking { mockDataSource.searchLocalProducts(query) }.thenReturn(listOf(cachedProduct))
wheneverBlocking {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.woocommerce.android.ui.woopos.util

import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2

fun generateWooPosProduct(
productId: Long = 1,
parentId: Long? = null,
productName: String = "Product 1",
status: WooPosProductModelVersion2.WooPosProductStatus = WooPosProductModelVersion2.WooPosProductStatus.PUBLISH,
amount: String = "10.0",
productType: WooPosProductModelVersion2.WooPosProductType = WooPosProductModelVersion2.WooPosProductType.SIMPLE,
isDownloadable: Boolean = false,
images: List<WooPosProductModelVersion2.WooPosProductImage> = emptyList(),
variationIds: List<Long> = emptyList(),
) = WooPosProductModelVersion2(
remoteId = productId,
name = productName,
pricing = WooPosProductModelVersion2.WooPosPricing.RegularPricing(amount.toBigDecimal()),
type = productType,
isDownloadable = isDownloadable,
parentId = parentId,
sku = "",
globalUniqueId = "",
status = status,
description = "",
shortDescription = "",
lastModified = "",
images = images,
variationIds = variationIds,
)

This file was deleted.

Loading