@@ -12,9 +12,11 @@ import app.cash.molecule.moleculeFlow
12
12
import app.cash.turbine.test
13
13
import com.google.common.truth.Truth.assertThat
14
14
import io.element.android.features.home.impl.roomlist.aRoomListState
15
+ import io.element.android.features.home.impl.spaces.HomeSpacesState
15
16
import io.element.android.features.home.impl.spaces.aHomeSpacesState
16
17
import io.element.android.features.logout.api.direct.aDirectLogoutState
17
18
import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
19
+ import io.element.android.libraries.architecture.Presenter
18
20
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
19
21
import io.element.android.libraries.featureflag.api.FeatureFlagService
20
22
import io.element.android.libraries.featureflag.api.FeatureFlags
@@ -30,10 +32,10 @@ import io.element.android.libraries.matrix.test.A_USER_ID
30
32
import io.element.android.libraries.matrix.test.A_USER_NAME
31
33
import io.element.android.libraries.matrix.test.FakeMatrixClient
32
34
import io.element.android.libraries.matrix.test.sync.FakeSyncService
35
+ import io.element.android.tests.testutils.MutablePresenter
33
36
import io.element.android.tests.testutils.WarmUpRule
34
37
import io.element.android.tests.testutils.test
35
38
import kotlinx.coroutines.flow.flowOf
36
- import kotlinx.coroutines.test.TestScope
37
39
import kotlinx.coroutines.test.runTest
38
40
import org.junit.Rule
39
41
import org.junit.Test
@@ -65,6 +67,7 @@ class HomePresenterTest {
65
67
assertThat(withUserState.matrixUser.avatarUrl).isEqualTo(AN_AVATAR_URL )
66
68
assertThat(withUserState.showAvatarIndicator).isFalse()
67
69
assertThat(withUserState.isSpaceFeatureEnabled).isFalse()
70
+ assertThat(withUserState.showNavigationBar).isFalse()
68
71
}
69
72
}
70
73
@@ -145,21 +148,50 @@ class HomePresenterTest {
145
148
}
146
149
}
147
150
148
- private fun TestScope.createHomePresenter (
151
+ @Test
152
+ fun `present - NavigationBar is hidden when the last space is left` () = runTest {
153
+ val homeSpacesPresenter = MutablePresenter (aHomeSpacesState())
154
+ val presenter = createHomePresenter(
155
+ featureFlagService = FakeFeatureFlagService (
156
+ initialState = mapOf (FeatureFlags .Space .key to true ),
157
+ ),
158
+ homeSpacesPresenter = homeSpacesPresenter,
159
+ )
160
+ presenter.test {
161
+ skipItems(1 )
162
+ val initialState = awaitItem()
163
+ assertThat(initialState.currentHomeNavigationBarItem).isEqualTo(HomeNavigationBarItem .Chats )
164
+ assertThat(initialState.showNavigationBar).isTrue()
165
+ // User navigate to Spaces
166
+ initialState.eventSink(HomeEvents .SelectHomeNavigationBarItem (HomeNavigationBarItem .Spaces ))
167
+ val spaceState = awaitItem()
168
+ assertThat(spaceState.currentHomeNavigationBarItem).isEqualTo(HomeNavigationBarItem .Spaces )
169
+ // The last space is left
170
+ homeSpacesPresenter.updateState(aHomeSpacesState(spaceRooms = emptyList()))
171
+ skipItems(1 )
172
+ val finalState = awaitItem()
173
+ // We are back to Chats
174
+ assertThat(finalState.currentHomeNavigationBarItem).isEqualTo(HomeNavigationBarItem .Chats )
175
+ assertThat(finalState.showNavigationBar).isFalse()
176
+ }
177
+ }
178
+
179
+ private fun createHomePresenter (
149
180
client : MatrixClient = FakeMatrixClient (),
150
181
syncService : SyncService = FakeSyncService (),
151
182
snackbarDispatcher : SnackbarDispatcher = SnackbarDispatcher (),
152
183
rageshakeFeatureAvailability : RageshakeFeatureAvailability = RageshakeFeatureAvailability { flowOf(false) },
153
184
indicatorService : IndicatorService = FakeIndicatorService (),
154
- featureFlagService : FeatureFlagService = FakeFeatureFlagService ()
185
+ featureFlagService : FeatureFlagService = FakeFeatureFlagService (),
186
+ homeSpacesPresenter : Presenter <HomeSpacesState > = Presenter { aHomeSpacesState() },
155
187
) = HomePresenter (
156
188
client = client,
157
189
syncService = syncService,
158
190
snackbarDispatcher = snackbarDispatcher,
159
191
indicatorService = indicatorService,
160
192
logoutPresenter = { aDirectLogoutState() },
161
193
roomListPresenter = { aRoomListState() },
162
- homeSpacesPresenter = { aHomeSpacesState() } ,
194
+ homeSpacesPresenter = homeSpacesPresenter ,
163
195
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
164
196
featureFlagService = featureFlagService,
165
197
)
0 commit comments