Merge pull request #7352 from hayaksi1/fix/6189-no-call-in-empty-dm

Do not offer to start a call in a DM with no other member
This commit is contained in:
Benoit Marty
2026-08-11 16:21:02 +02:00
committed by GitHub
2 changed files with 43 additions and 4 deletions
@@ -60,10 +60,13 @@ class RoomCallStatePresenter(
isUserLocallyInTheCall = isUserLocallyInTheCall,
isAudioCall = roomInfo.activeCallIntentConsensus.isAudio(),
)
else -> RoomCallState.StandBy(
canStartCall = canJoinCall,
isDM = roomInfo.isDm
)
else -> {
val isEmptyDm = roomInfo.isDm && roomInfo.activeMembersCount <= 1
RoomCallState.StandBy(
canStartCall = canJoinCall && !isEmptyDm,
isDM = roomInfo.isDm
)
}
}
}
}
@@ -49,6 +49,42 @@ class RoomCallStatePresenterTest {
}
}
@Test
fun `present - a DM with no other member cannot start a call`() = runTest {
val room = FakeJoinedRoom(
baseRoom = FakeBaseRoom(
initialRoomInfo = aRoomInfo(isDm = true, activeMembersCount = 1, joinedMembersCount = 1),
roomPermissions = roomPermissions(true),
)
)
val presenter = createRoomCallStatePresenter(joinedRoom = room)
presenter.test {
skipItems(1)
assertThat(awaitItem()).isEqualTo(
RoomCallState.StandBy(
canStartCall = false,
isDM = true
)
)
}
}
@Test
fun `present - a DM becomes callable once the other member is active`() = runTest {
val baseRoom = FakeBaseRoom(
initialRoomInfo = aRoomInfo(isDm = true, activeMembersCount = 1, joinedMembersCount = 1),
roomPermissions = roomPermissions(true),
)
val room = FakeJoinedRoom(baseRoom = baseRoom)
val presenter = createRoomCallStatePresenter(joinedRoom = room)
presenter.test {
skipItems(1)
assertThat(awaitItem()).isEqualTo(RoomCallState.StandBy(canStartCall = false, isDM = true))
baseRoom.givenRoomInfo(aRoomInfo(isDm = true, activeMembersCount = 2, joinedMembersCount = 2))
assertThat(awaitItem()).isEqualTo(RoomCallState.StandBy(canStartCall = true, isDM = true))
}
}
@Test
fun `present - element call not available`() = runTest {
val room = FakeJoinedRoom(