summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-07-18 14:28:17 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-09-26 10:36:41 +0200
commit3b5218697a5ee581b36839941573c05d212e1e3b (patch)
tree18b5e7e689c4030efd570c20375fbb83064cb807 /android
parent63300e2542601610aeb7c0568509edf04a844fcb (diff)
downloadmullvadvpn-3b5218697a5ee581b36839941573c05d212e1e3b.tar.xz
mullvadvpn-3b5218697a5ee581b36839941573c05d212e1e3b.zip
Update and add unit tests
Diffstat (limited to 'android')
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/AutoStartAndConnectOnBootRepositoryTest.kt73
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt42
2 files changed, 115 insertions, 0 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/AutoStartAndConnectOnBootRepositoryTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/AutoStartAndConnectOnBootRepositoryTest.kt
new file mode 100644
index 0000000000..f29ba4c2df
--- /dev/null
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/AutoStartAndConnectOnBootRepositoryTest.kt
@@ -0,0 +1,73 @@
+package net.mullvad.mullvadvpn.repository
+
+import android.content.ComponentName
+import android.content.pm.PackageManager
+import app.cash.turbine.test
+import io.mockk.Runs
+import io.mockk.every
+import io.mockk.just
+import io.mockk.mockk
+import io.mockk.verify
+import kotlinx.coroutines.test.runTest
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+
+class AutoStartAndConnectOnBootRepositoryTest {
+
+ private val mockPackageManager: PackageManager = mockk()
+ private val mockComponentName: ComponentName = mockk()
+
+ private lateinit var autoStartAndConnectOnBootRepository: AutoStartAndConnectOnBootRepository
+
+ @BeforeEach
+ fun setUp() {
+ every { mockPackageManager.getComponentEnabledSetting(mockComponentName) } returns
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
+
+ autoStartAndConnectOnBootRepository =
+ AutoStartAndConnectOnBootRepository(
+ packageManager = mockPackageManager,
+ bootCompletedComponentName = mockComponentName,
+ )
+ }
+
+ @Test
+ fun `autoStartAndConnectOnBoot should emit false when default state is returned by package manager`() =
+ runTest {
+ // Assert
+ autoStartAndConnectOnBootRepository.autoStartAndConnectOnBoot.test {
+ assertEquals(false, awaitItem())
+ }
+ }
+
+ @Test
+ fun `when setting autoStartAndConnectOnBoot to true should call package manager and update autoStartAndConnectOnBoot`() =
+ runTest {
+ // Arrange
+ val targetState = true
+ every {
+ mockPackageManager.setComponentEnabledSetting(
+ mockComponentName,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP,
+ )
+ } just Runs
+ every { mockPackageManager.getComponentEnabledSetting(mockComponentName) } returns
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+
+ // Act, Assert
+ autoStartAndConnectOnBootRepository.autoStartAndConnectOnBoot.test {
+ assertEquals(false, awaitItem()) // Default state
+ autoStartAndConnectOnBootRepository.setAutoStartAndConnectOnBoot(targetState)
+ verify {
+ mockPackageManager.setComponentEnabledSetting(
+ mockComponentName,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP,
+ )
+ }
+ assertEquals(targetState, awaitItem())
+ }
+ }
+}
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
index 1e15b1956a..5b878b52b9 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
@@ -3,11 +3,14 @@ package net.mullvad.mullvadvpn.viewmodel
import androidx.lifecycle.viewModelScope
import app.cash.turbine.test
import arrow.core.right
+import io.mockk.Runs
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
+import io.mockk.just
import io.mockk.mockk
import io.mockk.unmockkAll
+import io.mockk.verify
import kotlin.test.assertEquals
import kotlin.test.assertIs
import kotlinx.coroutines.cancel
@@ -26,6 +29,7 @@ import net.mullvad.mullvadvpn.lib.model.Settings
import net.mullvad.mullvadvpn.lib.model.TunnelOptions
import net.mullvad.mullvadvpn.lib.model.WireguardConstraints
import net.mullvad.mullvadvpn.lib.model.WireguardTunnelOptions
+import net.mullvad.mullvadvpn.repository.AutoStartAndConnectOnBootRepository
import net.mullvad.mullvadvpn.repository.RelayListRepository
import net.mullvad.mullvadvpn.repository.SettingsRepository
import net.mullvad.mullvadvpn.usecase.SystemVpnSettingsAvailableUseCase
@@ -41,9 +45,12 @@ class VpnSettingsViewModelTest {
private val mockSystemVpnSettingsUseCase: SystemVpnSettingsAvailableUseCase =
mockk(relaxed = true)
private val mockRelayListRepository: RelayListRepository = mockk()
+ private val mockAutoStartAndConnectOnBootRepository: AutoStartAndConnectOnBootRepository =
+ mockk()
private val mockSettingsUpdate = MutableStateFlow<Settings?>(null)
private val portRangeFlow = MutableStateFlow(emptyList<PortRange>())
+ private val autoStartAndConnectOnBootFlow = MutableStateFlow(false)
private lateinit var viewModel: VpnSettingsViewModel
@@ -51,6 +58,8 @@ class VpnSettingsViewModelTest {
fun setup() {
every { mockSettingsRepository.settingsUpdates } returns mockSettingsUpdate
every { mockRelayListRepository.portRanges } returns portRangeFlow
+ every { mockAutoStartAndConnectOnBootRepository.autoStartAndConnectOnBoot } returns
+ autoStartAndConnectOnBootFlow
viewModel =
VpnSettingsViewModel(
@@ -58,6 +67,7 @@ class VpnSettingsViewModelTest {
systemVpnSettingsUseCase = mockSystemVpnSettingsUseCase,
relayListRepository = mockRelayListRepository,
dispatcher = UnconfinedTestDispatcher(),
+ autoStartAndConnectOnBootRepository = mockAutoStartAndConnectOnBootRepository,
)
}
@@ -195,4 +205,36 @@ class VpnSettingsViewModelTest {
assertEquals(systemVpnSettingsAvailable, awaitItem().systemVpnSettingsAvailable)
}
}
+
+ @Test
+ fun `when autoStartAndConnectOnBoot is true then uiState should be autoStart=true`() = runTest {
+ // Arrange
+ val connectOnStart = true
+
+ // Act
+ autoStartAndConnectOnBootFlow.value = connectOnStart
+
+ // Assert
+ viewModel.uiState.test {
+ assertEquals(connectOnStart, awaitItem().autoStartAndConnectOnBoot)
+ }
+ }
+
+ @Test
+ fun `calling onToggleAutoStartAndConnectOnBoot should call autoStartAndConnectOnBoot`() =
+ runTest {
+ // Arrange
+ val targetState = true
+ every {
+ mockAutoStartAndConnectOnBootRepository.setAutoStartAndConnectOnBoot(targetState)
+ } just Runs
+
+ // Act
+ viewModel.onToggleAutoStartAndConnectOnBoot(targetState)
+
+ // Assert
+ verify {
+ mockAutoStartAndConnectOnBootRepository.setAutoStartAndConnectOnBoot(targetState)
+ }
+ }
}