From 2875a4b5c6be5719b79ed3db4b1e3ed80b61a095 Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Tue, 15 Oct 2024 18:44:19 +0200 Subject: [PATCH] fix: create a new group with guests disabled [WPB-10847] (#3483) --- .../NewConversationViewModel.kt | 2 +- .../NewConversationViewModelTest.kt | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModel.kt index c30a43a8bf2..bb94421c376 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModel.kt @@ -160,7 +160,7 @@ class NewConversationViewModel @Inject constructor( private fun checkIfGuestAdded(): Boolean { if (groupOptionsState.isAllowGuestEnabled) return false - val isGuestSelected = newGroupState.selectedUsers.none { + val isGuestSelected = !newGroupState.selectedUsers.none { it.membership == Membership.Guest || it.membership == Membership.Federated } diff --git a/app/src/test/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModelTest.kt index 04d5a6b7569..1d785a4b224 100644 --- a/app/src/test/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/home/newconversation/NewConversationViewModelTest.kt @@ -24,21 +24,28 @@ import androidx.compose.foundation.text.input.clearText import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd import com.wire.android.config.CoroutineTestExtension import com.wire.android.config.SnapshotExtension +import com.wire.android.model.UserAvatarData import com.wire.android.ui.common.groupname.GroupMetadataState +import com.wire.android.ui.home.conversationslist.model.Membership import com.wire.android.ui.home.newconversation.common.CreateGroupState +import com.wire.android.ui.home.newconversation.model.Contact import com.wire.android.util.EMPTY import com.wire.kalium.logic.data.conversation.Conversation import com.wire.kalium.logic.data.conversation.ConversationOptions +import com.wire.kalium.logic.data.user.ConnectionState import com.wire.kalium.logic.data.user.SupportedProtocol import com.wire.kalium.logic.data.user.UserId import com.wire.kalium.logic.data.user.type.UserType import io.mockk.coVerify +import kotlinx.collections.immutable.persistentSetOf import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest +import org.amshove.kluent.fail import org.amshove.kluent.internal.assertEquals import org.amshove.kluent.shouldBeEqualTo import org.amshove.kluent.shouldBeNull +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -213,4 +220,74 @@ class NewConversationViewModelTest { advanceUntilIdle() assertEquals(GroupMetadataState.NewGroupError.TextFieldError.GroupNameEmptyError, viewModel.newGroupState.error) } + + @Test + fun `given conversation is created, when guest are selected and guests are disabled, then set the correct state`() = runTest { + + val usersSelected = persistentSetOf( + Contact( + "id", + "domain", + "name", + "handle", + UserAvatarData(), + label = "label", + connectionState = ConnectionState.ACCEPTED, + membership = Membership.Guest + ) + ) + + val (arrangement, viewModel) = NewConversationViewModelArrangement() + .withGetSelfUser(isTeamMember = true) + .arrange() + + viewModel.newGroupState = viewModel.newGroupState.copy( + selectedUsers = usersSelected + ) + + viewModel.groupOptionsState = viewModel.groupOptionsState.copy(isAllowGuestEnabled = false) + + viewModel.createGroup { _ -> fail("group should not be created") } + + assertTrue(viewModel.groupOptionsState.showAllowGuestsDialog) + + coVerify(exactly = 0) { + arrangement.createGroupConversation(any(), any(), any()) + } + } + + @Test + fun `given conversation is created, when federated users are selected and guests are disabled, then set the correct state`() = runTest { + + val usersSelected = persistentSetOf( + Contact( + "id", + "domain", + "name", + "handle", + UserAvatarData(), + label = "label", + connectionState = ConnectionState.ACCEPTED, + membership = Membership.Federated + ) + ) + + val (arrangement, viewModel) = NewConversationViewModelArrangement() + .withGetSelfUser(isTeamMember = true) + .arrange() + + viewModel.newGroupState = viewModel.newGroupState.copy( + selectedUsers = usersSelected + ) + + viewModel.groupOptionsState = viewModel.groupOptionsState.copy(isAllowGuestEnabled = false) + + viewModel.createGroup { _ -> fail("group should not be created") } + + assertTrue(viewModel.groupOptionsState.showAllowGuestsDialog) + + coVerify(exactly = 0) { + arrangement.createGroupConversation(any(), any(), any()) + } + } }