Skip to content

Commit de6f52c

Browse files
committed
Add unit test on LeaveSpaceState
1 parent 9732d55 commit de6f52c

File tree

2 files changed

+132
-12
lines changed

2 files changed

+132
-12
lines changed

features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceState.kt

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package io.element.android.features.space.impl.leave
99

1010
import io.element.android.libraries.architecture.AsyncAction
1111
import io.element.android.libraries.architecture.AsyncData
12-
import io.element.android.libraries.core.bool.orFalse
1312
import kotlinx.collections.immutable.ImmutableList
1413

1514
data class LeaveSpaceState(
@@ -18,18 +17,34 @@ data class LeaveSpaceState(
1817
val leaveSpaceAction: AsyncAction<Unit>,
1918
val eventSink: (LeaveSpaceEvents) -> Unit,
2019
) {
21-
val showQuickAction = selectableSpaceRooms.dataOrNull().orEmpty().any { !it.isLastAdmin }
22-
val hasOnlyLastAdminRoom = selectableSpaceRooms.dataOrNull()
23-
?.let { rooms ->
24-
rooms.isNotEmpty() && rooms.all { it.isLastAdmin }
25-
}
26-
.orFalse()
27-
val numberOfSelectRooms = selectableSpaceRooms.dataOrNull().orEmpty().count { it.isSelected }
20+
private val rooms = selectableSpaceRooms.dataOrNull().orEmpty()
2821

29-
val areAllSelected = selectableSpaceRooms.dataOrNull()
30-
?.filter { !it.isLastAdmin }
31-
?.let { rooms ->
22+
/**
23+
* True if we should show the quick action to select/deselect all rooms.
24+
*/
25+
val showQuickAction = rooms
26+
.any { !it.isLastAdmin }
27+
28+
/**
29+
* True if there are rooms and they are all selected.
30+
*/
31+
val areAllSelected = rooms
32+
.filter { !it.isLastAdmin }
33+
.let { rooms ->
3234
rooms.isNotEmpty() && rooms.all { it.isSelected }
3335
}
34-
.orFalse()
36+
37+
/**
38+
* True if there are rooms but the user is the last admin in all of them.
39+
*/
40+
val hasOnlyLastAdminRoom = rooms
41+
.let { rooms ->
42+
rooms.isNotEmpty() && rooms.all { it.isLastAdmin }
43+
}
44+
45+
/**
46+
* Number of selected rooms.
47+
*/
48+
val numberOfSelectRooms = rooms
49+
.count { it.isSelected }
3550
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.space.impl.leave
9+
10+
import com.google.common.truth.Truth.assertThat
11+
import io.element.android.libraries.architecture.AsyncData
12+
import kotlinx.collections.immutable.persistentListOf
13+
import kotlinx.collections.immutable.toPersistentList
14+
import org.junit.Test
15+
16+
class LeaveSpaceStateTest {
17+
@Test
18+
fun `test loading`() {
19+
val sut = aLeaveSpaceState(
20+
selectableSpaceRooms = AsyncData.Loading()
21+
)
22+
assertThat(sut.showQuickAction).isFalse()
23+
assertThat(sut.areAllSelected).isFalse()
24+
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
25+
assertThat(sut.numberOfSelectRooms).isEqualTo(0)
26+
}
27+
28+
@Test
29+
fun `test no rooms`() {
30+
val sut = aLeaveSpaceState(
31+
selectableSpaceRooms = AsyncData.Success(
32+
persistentListOf()
33+
)
34+
)
35+
assertThat(sut.showQuickAction).isFalse()
36+
assertThat(sut.areAllSelected).isFalse()
37+
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
38+
assertThat(sut.numberOfSelectRooms).isEqualTo(0)
39+
}
40+
41+
@Test
42+
fun `test no last admin, 1 selected, 1 not selected`() {
43+
val sut = aLeaveSpaceState(
44+
selectableSpaceRooms = AsyncData.Success(
45+
listOf(
46+
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
47+
aSelectableSpaceRoom(isLastAdmin = false, isSelected = false),
48+
).toPersistentList()
49+
)
50+
)
51+
assertThat(sut.showQuickAction).isTrue()
52+
assertThat(sut.areAllSelected).isFalse()
53+
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
54+
assertThat(sut.numberOfSelectRooms).isEqualTo(1)
55+
}
56+
57+
@Test
58+
fun `test no last admin, 2 selected`() {
59+
val sut = aLeaveSpaceState(
60+
selectableSpaceRooms = AsyncData.Success(
61+
listOf(
62+
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
63+
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
64+
).toPersistentList()
65+
)
66+
)
67+
assertThat(sut.showQuickAction).isTrue()
68+
assertThat(sut.areAllSelected).isTrue()
69+
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
70+
assertThat(sut.numberOfSelectRooms).isEqualTo(2)
71+
}
72+
73+
@Test
74+
fun `test 1 last admin, 2 selected`() {
75+
val sut = aLeaveSpaceState(
76+
selectableSpaceRooms = AsyncData.Success(
77+
listOf(
78+
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false),
79+
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
80+
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true),
81+
).toPersistentList()
82+
)
83+
)
84+
assertThat(sut.showQuickAction).isTrue()
85+
assertThat(sut.areAllSelected).isTrue()
86+
assertThat(sut.hasOnlyLastAdminRoom).isFalse()
87+
assertThat(sut.numberOfSelectRooms).isEqualTo(2)
88+
}
89+
90+
@Test
91+
fun `test only last admin`() {
92+
val sut = aLeaveSpaceState(
93+
selectableSpaceRooms = AsyncData.Success(
94+
listOf(
95+
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false),
96+
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false),
97+
).toPersistentList()
98+
)
99+
)
100+
assertThat(sut.showQuickAction).isFalse()
101+
assertThat(sut.areAllSelected).isFalse()
102+
assertThat(sut.hasOnlyLastAdminRoom).isTrue()
103+
assertThat(sut.numberOfSelectRooms).isEqualTo(0)
104+
}
105+
}

0 commit comments

Comments
 (0)