@@ -24,16 +24,18 @@ import io.element.android.features.messages.api.MessagesEntryPoint
24
24
import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint
25
25
import io.element.android.libraries.architecture.childNode
26
26
import io.element.android.libraries.matrix.api.room.JoinedRoom
27
+ import io.element.android.libraries.matrix.test.A_SESSION_ID
27
28
import io.element.android.libraries.matrix.test.FakeMatrixClient
28
29
import io.element.android.libraries.matrix.test.room.FakeBaseRoom
29
30
import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
31
+ import io.element.android.services.appnavstate.api.ActiveRoomsHolder
30
32
import io.element.android.services.appnavstate.test.FakeAppNavigationStateService
31
- import kotlinx.coroutines.CoroutineScope
33
+ import kotlinx.coroutines.test.TestScope
32
34
import kotlinx.coroutines.test.runTest
33
35
import org.junit.Rule
34
36
import org.junit.Test
35
37
36
- class JoinBaseRoomLoadedFlowNodeTest {
38
+ class JoinedRoomLoadedFlowNodeTest {
37
39
@get:Rule
38
40
val instantTaskExecutorRule = InstantTaskExecutorRule ()
39
41
@@ -96,20 +98,21 @@ class JoinBaseRoomLoadedFlowNodeTest {
96
98
}
97
99
}
98
100
99
- private fun createJoinedRoomLoadedFlowNode (
101
+ private fun TestScope. createJoinedRoomLoadedFlowNode (
100
102
plugins : List <Plugin >,
101
103
messagesEntryPoint : MessagesEntryPoint = FakeMessagesEntryPoint (),
102
104
roomDetailsEntryPoint : RoomDetailsEntryPoint = FakeRoomDetailsEntryPoint (),
103
- coroutineScope : CoroutineScope ,
105
+ activeRoomsHolder : ActiveRoomsHolder = ActiveRoomsHolder () ,
104
106
) = JoinedRoomLoadedFlowNode (
105
107
buildContext = BuildContext .root(savedStateMap = null ),
106
108
plugins = plugins,
107
109
messagesEntryPoint = messagesEntryPoint,
108
110
roomDetailsEntryPoint = roomDetailsEntryPoint,
109
111
appNavigationStateService = FakeAppNavigationStateService (),
110
- appCoroutineScope = coroutineScope ,
112
+ appCoroutineScope = this ,
111
113
roomComponentFactory = FakeRoomComponentFactory (),
112
114
matrixClient = FakeMatrixClient (),
115
+ activeRoomsHolder = activeRoomsHolder,
113
116
)
114
117
115
118
@Test
@@ -121,7 +124,6 @@ class JoinBaseRoomLoadedFlowNodeTest {
121
124
val roomFlowNode = createJoinedRoomLoadedFlowNode(
122
125
plugins = listOf (inputs),
123
126
messagesEntryPoint = fakeMessagesEntryPoint,
124
- coroutineScope = this
125
127
)
126
128
// WHEN
127
129
val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
@@ -144,7 +146,6 @@ class JoinBaseRoomLoadedFlowNodeTest {
144
146
plugins = listOf (inputs),
145
147
messagesEntryPoint = fakeMessagesEntryPoint,
146
148
roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
147
- coroutineScope = this
148
149
)
149
150
val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
150
151
// WHEN
@@ -154,4 +155,53 @@ class JoinBaseRoomLoadedFlowNodeTest {
154
155
val roomDetailsNode = roomFlowNode.childNode(JoinedRoomLoadedFlowNode .NavTarget .RoomDetails )!!
155
156
assertThat(roomDetailsNode.id).isEqualTo(fakeRoomDetailsEntryPoint.nodeId)
156
157
}
158
+
159
+ @Test
160
+ fun `the ActiveRoomsHolder will be updated with the loaded room on create` () = runTest {
161
+ // GIVEN
162
+ val room = FakeJoinedRoom (baseRoom = FakeBaseRoom (updateMembersResult = {}))
163
+ val fakeMessagesEntryPoint = FakeMessagesEntryPoint ()
164
+ val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint ()
165
+ val inputs = JoinedRoomLoadedFlowNode .Inputs (room, RoomNavigationTarget .Messages ())
166
+ val activeRoomsHolder = ActiveRoomsHolder ()
167
+ val roomFlowNode = createJoinedRoomLoadedFlowNode(
168
+ plugins = listOf (inputs),
169
+ messagesEntryPoint = fakeMessagesEntryPoint,
170
+ roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
171
+ activeRoomsHolder = activeRoomsHolder,
172
+ )
173
+
174
+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNull()
175
+ val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
176
+ // WHEN
177
+ roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode .NavTarget .Messages (null ), Lifecycle .State .CREATED )
178
+ // THEN
179
+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNotNull()
180
+ }
181
+
182
+ @Test
183
+ fun `the ActiveRoomsHolder will be removed on destroy` () = runTest {
184
+ // GIVEN
185
+ val room = FakeJoinedRoom (baseRoom = FakeBaseRoom (updateMembersResult = {}))
186
+ val fakeMessagesEntryPoint = FakeMessagesEntryPoint ()
187
+ val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint ()
188
+ val inputs = JoinedRoomLoadedFlowNode .Inputs (room, RoomNavigationTarget .Messages ())
189
+ val activeRoomsHolder = ActiveRoomsHolder ().apply {
190
+ addRoom(room)
191
+ }
192
+ val roomFlowNode = createJoinedRoomLoadedFlowNode(
193
+ plugins = listOf (inputs),
194
+ messagesEntryPoint = fakeMessagesEntryPoint,
195
+ roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
196
+ activeRoomsHolder = activeRoomsHolder,
197
+ )
198
+ val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
199
+ roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode .NavTarget .Messages (null ), Lifecycle .State .CREATED )
200
+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNotNull()
201
+ // WHEN
202
+ roomFlowNode.updateLifecycleState(Lifecycle .State .DESTROYED )
203
+ // THEN
204
+ roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode .NavTarget .Messages (null ), Lifecycle .State .DESTROYED )
205
+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNull()
206
+ }
157
207
}
0 commit comments