Skip to content

Commit

Permalink
fix: create a new group with guests disabled [WPB-10847] (#3483)
Browse files Browse the repository at this point in the history
  • Loading branch information
MohamadJaara authored Oct 15, 2024
1 parent f3afa5b commit 2875a4b
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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())
}
}
}

0 comments on commit 2875a4b

Please sign in to comment.