@@ -6,42 +6,32 @@ import com.woocommerce.android.R.string
66import com.woocommerce.android.extensions.takeIfNotEqualTo
77import com.woocommerce.android.model.toAppModel
88import com.woocommerce.android.ui.common.UserEligibilityErrorViewModel.ViewState
9+ import com.woocommerce.android.ui.login.AccountRepository
910import com.woocommerce.android.viewmodel.BaseUnitTest
10- import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.*
11+ import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.Exit
12+ import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.Logout
13+ import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.ShowSnackbar
1114import kotlinx.coroutines.ExperimentalCoroutinesApi
1215import org.assertj.core.api.Assertions.assertThat
1316import org.junit.Before
1417import org.junit.Test
15- import org.mockito.kotlin.KArgumentCaptor
1618import org.mockito.kotlin.any
17- import org.mockito.kotlin.argumentCaptor
18- import org.mockito.kotlin.clearInvocations
1919import org.mockito.kotlin.doReturn
2020import org.mockito.kotlin.mock
21- import org.mockito.kotlin.spy
2221import org.mockito.kotlin.times
2322import org.mockito.kotlin.verify
2423import org.mockito.kotlin.whenever
25- import org.wordpress.android.fluxc.Dispatcher
26- import org.wordpress.android.fluxc.action.AccountAction.SIGN_OUT
27- import org.wordpress.android.fluxc.action.SiteAction
28- import org.wordpress.android.fluxc.annotations.action.Action
2924import org.wordpress.android.fluxc.model.user.WCUserModel
30- import org.wordpress.android.fluxc.store.AccountStore
31- import org.wordpress.android.fluxc.store.AccountStore.OnAccountChanged
32- import kotlin.test.assertEquals
3325import kotlin.test.assertFalse
3426import kotlin.test.assertTrue
3527
3628@ExperimentalCoroutinesApi
3729class UserEligibilityErrorViewModelTest : BaseUnitTest () {
3830 private val appPrefsWrapper: AppPrefs = mock()
39- private val dispatcher: Dispatcher = mock()
40- private val accountStore: AccountStore = mock()
31+ private val accountRepository: AccountRepository = mock()
4132 private val userEligibilityFetcher: UserEligibilityFetcher = mock()
4233
4334 private lateinit var viewModel: UserEligibilityErrorViewModel
44- private lateinit var actionCaptor: KArgumentCaptor <Action <* >>
4535
4636 private val testUser = WCUserModel ().apply {
4737 remoteUserId = 1L
@@ -56,22 +46,11 @@ class UserEligibilityErrorViewModelTest : BaseUnitTest() {
5646
5747 @Before
5848 fun setup () {
59- actionCaptor = argumentCaptor()
60-
61- viewModel = spy(
62- UserEligibilityErrorViewModel (
63- SavedStateHandle (),
64- appPrefsWrapper,
65- dispatcher,
66- accountStore,
67- userEligibilityFetcher
68- )
69- )
70-
71- clearInvocations(
72- viewModel,
73- userEligibilityFetcher,
74- appPrefsWrapper
49+ viewModel = UserEligibilityErrorViewModel (
50+ SavedStateHandle (),
51+ appPrefsWrapper,
52+ accountRepository,
53+ userEligibilityFetcher
7554 )
7655 }
7756
@@ -149,23 +128,17 @@ class UserEligibilityErrorViewModelTest : BaseUnitTest() {
149128 }
150129
151130 @Test
152- fun `Handles logout button click correctly` () {
153- doReturn(false ).whenever(accountStore).hasAccessToken ()
131+ fun `Handles logout button click correctly` () = testBlocking {
132+ doReturn(true ).whenever(accountRepository).logout ()
154133
155134 var logoutEvent: Logout ? = null
156135 viewModel.event.observeForever {
157- if (it is Logout ) logoutEvent = it
136+ logoutEvent = it as ? Logout
158137 }
159138
160139 viewModel.onLogoutButtonClicked()
161140
162- // note that we expect two dispatches because there's one to sign out the user and
163- // the other to remove WPcom and Jetpack sites from local db
164- verify(dispatcher, times(2 )).dispatch(actionCaptor.capture())
165- assertEquals(SIGN_OUT , actionCaptor.firstValue.type)
166- assertEquals(SiteAction .REMOVE_WPCOM_AND_JETPACK_SITES , actionCaptor.secondValue.type)
167-
168- viewModel.onAccountChanged(OnAccountChanged ())
141+ verify(accountRepository).logout()
169142 assertThat(logoutEvent).isNotNull
170143 }
171144}
0 commit comments