Skip to content

Commit f578e2b

Browse files
committed
Multi accounts - fix PreferencesRootPresenterTest
1 parent 28aa326 commit f578e2b

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

features/preferences/impl/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ dependencies {
112112
testImplementation(projects.features.logout.test)
113113
testImplementation(projects.libraries.indicator.test)
114114
testImplementation(projects.libraries.pushproviders.test)
115+
testImplementation(projects.libraries.sessionStorage.implMemory)
116+
testImplementation(projects.libraries.sessionStorage.test)
115117
testImplementation(projects.services.analytics.test)
116118
testImplementation(projects.services.toolbox.test)
117119
testImplementation(projects.tests.testutils)

features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,24 @@ import io.element.android.features.preferences.impl.utils.ShowDeveloperSettingsP
1616
import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
1717
import io.element.android.libraries.core.meta.BuildType
1818
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
1922
import io.element.android.libraries.indicator.api.IndicatorService
2023
import io.element.android.libraries.indicator.test.FakeIndicatorService
2124
import io.element.android.libraries.matrix.api.oidc.AccountManagementAction
2225
import io.element.android.libraries.matrix.api.user.MatrixUser
2326
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
2429
import io.element.android.libraries.matrix.test.A_USER_NAME
2530
import io.element.android.libraries.matrix.test.FakeMatrixClient
2631
import io.element.android.libraries.matrix.test.core.aBuildMeta
2732
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
2837
import io.element.android.services.analytics.test.FakeAnalyticsService
2938
import io.element.android.tests.testutils.WarmUpRule
3039
import io.element.android.tests.testutils.lambda.lambdaRecorder
@@ -61,6 +70,8 @@ class PreferencesRootPresenterTest {
6170
)
6271
)
6372
assertThat(initialState.version).isEqualTo("A Version")
73+
assertThat(initialState.isMultiAccountEnabled).isFalse()
74+
assertThat(initialState.otherSessions).isEmpty()
6475
val loadedState = awaitItem()
6576
assertThat(loadedState.myUser).isEqualTo(
6677
MatrixUser(
@@ -174,6 +185,34 @@ class PreferencesRootPresenterTest {
174185
}
175186
}
176187

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+
177216
private suspend fun <T> ReceiveTurbine<T>.awaitFirstItem(): T {
178217
skipItems(1)
179218
return awaitItem()
@@ -185,6 +224,8 @@ class PreferencesRootPresenterTest {
185224
showDeveloperSettingsProvider: ShowDeveloperSettingsProvider = ShowDeveloperSettingsProvider(aBuildMeta(BuildType.DEBUG)),
186225
rageshakeFeatureAvailability: RageshakeFeatureAvailability = RageshakeFeatureAvailability { flowOf(true) },
187226
indicatorService: IndicatorService = FakeIndicatorService(),
227+
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
228+
sessionStore: SessionStore = InMemorySessionStore(),
188229
) = PreferencesRootPresenter(
189230
matrixClient = matrixClient,
190231
sessionVerificationService = sessionVerificationService,
@@ -195,5 +236,7 @@ class PreferencesRootPresenterTest {
195236
directLogoutPresenter = { aDirectLogoutState() },
196237
showDeveloperSettingsProvider = showDeveloperSettingsProvider,
197238
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
239+
featureFlagService = featureFlagService,
240+
sessionStore = sessionStore,
198241
)
199242
}

libraries/session-storage/test/src/main/kotlin/io/element/android/libraries/sessionstorage/test/SessionData.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.libraries.sessionstorage.test
99

1010
import io.element.android.libraries.sessionstorage.api.LoginType
1111
import io.element.android.libraries.sessionstorage.api.SessionData
12+
import java.util.Date
1213

1314
fun aSessionData(
1415
sessionId: String = "@alice:server.org",
@@ -18,7 +19,11 @@ fun aSessionData(
1819
cachePath: String = "/a/path/to/a/cache",
1920
accessToken: String = "anAccessToken",
2021
refreshToken: String? = "aRefreshToken",
21-
): SessionData {
22+
lastUsageIndex: Long = 0,
23+
lastUsageDate: Date = Date(0),
24+
userDisplayName: String? = null,
25+
userAvatarUrl: String? = null,
26+
): SessionData {
2227
return SessionData(
2328
userId = sessionId,
2429
deviceId = deviceId,
@@ -33,5 +38,9 @@ fun aSessionData(
3338
passphrase = null,
3439
sessionPath = sessionPath,
3540
cachePath = cachePath,
41+
lastUsageIndex = lastUsageIndex,
42+
lastUsageDate = lastUsageDate,
43+
userDisplayName = userDisplayName,
44+
userAvatarUrl = userAvatarUrl,
3645
)
3746
}

0 commit comments

Comments
 (0)