summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-08-06 16:30:26 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-08-06 16:30:26 +0200
commita731328ba41676ab2ca911e7ec7e423c51a89fe7 (patch)
treead459a74a62b44aa19ddd14b89d5db7a37c83faa /android
parent0a9158eb70ebe7cdbbdc8ac643800cd635cf33f1 (diff)
parent8be1ed95c772e8d0e9e2d24614a6445a362a02d6 (diff)
downloadmullvadvpn-a731328ba41676ab2ca911e7ec7e423c51a89fe7.tar.xz
mullvadvpn-a731328ba41676ab2ca911e7ec7e423c51a89fe7.zip
Merge branch 'name-is-already-taken-error-regression-droid-1227'
Diffstat (limited to 'android')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialogTest.kt6
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/CustomListsRepositoryTest.kt2
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/CustomListActionUseCaseTest.kt4
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/EditCustomListNameDialogViewModelTest.kt12
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt8
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateCustomListError.kt3
6 files changed, 23 insertions, 12 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialogTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialogTest.kt
index 102c3c1fb9..d43a862037 100644
--- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialogTest.kt
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialogTest.kt
@@ -12,6 +12,7 @@ import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
import net.mullvad.mullvadvpn.compose.setContentWithTheme
import net.mullvad.mullvadvpn.compose.state.EditCustomListNameUiState
import net.mullvad.mullvadvpn.compose.test.EDIT_CUSTOM_LIST_DIALOG_INPUT_TEST_TAG
+import net.mullvad.mullvadvpn.lib.model.CustomListName
import net.mullvad.mullvadvpn.lib.model.NameAlreadyExists
import net.mullvad.mullvadvpn.lib.model.UnknownCustomListError
import net.mullvad.mullvadvpn.usecase.customlists.RenameError
@@ -46,7 +47,10 @@ class EditCustomListNameDialogTest {
fun givenCustomListExistsShouldShowCustomListExitsErrorText() =
composeExtension.use {
// Arrange
- val state = EditCustomListNameUiState(error = RenameError(NameAlreadyExists("name")))
+ val state =
+ EditCustomListNameUiState(
+ error = RenameError(NameAlreadyExists(CustomListName.fromString("name")))
+ )
setContentWithTheme { EditCustomListNameDialog(state = state) }
// Assert
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/CustomListsRepositoryTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/CustomListsRepositoryTest.kt
index 4b8a524e5c..09b5f4925b 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/CustomListsRepositoryTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/CustomListsRepositoryTest.kt
@@ -146,7 +146,7 @@ class CustomListsRepositoryTest {
// Arrange
val customListId = CustomListId("1")
val customListName = CustomListName.fromString("CUSTOM")
- val expectedResult = NameAlreadyExists(customListName.value).left()
+ val expectedResult = NameAlreadyExists(customListName).left()
val mockSettings: Settings = mockk()
val mockCustomList =
CustomList(
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/CustomListActionUseCaseTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/CustomListActionUseCaseTest.kt
index 3528d1bfa2..5af19ade8b 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/CustomListActionUseCaseTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/CustomListActionUseCaseTest.kt
@@ -127,9 +127,9 @@ class CustomListActionUseCaseTest {
val action = CustomListAction.Rename(id = customListId, name = name, newName = newName)
coEvery {
mockCustomListsRepository.updateCustomListName(id = customListId, name = newName)
- } returns NameAlreadyExists(newName.value).left()
+ } returns NameAlreadyExists(newName).left()
- val expectedError = RenameError(NameAlreadyExists(newName.value)).left()
+ val expectedError = RenameError(NameAlreadyExists(newName)).left()
// Act
val result = customListActionUseCase(action)
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/EditCustomListNameDialogViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/EditCustomListNameDialogViewModelTest.kt
index faf83da7a8..83ddaec36e 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/EditCustomListNameDialogViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/EditCustomListNameDialogViewModelTest.kt
@@ -55,16 +55,16 @@ class EditCustomListNameDialogViewModelTest {
fun `when failing to rename a list should update ui state with error`() = runTest {
// Arrange
val customListId = CustomListId("id2")
- val customListName = "list2"
+ val customListName = CustomListName.fromString("list2")
val expectedError = RenameError(NameAlreadyExists(customListName))
- val viewModel = createViewModel(customListId, customListName)
+ val viewModel = createViewModel(customListId, customListName.value)
coEvery { mockCustomListActionUseCase(any<CustomListAction.Rename>()) } returns
expectedError.left()
// Act, Assert
viewModel.uiState.test {
awaitItem() // Default state
- viewModel.updateCustomListName(customListName)
+ viewModel.updateCustomListName(customListName.value)
assertEquals(expectedError, awaitItem().error)
}
}
@@ -74,16 +74,16 @@ class EditCustomListNameDialogViewModelTest {
runTest {
// Arrange
val customListId = CustomListId("id")
- val customListName = "list"
+ val customListName = CustomListName.fromString("list")
val expectedError = RenameError(NameAlreadyExists(customListName))
- val viewModel = createViewModel(customListId, customListName)
+ val viewModel = createViewModel(customListId, customListName.value)
coEvery { mockCustomListActionUseCase(any<CustomListAction.Rename>()) } returns
expectedError.left()
// Act, Assert
viewModel.uiState.test {
awaitItem() // Default state
- viewModel.updateCustomListName(customListName)
+ viewModel.updateCustomListName(customListName.value)
assertEquals(expectedError, awaitItem().error) // Showing error
}
}
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
index 7f1ae90b45..95679cb43d 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
@@ -77,6 +77,7 @@ import net.mullvad.mullvadvpn.lib.model.GetDeviceListError
import net.mullvad.mullvadvpn.lib.model.GetDeviceStateError
import net.mullvad.mullvadvpn.lib.model.GetVersionInfoError
import net.mullvad.mullvadvpn.lib.model.LoginAccountError
+import net.mullvad.mullvadvpn.lib.model.NameAlreadyExists
import net.mullvad.mullvadvpn.lib.model.NewAccessMethodSetting
import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings
import net.mullvad.mullvadvpn.lib.model.Ownership as ModelOwnership
@@ -492,7 +493,12 @@ class ManagementService(
suspend fun updateCustomList(customList: ModelCustomList): Either<UpdateCustomListError, Unit> =
Either.catch { grpc.updateCustomList(customList.fromDomain()) }
- .mapLeft(::UnknownCustomListError)
+ .mapLeftStatus {
+ when (it.status.code) {
+ Status.Code.ALREADY_EXISTS -> NameAlreadyExists(customList.name)
+ else -> UnknownCustomListError(it)
+ }
+ }
.mapEmpty()
suspend fun deleteCustomList(id: CustomListId): Either<DeleteCustomListError, Unit> =
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateCustomListError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateCustomListError.kt
index ef49018dca..e666ca3f59 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateCustomListError.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateCustomListError.kt
@@ -22,7 +22,8 @@ sealed interface UpdateCustomListLocationsError {
sealed interface UpdateCustomListError
-data class NameAlreadyExists(val name: String) : UpdateCustomListError, UpdateCustomListNameError
+data class NameAlreadyExists(val name: CustomListName) :
+ UpdateCustomListError, UpdateCustomListNameError
data class UnknownCustomListError(val throwable: Throwable) :
UpdateCustomListError,