Skip to content

Commit

Permalink
Merge pull request #12614 from woocommerce/fix/add-unit-test-for-site…
Browse files Browse the repository at this point in the history
…picker-loading-state

Add unit test for sitepicker loading state
AnirudhBhat authored Sep 16, 2024
2 parents 2ca91f3 + a0a673d commit ea926b7
Showing 2 changed files with 32 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@ package com.woocommerce.android.ui.sitepicker

import android.os.Parcelable
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
@@ -78,7 +79,9 @@ class SitePickerViewModel @Inject constructor(
*/
@Suppress("OPT_IN_USAGE")
val sitePickerViewStateData = LiveDataDelegate(savedState, SitePickerViewState())
private var sitePickerViewState by sitePickerViewStateData

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
var sitePickerViewState by sitePickerViewStateData

private val _sites = MutableLiveData<List<SitesListItem>>()
val sites: LiveData<List<SitesListItem>> = _sites
Original file line number Diff line number Diff line change
@@ -35,8 +35,13 @@ import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.Logout
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.ShowDialog
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.ShowSnackbar
import com.woocommerce.android.viewmodel.ResourceProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.setMain
import org.assertj.core.api.Assert
import org.assertj.core.api.Assertions.assertThat
import org.junit.Before
@@ -55,6 +60,7 @@ import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooResult
import org.wordpress.android.fluxc.store.SiteStore.ConnectSiteInfoPayload
import kotlin.test.assertFalse

@ExperimentalCoroutinesApi
class SitePickerViewModelTest : BaseUnitTest() {
@@ -726,4 +732,26 @@ class SitePickerViewModelTest : BaseUnitTest() {
assertThat(state.noStoresLabelText).isEqualTo(resourceProvider.getString(R.string.login_simple_wpcom_site))
assertThat(state.isNoStoresBtnVisible).isFalse
}

@Test
fun `given initiated, when isPrimaryBtnVisible and loading state, then primary button view is not displayed`() =
runTest {
Dispatchers.setMain(StandardTestDispatcher())
val expectedSites = defaultExpectedSiteList.map { it.apply { setIsJetpackCPConnected(true) } }
whenSitesAreFetched(sitesFromDb = expectedSites)
whenViewModelIsCreated()
val states = viewModel.sitePickerViewStateData.liveData.captureValues()

// Make primary button visible after initialization. This may happen in low memory condition.
viewModel.sitePickerViewState = viewModel.sitePickerViewState.copy(isPrimaryBtnVisible = true)

advanceUntilIdle()

states.forEach { state ->
if (state.isSkeletonViewVisible) {
assertFalse(state.isPrimaryBtnVisible)
}
}
Dispatchers.resetMain()
}
}

0 comments on commit ea926b7

Please sign in to comment.