Skip to content

Commit a731328

Browse files
committed
Merge branch 'name-is-already-taken-error-regression-droid-1227'
2 parents 0a9158e + 8be1ed9 commit a731328

File tree

6 files changed

+23
-12
lines changed

6 files changed

+23
-12
lines changed

android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialogTest.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
1212
import net.mullvad.mullvadvpn.compose.setContentWithTheme
1313
import net.mullvad.mullvadvpn.compose.state.EditCustomListNameUiState
1414
import net.mullvad.mullvadvpn.compose.test.EDIT_CUSTOM_LIST_DIALOG_INPUT_TEST_TAG
15+
import net.mullvad.mullvadvpn.lib.model.CustomListName
1516
import net.mullvad.mullvadvpn.lib.model.NameAlreadyExists
1617
import net.mullvad.mullvadvpn.lib.model.UnknownCustomListError
1718
import net.mullvad.mullvadvpn.usecase.customlists.RenameError
@@ -46,7 +47,10 @@ class EditCustomListNameDialogTest {
4647
fun givenCustomListExistsShouldShowCustomListExitsErrorText() =
4748
composeExtension.use {
4849
// Arrange
49-
val state = EditCustomListNameUiState(error = RenameError(NameAlreadyExists("name")))
50+
val state =
51+
EditCustomListNameUiState(
52+
error = RenameError(NameAlreadyExists(CustomListName.fromString("name")))
53+
)
5054
setContentWithTheme { EditCustomListNameDialog(state = state) }
5155

5256
// Assert

android/app/src/test/kotlin/net/mullvad/mullvadvpn/repository/CustomListsRepositoryTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class CustomListsRepositoryTest {
146146
// Arrange
147147
val customListId = CustomListId("1")
148148
val customListName = CustomListName.fromString("CUSTOM")
149-
val expectedResult = NameAlreadyExists(customListName.value).left()
149+
val expectedResult = NameAlreadyExists(customListName).left()
150150
val mockSettings: Settings = mockk()
151151
val mockCustomList =
152152
CustomList(

android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/CustomListActionUseCaseTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ class CustomListActionUseCaseTest {
127127
val action = CustomListAction.Rename(id = customListId, name = name, newName = newName)
128128
coEvery {
129129
mockCustomListsRepository.updateCustomListName(id = customListId, name = newName)
130-
} returns NameAlreadyExists(newName.value).left()
130+
} returns NameAlreadyExists(newName).left()
131131

132-
val expectedError = RenameError(NameAlreadyExists(newName.value)).left()
132+
val expectedError = RenameError(NameAlreadyExists(newName)).left()
133133

134134
// Act
135135
val result = customListActionUseCase(action)

android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/EditCustomListNameDialogViewModelTest.kt

+6-6
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,16 @@ class EditCustomListNameDialogViewModelTest {
5555
fun `when failing to rename a list should update ui state with error`() = runTest {
5656
// Arrange
5757
val customListId = CustomListId("id2")
58-
val customListName = "list2"
58+
val customListName = CustomListName.fromString("list2")
5959
val expectedError = RenameError(NameAlreadyExists(customListName))
60-
val viewModel = createViewModel(customListId, customListName)
60+
val viewModel = createViewModel(customListId, customListName.value)
6161
coEvery { mockCustomListActionUseCase(any<CustomListAction.Rename>()) } returns
6262
expectedError.left()
6363

6464
// Act, Assert
6565
viewModel.uiState.test {
6666
awaitItem() // Default state
67-
viewModel.updateCustomListName(customListName)
67+
viewModel.updateCustomListName(customListName.value)
6868
assertEquals(expectedError, awaitItem().error)
6969
}
7070
}
@@ -74,16 +74,16 @@ class EditCustomListNameDialogViewModelTest {
7474
runTest {
7575
// Arrange
7676
val customListId = CustomListId("id")
77-
val customListName = "list"
77+
val customListName = CustomListName.fromString("list")
7878
val expectedError = RenameError(NameAlreadyExists(customListName))
79-
val viewModel = createViewModel(customListId, customListName)
79+
val viewModel = createViewModel(customListId, customListName.value)
8080
coEvery { mockCustomListActionUseCase(any<CustomListAction.Rename>()) } returns
8181
expectedError.left()
8282

8383
// Act, Assert
8484
viewModel.uiState.test {
8585
awaitItem() // Default state
86-
viewModel.updateCustomListName(customListName)
86+
viewModel.updateCustomListName(customListName.value)
8787
assertEquals(expectedError, awaitItem().error) // Showing error
8888
}
8989
}

android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import net.mullvad.mullvadvpn.lib.model.GetDeviceListError
7777
import net.mullvad.mullvadvpn.lib.model.GetDeviceStateError
7878
import net.mullvad.mullvadvpn.lib.model.GetVersionInfoError
7979
import net.mullvad.mullvadvpn.lib.model.LoginAccountError
80+
import net.mullvad.mullvadvpn.lib.model.NameAlreadyExists
8081
import net.mullvad.mullvadvpn.lib.model.NewAccessMethodSetting
8182
import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings
8283
import net.mullvad.mullvadvpn.lib.model.Ownership as ModelOwnership
@@ -492,7 +493,12 @@ class ManagementService(
492493

493494
suspend fun updateCustomList(customList: ModelCustomList): Either<UpdateCustomListError, Unit> =
494495
Either.catch { grpc.updateCustomList(customList.fromDomain()) }
495-
.mapLeft(::UnknownCustomListError)
496+
.mapLeftStatus {
497+
when (it.status.code) {
498+
Status.Code.ALREADY_EXISTS -> NameAlreadyExists(customList.name)
499+
else -> UnknownCustomListError(it)
500+
}
501+
}
496502
.mapEmpty()
497503

498504
suspend fun deleteCustomList(id: CustomListId): Either<DeleteCustomListError, Unit> =

android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateCustomListError.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ sealed interface UpdateCustomListLocationsError {
2222

2323
sealed interface UpdateCustomListError
2424

25-
data class NameAlreadyExists(val name: String) : UpdateCustomListError, UpdateCustomListNameError
25+
data class NameAlreadyExists(val name: CustomListName) :
26+
UpdateCustomListError, UpdateCustomListNameError
2627

2728
data class UnknownCustomListError(val throwable: Throwable) :
2829
UpdateCustomListError,

0 commit comments

Comments
 (0)