Add unit test on LeaveSpaceState
This commit is contained in:
committed by
Benoit Marty
parent
4b60475821
commit
8ceea9ed0c
@@ -9,7 +9,6 @@ package io.element.android.features.space.impl.leave
|
||||
|
||||
import io.element.android.libraries.architecture.AsyncAction
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.core.bool.orFalse
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
data class LeaveSpaceState(
|
||||
@@ -18,18 +17,34 @@ data class LeaveSpaceState(
|
||||
val leaveSpaceAction: AsyncAction<Unit>,
|
||||
val eventSink: (LeaveSpaceEvents) -> Unit,
|
||||
) {
|
||||
val showQuickAction = selectableSpaceRooms.dataOrNull().orEmpty().any { !it.isLastAdmin }
|
||||
val hasOnlyLastAdminRoom = selectableSpaceRooms.dataOrNull()
|
||||
?.let { rooms ->
|
||||
rooms.isNotEmpty() && rooms.all { it.isLastAdmin }
|
||||
}
|
||||
.orFalse()
|
||||
val numberOfSelectRooms = selectableSpaceRooms.dataOrNull().orEmpty().count { it.isSelected }
|
||||
private val rooms = selectableSpaceRooms.dataOrNull().orEmpty()
|
||||
|
||||
val areAllSelected = selectableSpaceRooms.dataOrNull()
|
||||
?.filter { !it.isLastAdmin }
|
||||
?.let { rooms ->
|
||||
/**
|
||||
* True if we should show the quick action to select/deselect all rooms.
|
||||
*/
|
||||
val showQuickAction = rooms
|
||||
.any { !it.isLastAdmin }
|
||||
|
||||
/**
|
||||
* True if there are rooms and they are all selected.
|
||||
*/
|
||||
val areAllSelected = rooms
|
||||
.filter { !it.isLastAdmin }
|
||||
.let { rooms ->
|
||||
rooms.isNotEmpty() && rooms.all { it.isSelected }
|
||||
}
|
||||
.orFalse()
|
||||
|
||||
/**
|
||||
* True if there are rooms but the user is the last admin in all of them.
|
||||
*/
|
||||
val hasOnlyLastAdminRoom = rooms
|
||||
.let { rooms ->
|
||||
rooms.isNotEmpty() && rooms.all { it.isLastAdmin }
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of selected rooms.
|
||||
*/
|
||||
val numberOfSelectRooms = rooms
|
||||
.count { it.isSelected }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright 2025 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.space.impl.leave
|
||||
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import org.junit.Test
|
||||
|
||||
class LeaveSpaceStateTest {
|
||||
@Test
|
||||
fun `test loading`() {
|
||||
val sut = aLeaveSpaceState(
|
||||
selectableSpaceRooms = AsyncData.Loading()
|
||||
)
|
||||
assertThat(sut.showQuickAction).isFalse()
|
||||
assertThat(sut.areAllSelected).isFalse()
|
||||
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
|
||||
assertThat(sut.numberOfSelectRooms).isEqualTo(0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test no rooms`() {
|
||||
val sut = aLeaveSpaceState(
|
||||
selectableSpaceRooms = AsyncData.Success(
|
||||
persistentListOf()
|
||||
)
|
||||
)
|
||||
assertThat(sut.showQuickAction).isFalse()
|
||||
assertThat(sut.areAllSelected).isFalse()
|
||||
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
|
||||
assertThat(sut.numberOfSelectRooms).isEqualTo(0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test no last admin, 1 selected, 1 not selected`() {
|
||||
val sut = aLeaveSpaceState(
|
||||
selectableSpaceRooms = AsyncData.Success(
|
||||
listOf(
|
||||
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
|
||||
aSelectableSpaceRoom(isLastAdmin = false, isSelected = false),
|
||||
).toPersistentList()
|
||||
)
|
||||
)
|
||||
assertThat(sut.showQuickAction).isTrue()
|
||||
assertThat(sut.areAllSelected).isFalse()
|
||||
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
|
||||
assertThat(sut.numberOfSelectRooms).isEqualTo(1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test no last admin, 2 selected`() {
|
||||
val sut = aLeaveSpaceState(
|
||||
selectableSpaceRooms = AsyncData.Success(
|
||||
listOf(
|
||||
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
|
||||
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
|
||||
).toPersistentList()
|
||||
)
|
||||
)
|
||||
assertThat(sut.showQuickAction).isTrue()
|
||||
assertThat(sut.areAllSelected).isTrue()
|
||||
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
|
||||
assertThat(sut.numberOfSelectRooms).isEqualTo(2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test 1 last admin, 2 selected`() {
|
||||
val sut = aLeaveSpaceState(
|
||||
selectableSpaceRooms = AsyncData.Success(
|
||||
listOf(
|
||||
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false),
|
||||
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
|
||||
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
|
||||
).toPersistentList()
|
||||
)
|
||||
)
|
||||
assertThat(sut.showQuickAction).isTrue()
|
||||
assertThat(sut.areAllSelected).isTrue()
|
||||
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
|
||||
assertThat(sut.numberOfSelectRooms).isEqualTo(2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test only last admin`() {
|
||||
val sut = aLeaveSpaceState(
|
||||
selectableSpaceRooms = AsyncData.Success(
|
||||
listOf(
|
||||
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false),
|
||||
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false),
|
||||
).toPersistentList()
|
||||
)
|
||||
)
|
||||
assertThat(sut.showQuickAction).isFalse()
|
||||
assertThat(sut.areAllSelected).isFalse()
|
||||
assertThat(sut.hasOnlyLastAdminRoom).isTrue()
|
||||
assertThat(sut.numberOfSelectRooms).isEqualTo(0)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user