@@ -24,16 +24,18 @@ import io.element.android.features.messages.api.MessagesEntryPoint
2424import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint
2525import io.element.android.libraries.architecture.childNode
2626import io.element.android.libraries.matrix.api.room.JoinedRoom
27+ import io.element.android.libraries.matrix.test.A_SESSION_ID
2728import io.element.android.libraries.matrix.test.FakeMatrixClient
2829import io.element.android.libraries.matrix.test.room.FakeBaseRoom
2930import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
31+ import io.element.android.services.appnavstate.api.ActiveRoomsHolder
3032import io.element.android.services.appnavstate.test.FakeAppNavigationStateService
3133import kotlinx.coroutines.CoroutineScope
3234import kotlinx.coroutines.test.runTest
3335import org.junit.Rule
3436import org.junit.Test
3537
36- class JoinBaseRoomLoadedFlowNodeTest {
38+ class JoinedRoomLoadedFlowNodeTest {
3739 @get:Rule
3840 val instantTaskExecutorRule = InstantTaskExecutorRule ()
3941
@@ -100,6 +102,7 @@ class JoinBaseRoomLoadedFlowNodeTest {
100102 plugins : List <Plugin >,
101103 messagesEntryPoint : MessagesEntryPoint = FakeMessagesEntryPoint (),
102104 roomDetailsEntryPoint : RoomDetailsEntryPoint = FakeRoomDetailsEntryPoint (),
105+ activeRoomsHolder : ActiveRoomsHolder = ActiveRoomsHolder (),
103106 coroutineScope : CoroutineScope ,
104107 ) = JoinedRoomLoadedFlowNode (
105108 buildContext = BuildContext .root(savedStateMap = null ),
@@ -110,6 +113,7 @@ class JoinBaseRoomLoadedFlowNodeTest {
110113 appCoroutineScope = coroutineScope,
111114 roomComponentFactory = FakeRoomComponentFactory (),
112115 matrixClient = FakeMatrixClient (),
116+ activeRoomsHolder = activeRoomsHolder,
113117 )
114118
115119 @Test
@@ -154,4 +158,55 @@ class JoinBaseRoomLoadedFlowNodeTest {
154158 val roomDetailsNode = roomFlowNode.childNode(JoinedRoomLoadedFlowNode .NavTarget .RoomDetails )!!
155159 assertThat(roomDetailsNode.id).isEqualTo(fakeRoomDetailsEntryPoint.nodeId)
156160 }
161+
162+ @Test
163+ fun `the ActiveRoomsHolder will be updated with the loaded room on create` () = runTest {
164+ // GIVEN
165+ val room = FakeJoinedRoom (baseRoom = FakeBaseRoom (updateMembersResult = {}))
166+ val fakeMessagesEntryPoint = FakeMessagesEntryPoint ()
167+ val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint ()
168+ val inputs = JoinedRoomLoadedFlowNode .Inputs (room, RoomNavigationTarget .Messages ())
169+ val activeRoomsHolder = ActiveRoomsHolder ()
170+ val roomFlowNode = createJoinedRoomLoadedFlowNode(
171+ plugins = listOf (inputs),
172+ messagesEntryPoint = fakeMessagesEntryPoint,
173+ roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
174+ coroutineScope = this ,
175+ activeRoomsHolder = activeRoomsHolder,
176+ )
177+
178+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNull()
179+ val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
180+ // WHEN
181+ roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode .NavTarget .Messages (null ), Lifecycle .State .CREATED )
182+ // THEN
183+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNotNull()
184+ }
185+
186+ @Test
187+ fun `the ActiveRoomsHolder will be removed on destroy` () = runTest {
188+ // GIVEN
189+ val room = FakeJoinedRoom (baseRoom = FakeBaseRoom (updateMembersResult = {}))
190+ val fakeMessagesEntryPoint = FakeMessagesEntryPoint ()
191+ val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint ()
192+ val inputs = JoinedRoomLoadedFlowNode .Inputs (room, RoomNavigationTarget .Messages ())
193+ val activeRoomsHolder = ActiveRoomsHolder ().apply {
194+ addRoom(room)
195+ }
196+ val roomFlowNode = createJoinedRoomLoadedFlowNode(
197+ plugins = listOf (inputs),
198+ messagesEntryPoint = fakeMessagesEntryPoint,
199+ roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
200+ coroutineScope = this ,
201+ activeRoomsHolder = activeRoomsHolder,
202+ )
203+ val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
204+ roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode .NavTarget .Messages (null ), Lifecycle .State .CREATED )
205+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNotNull()
206+ // WHEN
207+ roomFlowNode.updateLifecycleState(Lifecycle .State .DESTROYED )
208+ // THEN
209+ roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode .NavTarget .Messages (null ), Lifecycle .State .DESTROYED )
210+ assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID )).isNull()
211+ }
157212}
0 commit comments