@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.viewmodel
3
3
import androidx.lifecycle.viewModelScope
4
4
import app.cash.turbine.test
5
5
import arrow.core.right
6
+ import io.mockk.Awaits
6
7
import io.mockk.Runs
7
8
import io.mockk.coEvery
8
9
import io.mockk.coVerify
@@ -18,10 +19,10 @@ import kotlinx.coroutines.cancel
18
19
import kotlinx.coroutines.flow.MutableStateFlow
19
20
import kotlinx.coroutines.test.UnconfinedTestDispatcher
20
21
import kotlinx.coroutines.test.runTest
21
- import mullvad_daemon.management_interface.daitaSettings
22
22
import net.mullvad.mullvadvpn.lib.common.test.TestCoroutineRule
23
23
import net.mullvad.mullvadvpn.lib.model.Constraint
24
24
import net.mullvad.mullvadvpn.lib.model.DaitaSettings
25
+ import net.mullvad.mullvadvpn.lib.model.IpVersion
25
26
import net.mullvad.mullvadvpn.lib.model.Mtu
26
27
import net.mullvad.mullvadvpn.lib.model.Port
27
28
import net.mullvad.mullvadvpn.lib.model.PortRange
@@ -193,6 +194,7 @@ class VpnSettingsViewModelTest {
193
194
port = wireguardPort,
194
195
isMultihopEnabled = false ,
195
196
entryLocation = Constraint .Any ,
197
+ ipVersion = Constraint .Any ,
196
198
)
197
199
coEvery { mockWireguardConstraintsRepository.setWireguardPort(any()) } returns
198
200
Unit .right()
@@ -249,4 +251,42 @@ class VpnSettingsViewModelTest {
249
251
mockAutoStartAndConnectOnBootRepository.setAutoStartAndConnectOnBoot(targetState)
250
252
}
251
253
}
254
+
255
+ @Test
256
+ fun `when device ip version is IPv6 then UiState should be IPv6` () = runTest {
257
+ // Arrange
258
+ val ipVersion = Constraint .Only (IpVersion .IPV6 )
259
+ val mockSettings = mockk<Settings >(relaxed = true )
260
+ every { mockSettings.relaySettings.relayConstraints.wireguardConstraints.ipVersion } returns
261
+ ipVersion
262
+ every { mockSettings.tunnelOptions.wireguard } returns
263
+ WireguardTunnelOptions (
264
+ mtu = Mtu (0 ),
265
+ quantumResistant = QuantumResistantState .Off ,
266
+ daitaSettings = DaitaSettings (enabled = false , directOnly = false ),
267
+ )
268
+ every { mockSettings.relaySettings.relayConstraints.wireguardConstraints.port } returns
269
+ Constraint .Any
270
+
271
+ // Act, Assert
272
+ viewModel.uiState.test {
273
+ // Default value
274
+ awaitItem()
275
+ mockSettingsUpdate.value = mockSettings
276
+ assertEquals(ipVersion, awaitItem().deviceIpVersion)
277
+ }
278
+ }
279
+
280
+ @Test
281
+ fun `calling onDeviceIpVersionSelected should call setDeviceIpVersion` () = runTest {
282
+ // Arrange
283
+ val targetState = Constraint .Only (IpVersion .IPV4 )
284
+ coEvery { mockWireguardConstraintsRepository.setDeviceIpVersion(targetState) } just Awaits
285
+
286
+ // Act
287
+ viewModel.onDeviceIpVersionSelected(targetState)
288
+
289
+ // Assert
290
+ coVerify(exactly = 1 ) { mockWireguardConstraintsRepository.setDeviceIpVersion(targetState) }
291
+ }
252
292
}
0 commit comments