summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/test
diff options
context:
space:
mode:
authorMaryamShaghaghi <122574719+MaryamShaghaghi@users.noreply.github.com>2023-11-27 14:37:32 +0100
committerMaryamShaghaghi <122574719+MaryamShaghaghi@users.noreply.github.com>2023-12-04 11:33:59 +0100
commit1e64dcdbd9d82173c65a4d4b49f72f80f7de8269 (patch)
treeb2b1fcec30e0b2f89732abe653054b652176a68d /android/app/src/test
parentba4658d9545d926bfe08341a5bc80c63b3a09d3e (diff)
downloadmullvadvpn-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.kt129
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
+ )
+ }
+ }
+}