11package org.wordpress.android.ui.voicetocontent
22
3+ import kotlinx.coroutines.CoroutineScope
34import kotlinx.coroutines.ExperimentalCoroutinesApi
5+ import kotlinx.coroutines.flow.flow
6+ import kotlinx.coroutines.flow.toList
7+ import kotlinx.coroutines.launch
48import org.junit.Before
5- import org.junit.runner.RunWith
69import org.mockito.Mock
7- import org.mockito.junit.MockitoJUnitRunner
810import org.mockito.kotlin.verifyNoInteractions
911import org.mockito.kotlin.whenever
1012import org.wordpress.android.BaseUnitTest
1113import org.wordpress.android.ui.mysite.SelectedSiteRepository
14+ import org.wordpress.android.util.audio.RecordingUpdate
1215import org.wordpress.android.viewmodel.ContextProvider
1316import kotlin.test.Test
1417
1518@ExperimentalCoroutinesApi
16- @RunWith(MockitoJUnitRunner ::class )
1719class VoiceToContentViewModelTest : BaseUnitTest () {
1820 @Mock
1921 lateinit var voiceToContentFeatureUtils: VoiceToContentFeatureUtils
@@ -35,8 +37,22 @@ class VoiceToContentViewModelTest : BaseUnitTest() {
3537
3638 private lateinit var viewModel: VoiceToContentViewModel
3739
38- // private lateinit var uiState: MutableList<VoiceToContentResult>
40+ private var uiStateChanges = mutableListOf<VoiceToContentUiState >()
41+ private val uiState
42+ get() = viewModel.state.value
3943
44+ private fun <T > testUiStateChanges (
45+ block : suspend CoroutineScope .() -> T
46+ ) {
47+ test {
48+ uiStateChanges.clear()
49+ val job = launch(testDispatcher()) {
50+ viewModel.state.toList(uiStateChanges)
51+ }
52+ this .block()
53+ job.cancel()
54+ }
55+ }
4056 /* private val jetpackAIAssistantFeature = JetpackAIAssistantFeature(
4157 hasFeature = true,
4258 isOverLimit = false,
@@ -55,7 +71,7 @@ class VoiceToContentViewModelTest : BaseUnitTest() {
5571 @Before
5672 fun setup () {
5773 // Mock the recording updates to return a non-null flow before ViewModel instantiation
58- // whenever(recordingUseCase.recordingUpdates()).thenReturn(createRecordingUpdateFlow())
74+ whenever(recordingUseCase.recordingUpdates()).thenReturn(createRecordingUpdateFlow())
5975
6076 viewModel = VoiceToContentViewModel (
6177 testDispatcher(),
@@ -66,20 +82,13 @@ class VoiceToContentViewModelTest : BaseUnitTest() {
6682 contextProvider,
6783 prepareVoiceToContentUseCase
6884 )
69- // uiState = mutableListOf()
70- // viewModel.uiState.observeForever { event ->
71- // event?.let { result ->
72- // uiState.add(result)
73- // }
74- // }
7585 }
7686
77- //
78- // // Helper function to create a consistent flow
79- // private fun createRecordingUpdateFlow() = flow {
80- // emit(RecordingUpdate(0, 0, false))
81- // }
82- //
87+ // Helper function to create a consistent flow
88+ private fun createRecordingUpdateFlow () = flow {
89+ emit(RecordingUpdate (0 , 0 , false ))
90+ }
91+
8392 @Test
8493 fun `when site is null, then execute posts error state ` () = test {
8594 whenever(selectedSiteRepository.getSelectedSite()).thenReturn(null )
0 commit comments