@@ -16,15 +16,24 @@ import io.element.android.features.preferences.impl.utils.ShowDeveloperSettingsP
16
16
import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
17
17
import io.element.android.libraries.core.meta.BuildType
18
18
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
19
+ import io.element.android.libraries.featureflag.api.FeatureFlagService
20
+ import io.element.android.libraries.featureflag.api.FeatureFlags
21
+ import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
19
22
import io.element.android.libraries.indicator.api.IndicatorService
20
23
import io.element.android.libraries.indicator.test.FakeIndicatorService
21
24
import io.element.android.libraries.matrix.api.oidc.AccountManagementAction
22
25
import io.element.android.libraries.matrix.api.user.MatrixUser
23
26
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
27
+ import io.element.android.libraries.matrix.test.A_SESSION_ID
28
+ import io.element.android.libraries.matrix.test.A_SESSION_ID_2
24
29
import io.element.android.libraries.matrix.test.A_USER_NAME
25
30
import io.element.android.libraries.matrix.test.FakeMatrixClient
26
31
import io.element.android.libraries.matrix.test.core.aBuildMeta
27
32
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService
33
+ import io.element.android.libraries.sessionstorage.api.SessionStore
34
+ import io.element.android.libraries.sessionstorage.impl.memory.InMemoryMultiSessionsStore
35
+ import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
36
+ import io.element.android.libraries.sessionstorage.test.aSessionData
28
37
import io.element.android.services.analytics.test.FakeAnalyticsService
29
38
import io.element.android.tests.testutils.WarmUpRule
30
39
import io.element.android.tests.testutils.lambda.lambdaRecorder
@@ -61,6 +70,8 @@ class PreferencesRootPresenterTest {
61
70
)
62
71
)
63
72
assertThat(initialState.version).isEqualTo(" A Version" )
73
+ assertThat(initialState.isMultiAccountEnabled).isFalse()
74
+ assertThat(initialState.otherSessions).isEmpty()
64
75
val loadedState = awaitItem()
65
76
assertThat(loadedState.myUser).isEqualTo(
66
77
MatrixUser (
@@ -174,6 +185,34 @@ class PreferencesRootPresenterTest {
174
185
}
175
186
}
176
187
188
+ @Test
189
+ fun `present - multiple accounts` () = runTest {
190
+ createPresenter(
191
+ matrixClient = FakeMatrixClient (
192
+ sessionId = A_SESSION_ID ,
193
+ canDeactivateAccountResult = { true },
194
+ ),
195
+ featureFlagService = FakeFeatureFlagService (
196
+ initialState = mapOf (FeatureFlags .MultiAccount .key to true )
197
+ ),
198
+ sessionStore = InMemoryMultiSessionsStore ().apply {
199
+ addSession(aSessionData(sessionId = A_SESSION_ID .value))
200
+ addSession(
201
+ aSessionData(
202
+ sessionId = A_SESSION_ID_2 .value,
203
+ userDisplayName = " Bob" ,
204
+ userAvatarUrl = " avatarUrl" ,
205
+ )
206
+ )
207
+ }
208
+ ).test {
209
+ val state = awaitFirstItem()
210
+ assertThat(state.isMultiAccountEnabled).isTrue()
211
+ assertThat(state.otherSessions).hasSize(1 )
212
+ assertThat(state.otherSessions[0 ]).isEqualTo(MatrixUser (userId = A_SESSION_ID_2 , displayName = " Bob" , avatarUrl = " avatarUrl" ))
213
+ }
214
+ }
215
+
177
216
private suspend fun <T > ReceiveTurbine<T>.awaitFirstItem (): T {
178
217
skipItems(1 )
179
218
return awaitItem()
@@ -185,6 +224,8 @@ class PreferencesRootPresenterTest {
185
224
showDeveloperSettingsProvider : ShowDeveloperSettingsProvider = ShowDeveloperSettingsProvider (aBuildMeta(BuildType .DEBUG )),
186
225
rageshakeFeatureAvailability : RageshakeFeatureAvailability = RageshakeFeatureAvailability { flowOf(true) },
187
226
indicatorService : IndicatorService = FakeIndicatorService (),
227
+ featureFlagService : FeatureFlagService = FakeFeatureFlagService (),
228
+ sessionStore : SessionStore = InMemorySessionStore (),
188
229
) = PreferencesRootPresenter (
189
230
matrixClient = matrixClient,
190
231
sessionVerificationService = sessionVerificationService,
@@ -195,5 +236,7 @@ class PreferencesRootPresenterTest {
195
236
directLogoutPresenter = { aDirectLogoutState() },
196
237
showDeveloperSettingsProvider = showDeveloperSettingsProvider,
197
238
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
239
+ featureFlagService = featureFlagService,
240
+ sessionStore = sessionStore,
198
241
)
199
242
}
0 commit comments