11package com.android.contacts.sim
22
33import androidx.lifecycle.SavedStateHandle
4+ import app.cash.turbine.test
45import com.android.contacts.domain.accounts.model.AccountDisplayModel
56import com.android.contacts.domain.accounts.model.AccountModel
67import com.android.contacts.domain.accounts.usecase.GetDefaultAccount
78import com.android.contacts.domain.accounts.usecase.LoadAccounts
89import com.android.contacts.domain.sim.model.SimContactsResult
10+ import com.android.contacts.domain.sim.usecase.LoadSimCards
911import com.android.contacts.domain.sim.usecase.LoadSimContacts
1012import com.android.contacts.domain.sim.usecase.StartSimImport
1113import com.android.contacts.model.SimContact
@@ -17,6 +19,7 @@ import com.android.contacts.ui.simimport.screen.SimImportViewModel
1719import com.android.contacts.ui.simimport.screen.mapper.SimContactUiModelMapperImpl
1820import com.android.contacts.ui.simimport.screen.model.AccountUiModel
1921import com.android.contacts.ui.simimport.screen.model.SimImportAction as Action
22+ import com.android.contacts.ui.simimport.screen.model.SimImportEffect as Effect
2023import kotlinx.collections.immutable.ImmutableList
2124import kotlinx.collections.immutable.persistentListOf
2225import kotlinx.collections.immutable.persistentMapOf
@@ -43,6 +46,21 @@ class SimImportViewModelTest {
4346 // Not mocking this mapper since it holds no logic
4447 private val simContactUiModelMapper = SimContactUiModelMapperImpl ()
4548
49+ @Test
50+ fun subscriptionId_whenSimCardDoesNotExist_closes () = runTest {
51+ val subscriptionId = 2
52+ val subject = createViewModel(
53+ savedStateHandle = SavedStateHandle (
54+ mapOf (UIIntents .EXTRA_SUBSCRIPTION_ID to subscriptionId),
55+ ),
56+ loadSimCards = { flowOf(listOf ()) },
57+ )
58+ subject.effects.test {
59+ advanceUntilIdle()
60+ assertEquals(Effect .Close (isSuccessful = false ), awaitItem())
61+ }
62+ }
63+
4664 @Test
4765 fun isLoading_whenBothLoadAccountsAndContactsFinish_isFalse () =
4866 runTest(context = mainDispatcherRule.testDispatcher) {
@@ -89,7 +107,7 @@ class SimImportViewModelTest {
89107 val account1 = AccountDisplayModelFactory .build()
90108 val account2 = AccountDisplayModelFactory .build()
91109 val subject = createViewModel(
92- getDefaultAccount = { account2.toUiModel() },
110+ getDefaultAccount = { account2.account },
93111 loadAccounts = { flowOf(persistentListOf(account1, account2)) },
94112 )
95113 advanceUntilIdle()
@@ -108,7 +126,7 @@ class SimImportViewModelTest {
108126 val account2 = AccountDisplayModelFactory .build()
109127 val loadAccountsFlow = MutableStateFlow (persistentListOf(account1, account2))
110128 val subject = createViewModel(
111- getDefaultAccount = { account1.toUiModel() },
129+ getDefaultAccount = { account1.account },
112130 loadAccounts = { loadAccountsFlow },
113131 )
114132
@@ -149,7 +167,7 @@ class SimImportViewModelTest {
149167 val savedStateHandle = SavedStateHandle ()
150168 val subject1 = createViewModel(
151169 savedStateHandle = savedStateHandle,
152- getDefaultAccount = { account1.toUiModel() },
170+ getDefaultAccount = { account1.account },
153171 loadAccounts = { flowOf(persistentListOf(account1, account2)) },
154172 )
155173 advanceUntilIdle()
@@ -159,7 +177,7 @@ class SimImportViewModelTest {
159177
160178 val subject2 = createViewModel(
161179 savedStateHandle = savedStateHandle,
162- getDefaultAccount = { account1.toUiModel() },
180+ getDefaultAccount = { account1.account },
163181 loadAccounts = { flowOf(persistentListOf(account1, account2)) },
164182 )
165183 advanceUntilIdle()
@@ -349,7 +367,7 @@ class SimImportViewModelTest {
349367 SimContactsResult (
350368 contacts = persistentListOf(contact),
351369 existingContactsInAccounts = persistentMapOf(
352- account.toUiModel() to setOf (contact),
370+ account.account to setOf (contact),
353371 ),
354372 ),
355373 )
@@ -380,37 +398,35 @@ class SimImportViewModelTest {
380398 )
381399 advanceUntilIdle()
382400
383- subject.onAction(Action .ImportClicked )
384- advanceUntilIdle()
385-
401+ subject.effects.test {
402+ subject.onAction(Action .ImportClicked )
403+ advanceUntilIdle()
404+ assertEquals(Effect .Close (isSuccessful = true ), awaitItem())
405+ }
386406 assertNotNull(startSimImportCall)
387407 startSimImportCall!! .let { (callSubscriptionId, callContacts, callAccount) ->
388408 assertEquals(subscriptionId, callSubscriptionId)
389409 assertEquals(persistentListOf(contact), callContacts)
390- assertEquals(account.toUiModel() , callAccount)
410+ assertEquals(account.account , callAccount)
391411 }
392412 }
393413
394414 private fun createViewModel (
395415 savedStateHandle : SavedStateHandle = SavedStateHandle (),
416+ loadSimCards : LoadSimCards = { emptyFlow() },
396417 getDefaultAccount : GetDefaultAccount = { null },
397418 loadSimContacts : LoadSimContacts = { emptyFlow() },
398419 loadAccounts : LoadAccounts = { emptyFlow() },
399420 startSimImport : StartSimImport = { _, _, _ -> },
400421 ) = SimImportViewModel (
401422 savedStateHandle,
402423 getDefaultAccount = getDefaultAccount,
424+ loadSimCards = loadSimCards,
403425 loadSimContacts = loadSimContacts,
404426 loadAccounts = loadAccounts,
405427 startSimImport = startSimImport,
406428 simContactUiModelMapper = simContactUiModelMapper,
407429 )
408430
409- private fun AccountDisplayModel.toUiModel () = AccountModel (
410- name = name,
411- type = type,
412- dataSet = dataSet,
413- )
414-
415431 private fun SimContact.toUiModel () = simContactUiModelMapper.map(this )
416432}
0 commit comments