diff --git a/app/src/test/java/com/duckduckgo/app/firebutton/FireButtonViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/firebutton/FireButtonViewModelTest.kt index 3a2c9c676620..d216e4691936 100644 --- a/app/src/test/java/com/duckduckgo/app/firebutton/FireButtonViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/firebutton/FireButtonViewModelTest.kt @@ -67,6 +67,7 @@ internal class FireButtonViewModelTest { whenever(mockAppSettingsDataStore.automaticallyClearWhenOption).thenReturn(ClearWhenOption.APP_EXIT_ONLY) whenever(mockAppSettingsDataStore.automaticallyClearWhatOption).thenReturn(ClearWhatOption.CLEAR_NONE) + whenever(mockAppSettingsDataStore.selectedFireAnimation).thenReturn(FireAnimation.HeroFire) testee = FireButtonViewModel( mockAppSettingsDataStore, @@ -200,9 +201,11 @@ internal class FireButtonViewModelTest { fun whenNewFireAnimationSelectedThenUpdateViewState() = runTest { val expectedAnimation = FireAnimation.HeroWater - testee.onFireAnimationSelected(expectedAnimation) - testee.viewState().test { + // expect HeroFire as a default which will happen when view state flow is created + assertEquals(FireAnimation.HeroFire, awaitItem().selectedFireAnimation) + + testee.onFireAnimationSelected(expectedAnimation) assertEquals(expectedAnimation, awaitItem().selectedFireAnimation) cancelAndConsumeRemainingEvents() diff --git a/app/src/test/java/com/duckduckgo/app/onboarding/ui/page/WelcomePageViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/onboarding/ui/page/WelcomePageViewModelTest.kt index 906daca836cc..72d99ecbb0a2 100644 --- a/app/src/test/java/com/duckduckgo/app/onboarding/ui/page/WelcomePageViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/onboarding/ui/page/WelcomePageViewModelTest.kt @@ -27,12 +27,10 @@ import com.duckduckgo.common.test.CoroutineTestRule import kotlin.time.ExperimentalTime import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ObsoleteCoroutinesApi -import kotlinx.coroutines.channels.ConflatedBroadcastChannel import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.test.runTest -import org.junit.After import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule @@ -65,9 +63,9 @@ class WelcomePageViewModelTest { @Mock private lateinit var defaultRoleBrowserDialog: DefaultRoleBrowserDialog - private val events = ConflatedBroadcastChannel() + private val events = MutableSharedFlow(replay = 1) - lateinit var viewModel: WelcomePageViewModel + private lateinit var viewModel: WelcomePageViewModel private lateinit var viewEvents: Flow @@ -81,19 +79,14 @@ class WelcomePageViewModelTest { defaultRoleBrowserDialog = defaultRoleBrowserDialog, ) - viewEvents = events.asFlow().flatMapLatest { viewModel.reduce(it) } - } - - @After - fun teardown() { - events.close() + viewEvents = events.flatMapLatest { viewModel.reduce(it) } } @Test fun whenOnPrimaryCtaClickedAndShouldNotShowDialogThenFireAndFinish() = runTest { whenever(defaultRoleBrowserDialog.shouldShowDialog()).thenReturn(false) - events.send(WelcomePageView.Event.OnPrimaryCtaClicked) + events.emit(WelcomePageView.Event.OnPrimaryCtaClicked) viewEvents.test { assertTrue(awaitItem() == WelcomePageView.State.Finish) @@ -106,7 +99,7 @@ class WelcomePageViewModelTest { val intent = Intent() whenever(defaultRoleBrowserDialog.createIntent(any())).thenReturn(intent) - events.send(WelcomePageView.Event.OnPrimaryCtaClicked) + events.emit(WelcomePageView.Event.OnPrimaryCtaClicked) viewEvents.test { assertTrue(awaitItem() == WelcomePageView.State.ShowDefaultBrowserDialog(intent)) @@ -118,7 +111,7 @@ class WelcomePageViewModelTest { whenever(defaultRoleBrowserDialog.shouldShowDialog()).thenReturn(true) whenever(defaultRoleBrowserDialog.createIntent(any())).thenReturn(null) - events.send(WelcomePageView.Event.OnPrimaryCtaClicked) + events.emit(WelcomePageView.Event.OnPrimaryCtaClicked) viewEvents.test { assertTrue(awaitItem() == WelcomePageView.State.Finish) @@ -128,7 +121,7 @@ class WelcomePageViewModelTest { @Test fun whenOnDefaultBrowserSetThenCallDialogShownFireAndFinish() = runTest { - events.send(WelcomePageView.Event.OnDefaultBrowserSet) + events.emit(WelcomePageView.Event.OnDefaultBrowserSet) viewEvents.test { assertTrue(awaitItem() == WelcomePageView.State.Finish) @@ -144,7 +137,7 @@ class WelcomePageViewModelTest { @Test fun whenOnDefaultBrowserNotSetThenCallDialogShownFireAndFinish() = runTest { - events.send(WelcomePageView.Event.OnDefaultBrowserNotSet) + events.emit(WelcomePageView.Event.OnDefaultBrowserNotSet) viewEvents.test { assertTrue(awaitItem() == WelcomePageView.State.Finish) diff --git a/app/src/test/java/com/duckduckgo/app/settings/SettingsViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/settings/SettingsViewModelTest.kt index a5d36d325897..64c86bb5fe7b 100644 --- a/app/src/test/java/com/duckduckgo/app/settings/SettingsViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/settings/SettingsViewModelTest.kt @@ -44,6 +44,7 @@ import com.duckduckgo.networkprotection.api.NetworkProtectionWaitlist.NetPWaitli import com.duckduckgo.sync.api.DeviceSyncState import kotlin.time.ExperimentalTime import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runTest @@ -103,6 +104,7 @@ class SettingsViewModelTest { whenever(networkProtectionWaitlist.getState()).thenReturn(NotUnlocked) whenever(networkProtectionState.isRunning()).thenReturn(false) whenever(networkProtectionState.isEnabled()).thenReturn(false) + whenever(networkProtectionState.getConnectionStateFlow()).thenReturn(emptyFlow()) whenever(appTrackingProtection.isRunning()).thenReturn(false) whenever(appTrackingProtection.isEnabled()).thenReturn(false) whenever(appTrackingProtection.isOnboarded()).thenReturn(false) diff --git a/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/ui/credential/management/AutofillSettingsViewModelTest.kt b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/ui/credential/management/AutofillSettingsViewModelTest.kt index 7d53c0ffc325..6249d6db7116 100644 --- a/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/ui/credential/management/AutofillSettingsViewModelTest.kt +++ b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/ui/credential/management/AutofillSettingsViewModelTest.kt @@ -43,6 +43,7 @@ import com.duckduckgo.autofill.impl.ui.credential.repository.DuckAddressStatusRe import com.duckduckgo.common.test.CoroutineTestRule import kotlin.reflect.KClass import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -92,6 +93,10 @@ class AutofillSettingsViewModelTest { @Before fun setup() { whenever(webUrlIdentifier.isLikelyAUrl(anyOrNull())).thenReturn(true) + + runTest { + whenever(mockStore.getAllCredentials()).thenReturn(emptyFlow()) + } } @Test diff --git a/network-protection/network-protection-impl/src/test/java/com/duckduckgo/networkprotection/impl/management/NetworkProtectionManagementViewModelTest.kt b/network-protection/network-protection-impl/src/test/java/com/duckduckgo/networkprotection/impl/management/NetworkProtectionManagementViewModelTest.kt index c81fdf9efd2f..6cf5f6416472 100644 --- a/network-protection/network-protection-impl/src/test/java/com/duckduckgo/networkprotection/impl/management/NetworkProtectionManagementViewModelTest.kt +++ b/network-protection/network-protection-impl/src/test/java/com/duckduckgo/networkprotection/impl/management/NetworkProtectionManagementViewModelTest.kt @@ -104,7 +104,12 @@ class NetworkProtectionManagementViewModelTest { MockitoAnnotations.openMocks(this) vpnFeaturesRegistry = FakeVpnFeaturesRegistry() - whenever(networkProtectionRepository.reconnectStatus).thenReturn(NotReconnecting) + runTest { + whenever(networkProtectionRepository.reconnectStatus).thenReturn(NotReconnecting) + whenever(vpnStateMonitor.isAlwaysOnEnabled()).thenReturn(false) + whenever(vpnStateMonitor.vpnLastDisabledByAndroid()).thenReturn(false) + } + testee = NetworkProtectionManagementViewModel( vpnStateMonitor, vpnFeaturesRegistry, diff --git a/sync/sync-impl/src/test/java/com/duckduckgo/sync/impl/ui/SyncActivityViewModelTest.kt b/sync/sync-impl/src/test/java/com/duckduckgo/sync/impl/ui/SyncActivityViewModelTest.kt index 32683a77cb9b..59407948d662 100644 --- a/sync/sync-impl/src/test/java/com/duckduckgo/sync/impl/ui/SyncActivityViewModelTest.kt +++ b/sync/sync-impl/src/test/java/com/duckduckgo/sync/impl/ui/SyncActivityViewModelTest.kt @@ -46,6 +46,7 @@ import kotlin.reflect.KClass import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -86,6 +87,8 @@ class SyncActivityViewModelTest { syncStateMonitor = syncStateMonitor, recoveryCodePDF = recoveryPDF, ) + + whenever(syncStateMonitor.syncState()).thenReturn(emptyFlow()) } @Test