diff options
| author | MaryamShaghaghi <122574719+MaryamShaghaghi@users.noreply.github.com> | 2023-11-27 14:37:32 +0100 |
|---|---|---|
| committer | MaryamShaghaghi <122574719+MaryamShaghaghi@users.noreply.github.com> | 2023-12-04 11:33:59 +0100 |
| commit | 1e64dcdbd9d82173c65a4d4b49f72f80f7de8269 (patch) | |
| tree | b2b1fcec30e0b2f89732abe653054b652176a68d /android/app/src/test | |
| parent | ba4658d9545d926bfe08341a5bc80c63b3a09d3e (diff) | |
| download | mullvadvpn-1e64dcdbd9d82173c65a4d4b49f72f80f7de8269.tar.xz mullvadvpn-1e64dcdbd9d82173c65a4d4b49f72f80f7de8269.zip | |
Add filter screen and viewmodel tests
Co-Authored-By: Boban Sijuk <49131853+boki91@users.noreply.github.com>
Diffstat (limited to 'android/app/src/test')
| -rw-r--r-- | android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModelTest.kt | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModelTest.kt new file mode 100644 index 0000000000..9f61ea4a91 --- /dev/null +++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModelTest.kt @@ -0,0 +1,129 @@ +package net.mullvad.mullvadvpn.viewmodel + +import androidx.lifecycle.viewModelScope +import app.cash.turbine.test +import io.mockk.coVerify +import io.mockk.every +import io.mockk.mockk +import io.mockk.unmockkAll +import kotlin.test.assertEquals +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest +import net.mullvad.mullvadvpn.compose.state.toConstraintProviders +import net.mullvad.mullvadvpn.compose.state.toOwnershipConstraint +import net.mullvad.mullvadvpn.lib.common.test.TestCoroutineRule +import net.mullvad.mullvadvpn.lib.common.test.assertLists +import net.mullvad.mullvadvpn.model.Constraint +import net.mullvad.mullvadvpn.model.Ownership +import net.mullvad.mullvadvpn.model.Providers +import net.mullvad.mullvadvpn.relaylist.Provider +import net.mullvad.mullvadvpn.usecase.RelayListFilterUseCase +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test + +class FilterViewModelTest { + @get:Rule val testCoroutineRule = TestCoroutineRule() + private val mockRelayListFilterUseCase: RelayListFilterUseCase = mockk(relaxed = true) + private lateinit var viewModel: FilterViewModel + private val selectedOwnership = + MutableStateFlow<Constraint<Ownership>>(Constraint.Only(Ownership.MullvadOwned)) + private val dummyListOfAllProviders = + listOf( + Provider("31173", true), + Provider("100TB", false), + Provider("Blix", true), + Provider("Creanova", true), + Provider("DataPacket", false), + Provider("HostRoyale", false), + Provider("hostuniversal", false), + Provider("iRegister", false), + Provider("M247", false), + Provider("Makonix", false), + Provider("PrivateLayer", false), + Provider("ptisp", false), + Provider("Qnax", false), + Provider("Quadranet", false), + Provider("techfutures", false), + Provider("Tzulo", false), + Provider("xtom", false) + ) + private val mockSelectedProviders: List<Provider> = + listOf(Provider("31173", true), Provider("Blix", true), Provider("Creanova", true)) + + @Before + fun setup() { + every { mockRelayListFilterUseCase.selectedOwnership() } returns selectedOwnership + every { mockRelayListFilterUseCase.availableProviders() } returns + flowOf(dummyListOfAllProviders) + every { mockRelayListFilterUseCase.selectedProviders() } returns + flowOf(Constraint.Only(Providers(mockSelectedProviders.map { it.name }.toHashSet()))) + viewModel = FilterViewModel(mockRelayListFilterUseCase) + } + + @After + fun teardown() { + viewModel.viewModelScope.coroutineContext.cancel() + unmockkAll() + } + + @Test + fun testSetSelectedOwnership() = runTest { + // Arrange + val mockOwnership = Ownership.Rented + // Assert + viewModel.uiState.test { + assertEquals(awaitItem().selectedOwnership, Ownership.MullvadOwned) + viewModel.setSelectedOwnership(mockOwnership) + assertEquals(mockOwnership, awaitItem().selectedOwnership) + } + } + + @Test + fun testSetSelectedProvider() = runTest { + // Arrange + val mockSelectedProvidersList = Provider("ptisp", false) + // Assert + viewModel.uiState.test { + assertLists(awaitItem().selectedProviders, mockSelectedProviders) + viewModel.setSelectedProvider(true, mockSelectedProvidersList) + assertLists( + listOf(mockSelectedProvidersList) + mockSelectedProviders, + awaitItem().selectedProviders + ) + } + } + + @Test + fun testSetAllProviders() = runTest { + // Arrange + val mockProvidersList = dummyListOfAllProviders + // Act + viewModel.setAllProviders(true) + // Assert + viewModel.uiState.test { + val state = awaitItem() + assertEquals(mockProvidersList, state.selectedProviders) + } + } + + @Test + fun testOnApplyButtonClicked() = runTest { + // Arrange + val mockOwnership = Ownership.MullvadOwned.toOwnershipConstraint() + val mockSelectedProviders = + mockSelectedProviders.toConstraintProviders(dummyListOfAllProviders) + // Act + viewModel.onApplyButtonClicked() + // Assert + coVerify { + mockRelayListFilterUseCase.updateOwnershipAndProviderFilter( + mockOwnership, + mockSelectedProviders + ) + } + } +} |
