diff options
| author | David Göransson <david.goransson@mullvad.net> | 2024-04-19 10:37:13 +0200 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2024-04-19 11:26:23 +0200 |
| commit | 28563f3980e234775bb8574d979537e299305ac8 (patch) | |
| tree | e6d1080753b151a5086d9e88896c75d8822f0626 /android/app/src | |
| parent | 5815716fcf1262699866c251cf0d3b9b7e7f3af2 (diff) | |
| download | mullvadvpn-28563f3980e234775bb8574d979537e299305ac8.tar.xz mullvadvpn-28563f3980e234775bb8574d979537e299305ac8.zip | |
Fix duplicate entries when adding through bottom sheet
Diffstat (limited to 'android/app/src')
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() |
