diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/SiteModelExt.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/SiteModelExt.kt index 227c7bb820c..178afc1b131 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/SiteModelExt.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/SiteModelExt.kt @@ -4,7 +4,6 @@ import android.text.TextUtils import com.woocommerce.android.ui.plans.domain.FREE_TRIAL_PLAN_ID import com.woocommerce.android.util.WooLog import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.SiteStore.SiteVisibility import org.wordpress.android.fluxc.store.SiteStore.SiteVisibility.PUBLIC import org.wordpress.android.fluxc.utils.SiteUtils.getNormalizedTimezone import org.wordpress.android.fluxc.utils.extensions.slashJoin @@ -74,14 +73,5 @@ val SiteModel?.isFreeTrial: Boolean val SiteModel?.isSitePublic: Boolean get() = this?.let { !isWPComAtomic || publishedStatus == PUBLIC.value() } ?: false -val SiteModel?.isSitePrivate: Boolean - get() = this?.publishedStatus == SiteVisibility.PRIVATE.value() - val SiteModel.isEligibleForAI: Boolean get() = isWPComAtomic || planActiveFeatures.orEmpty().contains("ai-assistant") - -val SiteModel?.isWooExpressSiteReadyToUse: Boolean - get() = this?.isJetpackInstalled == true && - this.isJetpackConnected && - this.isWpComStore && - this.hasWooCommerce diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt index 5f064dd8b0b..bd85b2c1f8c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt @@ -25,7 +25,6 @@ import com.woocommerce.android.extensions.fastStripHtml import com.woocommerce.android.extensions.getList import com.woocommerce.android.extensions.isEligibleForAI import com.woocommerce.android.extensions.isEmpty -import com.woocommerce.android.extensions.isSitePrivate import com.woocommerce.android.extensions.isSitePublic import com.woocommerce.android.extensions.orNullIfEmpty import com.woocommerce.android.extensions.removeItem @@ -171,7 +170,7 @@ class ProductDetailViewModel @Inject constructor( // view state for the product detail screen val productDetailViewStateData = LiveDataDelegate( savedState = savedState, - initialValue = ProductDetailViewState(areImagesAvailable = !selectedSite.get().isSitePrivate) + initialValue = ProductDetailViewState(areImagesAvailable = !selectedSite.get().isPrivate) ) { old, new -> if (old?.productDraft != new.productDraft || old?.draftPassword != new.draftPassword) { new.productDraft?.let { diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelGenerateVariationFlowTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelGenerateVariationFlowTest.kt index c8c42139eb8..0d54f7e8393 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelGenerateVariationFlowTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelGenerateVariationFlowTest.kt @@ -10,6 +10,7 @@ import com.woocommerce.android.media.ProductImagesServiceWrapper import com.woocommerce.android.model.RequestResult import com.woocommerce.android.model.VariantOption import com.woocommerce.android.tools.NetworkStatus +import com.woocommerce.android.tools.SelectedSite import com.woocommerce.android.ui.media.MediaFileUploadHandler import com.woocommerce.android.ui.products.ParameterRepository import com.woocommerce.android.ui.products.ProductTestUtils @@ -40,6 +41,7 @@ import org.mockito.kotlin.spy import org.mockito.kotlin.stub import org.mockito.kotlin.verify import org.mockito.kotlin.whenever +import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.WooCommerceStore @ExperimentalCoroutinesApi @@ -78,6 +80,10 @@ class ProductDetailViewModelGenerateVariationFlowTest : BaseUnitTest() { private val product = ProductTestUtils.generateProduct(PRODUCT_REMOTE_ID) private val isWindowClassLargeThanCompact: IsWindowClassLargeThanCompact = mock() + private var selectedSite: SelectedSite = mock { + on { get() } doReturn SiteModel().apply { setIsPrivate(false) } + } + private lateinit var viewModel: ProductDetailViewModel @Before @@ -111,7 +117,7 @@ class ProductDetailViewModelGenerateVariationFlowTest : BaseUnitTest() { generateVariationCandidates = generateVariationCandidates, duplicateProduct = mock(), tracker = tracker, - selectedSite = mock(), + selectedSite = selectedSite, getProductQuantityRules = mock(), getBundledProductsCount = mock(), getComponentProducts = mock(), diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelTest.kt index 9bc6fdc2112..ebb1eeff1fb 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModelTest.kt @@ -51,7 +51,6 @@ import org.mockito.kotlin.whenever import org.wordpress.android.fluxc.model.MediaModel import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.MediaStore -import org.wordpress.android.fluxc.store.SiteStore.SiteVisibility import org.wordpress.android.fluxc.store.WCProductStore import org.wordpress.android.fluxc.store.WooCommerceStore import java.math.BigDecimal @@ -78,9 +77,6 @@ class ProductDetailViewModelTest : BaseUnitTest() { private val productTagsRepository: ProductTagsRepository = mock() private val mediaFilesRepository: MediaFilesRepository = mock() private val variationRepository: VariationRepository = mock() - private var selectedSite: SelectedSite = mock { - on { get() } doReturn SiteModel() - } private val resources: ResourceProvider = mock { on(it.getString(any())).thenAnswer { i -> i.arguments[0].toString() } @@ -131,12 +127,16 @@ class ProductDetailViewModelTest : BaseUnitTest() { private lateinit var viewModel: ProductDetailViewModel + private var selectedSite: SelectedSite = mock { + on { get() } doReturn SiteModel().apply { setIsPrivate(false) } + } + private val productWithParameters = ProductDetailViewModel.ProductDetailViewState( productDraft = product, auxiliaryState = ProductDetailViewModel.ProductDetailViewState.AuxiliaryState.None, uploadingImageUris = emptyList(), showBottomSheetButton = true, - areImagesAvailable = false, + areImagesAvailable = true, ) private val expectedCards = listOf( @@ -1067,22 +1067,10 @@ class ProductDetailViewModelTest : BaseUnitTest() { @Test fun `given selected site is private, when product detail is opened, then images are not available`() = testBlocking { // GIVEN - viewModel.start() - - // WHEN - var productData: ProductDetailViewModel.ProductDetailViewState? = null - viewModel.productDetailViewStateData.observeForever { _, new -> productData = new } - - // THEN - Assertions.assertThat(productData?.areImagesAvailable).isFalse() - } - - @Test - fun `given selected site is public, when product detail is opened, then images are available`() = testBlocking { - // GIVEN - selectedSite = mock { - on { get() } doReturn SiteModel().apply { publishedStatus = SiteVisibility.COMING_SOON.value() } + val selectedSite: SelectedSite = mock { + on { get() } doReturn SiteModel().apply { setIsPrivate(true) } } + savedState = ProductDetailFragmentArgs(ProductDetailFragment.Mode.ShowProduct(PRODUCT_REMOTE_ID)) .toSavedStateHandle() viewModel = spy( @@ -1114,52 +1102,19 @@ class ProductDetailViewModelTest : BaseUnitTest() { isWindowClassLargeThanCompact = isWindowClassLargeThanCompact, ) ) + viewModel.start() // WHEN var productData: ProductDetailViewModel.ProductDetailViewState? = null viewModel.productDetailViewStateData.observeForever { _, new -> productData = new } // THEN - Assertions.assertThat(productData?.areImagesAvailable).isTrue() + Assertions.assertThat(productData?.areImagesAvailable).isFalse() } @Test - fun `given selected site is coming soon, when product detail is opened, then images are available`() = testBlocking { + fun `given selected site is public, when product detail is opened, then images are available`() = testBlocking { // GIVEN - selectedSite = mock { - on { get() } doReturn SiteModel().apply { publishedStatus = SiteVisibility.COMING_SOON.value() } - } - savedState = ProductDetailFragmentArgs(ProductDetailFragment.Mode.ShowProduct(PRODUCT_REMOTE_ID)) - .toSavedStateHandle() - viewModel = spy( - ProductDetailViewModel( - savedState = savedState, - dispatchers = coroutinesTestRule.testDispatchers, - parameterRepository = parameterRepository, - productRepository = productRepository, - networkStatus = networkStatus, - currencyFormatter = currencyFormatter, - resources = resources, - productCategoriesRepository = productCategoriesRepository, - productTagsRepository = productTagsRepository, - mediaFilesRepository = mediaFilesRepository, - variationRepository = variationRepository, - mediaFileUploadHandler = mediaFileUploadHandler, - appPrefsWrapper = prefsWrapper, - addonRepository = addonRepository, - generateVariationCandidates = generateVariationCandidates, - duplicateProduct = mock(), - tracker = tracker, - selectedSite = selectedSite, - getProductQuantityRules = mock(), - getBundledProductsCount = mock(), - getComponentProducts = mock(), - productListRepository = mock(), - isBlazeEnabled = isBlazeEnabled, - isProductCurrentlyPromoted = mock(), - isWindowClassLargeThanCompact = isWindowClassLargeThanCompact, - ) - ) viewModel.start() // WHEN