summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-04-19 10:37:13 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-04-19 11:26:23 +0200
commit28563f3980e234775bb8574d979537e299305ac8 (patch)
treee6d1080753b151a5086d9e88896c75d8822f0626 /android/app/src
parent5815716fcf1262699866c251cf0d3b9b7e7f3af2 (diff)
downloadmullvadvpn-28563f3980e234775bb8574d979537e299305ac8.tar.xz
mullvadvpn-28563f3980e234775bb8574d979537e299305ac8.zip
Fix duplicate entries when adding through bottom sheet
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt4
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModelTest.kt6
2 files changed, 8 insertions, 2 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt
index 1759055bda..9772fb6362 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt
@@ -19,6 +19,7 @@ import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.Ownership
import net.mullvad.mullvadvpn.relaylist.Provider
import net.mullvad.mullvadvpn.relaylist.RelayItem
+import net.mullvad.mullvadvpn.relaylist.descendants
import net.mullvad.mullvadvpn.relaylist.filterOnOwnershipAndProvider
import net.mullvad.mullvadvpn.relaylist.filterOnSearchTerm
import net.mullvad.mullvadvpn.relaylist.toLocationConstraint
@@ -137,7 +138,8 @@ class SelectLocationViewModel(
fun addLocationToList(item: RelayItem, customList: RelayItem.CustomList) {
viewModelScope.launch {
- val newLocations = (customList.locations + item).map { it.code }
+ val newLocations =
+ (customList.locations + item).filter { it !in item.descendants() }.map { it.code }
val result =
customListActionUseCase.performAction(
CustomListAction.UpdateLocations(customList.id, newLocations)
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModelTest.kt
index 6522892ec2..5d0ab5f604 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModelTest.kt
@@ -29,6 +29,7 @@ import net.mullvad.mullvadvpn.model.Providers
import net.mullvad.mullvadvpn.relaylist.Provider
import net.mullvad.mullvadvpn.relaylist.RelayItem
import net.mullvad.mullvadvpn.relaylist.RelayList
+import net.mullvad.mullvadvpn.relaylist.descendants
import net.mullvad.mullvadvpn.relaylist.filterOnSearchTerm
import net.mullvad.mullvadvpn.relaylist.toLocationConstraint
import net.mullvad.mullvadvpn.ui.serviceconnection.ConnectionProxy
@@ -264,7 +265,10 @@ class SelectLocationViewModelTest {
fun `after adding a location to a list should emit location added side effect`() = runTest {
// Arrange
val expectedResult: CustomListResult.LocationsChanged = mockk()
- val location: RelayItem = mockk { every { code } returns "code" }
+ val location: RelayItem = mockk {
+ every { code } returns "code"
+ every { descendants() } returns emptyList()
+ }
val customList: RelayItem.CustomList = mockk {
every { id } returns "1"
every { locations } returns emptyList()