From 88ee323a6192d7030295da078b833d6f31ed2768 Mon Sep 17 00:00:00 2001 From: Jakub Zerko Date: Thu, 23 Jan 2025 11:39:14 +0100 Subject: [PATCH] fix: wrong error after adding folder --- .../folder/NewFolderViewModel.kt | 26 ++++++++++++------- .../folder/NewFolderViewModelTest.kt | 18 +++++++++++++ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/folder/NewFolderViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/folder/NewFolderViewModel.kt index f4a8360d769..5489d3c8b65 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/folder/NewFolderViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/folder/NewFolderViewModel.kt @@ -61,23 +61,31 @@ class NewFolderViewModel @Inject constructor( ) .collect { (folders, text) -> val nameExist = folders.any { it.name == text.trim() } - folderNameState = folderNameState.copy( - buttonEnabled = text.trim().isNotEmpty() && !nameExist && text.length <= NAME_MAX_COUNT, - error = when { - text.trim().isEmpty() -> FolderNameState.NameError.TextFieldError.NameEmptyError - text.length > NAME_MAX_COUNT -> FolderNameState.NameError.TextFieldError.NameExceedLimitError - nameExist -> FolderNameState.NameError.TextFieldError.NameAlreadyExistError - else -> FolderNameState.NameError.None - } - ) + if (!folderNameState.loading) { + folderNameState = folderNameState.copy( + buttonEnabled = text.trim().isNotEmpty() && !nameExist && text.length <= NAME_MAX_COUNT, + error = when { + text.trim().isEmpty() -> FolderNameState.NameError.TextFieldError.NameEmptyError + text.length > NAME_MAX_COUNT -> FolderNameState.NameError.TextFieldError.NameExceedLimitError + nameExist -> FolderNameState.NameError.TextFieldError.NameAlreadyExistError + else -> FolderNameState.NameError.None + } + ) + } } } } fun createFolder(folderName: String) { viewModelScope.launch { + folderNameState = folderNameState.copy( + loading = true + ) when (val result = createConversationFolder(folderName)) { is CreateConversationFolderUseCase.Result.Failure -> { + folderNameState = folderNameState.copy( + loading = false + ) _infoMessage.emit( UIText.StringResource( R.string.new_folder_failure, diff --git a/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/folder/NewFolderViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/folder/NewFolderViewModelTest.kt index 2c04b63af46..65df891265d 100644 --- a/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/folder/NewFolderViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/folder/NewFolderViewModelTest.kt @@ -157,6 +157,24 @@ class NewFolderViewModelTest { assertEquals(folderId, viewModel.folderNameState.folderId) } + @Test + fun `when folder creation succeeds, then state will not show NameAlreadyExistError`() = runTest { + val folderId = "123" + val (arrangement, viewModel) = Arrangement() + .withCreateFolderResult(CreateConversationFolderUseCase.Result.Success(folderId)) + .arrange {} + + arrangement.userFoldersChannel.send(listOf()) + arrangement.updateTextState("NewFolder") + + viewModel.createFolder("NewFolder") + arrangement.userFoldersChannel.send(listOf(ConversationFolder(id = folderId, name = "NewFolder", type = FolderType.USER))) + advanceUntilIdle() + + assertEquals(FolderNameState.NameError.None, viewModel.folderNameState.error) + assertTrue(viewModel.folderNameState.loading) + } + private class Arrangement { @MockK