Skip to content

Commit 914aa6c

Browse files
committed
Multi accounts - Fix test on HomePresenter - WIP
1 parent a87aebe commit 914aa6c

File tree

3 files changed

+56
-11
lines changed

3 files changed

+56
-11
lines changed

features/home/impl/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ dependencies {
7676
testImplementation(projects.libraries.permissions.noop)
7777
testImplementation(projects.libraries.permissions.test)
7878
testImplementation(projects.libraries.preferences.test)
79+
testImplementation(projects.libraries.sessionStorage.implMemory)
80+
testImplementation(projects.libraries.sessionStorage.test)
7981
testImplementation(projects.libraries.push.test)
8082
testImplementation(projects.services.analytics.test)
8183
testImplementation(projects.services.toolbox.test)

features/home/impl/src/test/kotlin/io/element/android/features/home/impl/HomePresenterTest.kt

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,14 @@ import io.element.android.libraries.matrix.test.A_USER_ID
2929
import io.element.android.libraries.matrix.test.A_USER_NAME
3030
import io.element.android.libraries.matrix.test.FakeMatrixClient
3131
import io.element.android.libraries.matrix.test.sync.FakeSyncService
32+
import io.element.android.libraries.sessionstorage.api.SessionStore
33+
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
34+
import io.element.android.libraries.sessionstorage.test.aSessionData
3235
import io.element.android.tests.testutils.WarmUpRule
36+
import io.element.android.tests.testutils.lambda.lambdaRecorder
37+
import io.element.android.tests.testutils.lambda.value
3338
import io.element.android.tests.testutils.test
3439
import kotlinx.coroutines.flow.flowOf
35-
import kotlinx.coroutines.test.TestScope
3640
import kotlinx.coroutines.test.runTest
3741
import org.junit.Rule
3842
import org.junit.Test
@@ -48,29 +52,46 @@ class HomePresenterTest {
4852
userAvatarUrl = null,
4953
)
5054
matrixClient.givenGetProfileResult(matrixClient.sessionId, Result.success(MatrixUser(matrixClient.sessionId, A_USER_NAME, AN_AVATAR_URL)))
55+
val updateUserProfileResult = lambdaRecorder<String, String?, String?, Unit> { _, _, _ -> }
5156
val presenter = createHomePresenter(
5257
client = matrixClient,
5358
rageshakeFeatureAvailability = { flowOf(false) },
59+
sessionStore = InMemorySessionStore(
60+
initialSessionData = aSessionData(
61+
sessionId = matrixClient.sessionId.value,
62+
),
63+
updateUserProfileResult = updateUserProfileResult,
64+
),
5465
)
5566
moleculeFlow(RecompositionMode.Immediate) {
5667
presenter.present()
5768
}.test {
5869
val initialState = awaitItem()
59-
assertThat(initialState.matrixUser).isEqualTo(MatrixUser(A_USER_ID))
70+
assertThat(initialState.matrixUserAndNeighbors.first()).isEqualTo(
71+
MatrixUser(A_USER_ID, null, null)
72+
)
6073
assertThat(initialState.canReportBug).isFalse()
6174
val withUserState = awaitItem()
62-
assertThat(withUserState.matrixUser.userId).isEqualTo(A_USER_ID)
63-
assertThat(withUserState.matrixUser.displayName).isEqualTo(A_USER_NAME)
64-
assertThat(withUserState.matrixUser.avatarUrl).isEqualTo(AN_AVATAR_URL)
75+
assertThat(withUserState.matrixUserAndNeighbors.first()).isEqualTo(
76+
MatrixUser(A_USER_ID, A_USER_NAME, AN_AVATAR_URL)
77+
)
6578
assertThat(withUserState.showAvatarIndicator).isFalse()
6679
assertThat(withUserState.isSpaceFeatureEnabled).isFalse()
80+
updateUserProfileResult.assertions().isCalledOnce().with(
81+
value(matrixClient.sessionId),
82+
value(A_USER_NAME),
83+
value(AN_AVATAR_URL),
84+
)
6785
}
6886
}
6987

7088
@Test
7189
fun `present - can report bug`() = runTest {
7290
val presenter = createHomePresenter(
7391
rageshakeFeatureAvailability = { flowOf(true) },
92+
sessionStore = InMemorySessionStore(
93+
updateUserProfileResult = { _, _, _ -> },
94+
),
7495
)
7596
moleculeFlow(RecompositionMode.Immediate) {
7697
presenter.present()
@@ -88,6 +109,9 @@ class HomePresenterTest {
88109
featureFlagService = FakeFeatureFlagService(
89110
initialState = mapOf(FeatureFlags.Space.key to true),
90111
),
112+
sessionStore = InMemorySessionStore(
113+
updateUserProfileResult = { _, _, _ -> },
114+
),
91115
)
92116
presenter.test {
93117
skipItems(1)
@@ -101,6 +125,9 @@ class HomePresenterTest {
101125
val indicatorService = FakeIndicatorService()
102126
val presenter = createHomePresenter(
103127
indicatorService = indicatorService,
128+
sessionStore = InMemorySessionStore(
129+
updateUserProfileResult = { _, _, _ -> },
130+
),
104131
)
105132
moleculeFlow(RecompositionMode.Immediate) {
106133
presenter.present()
@@ -120,19 +147,28 @@ class HomePresenterTest {
120147
userAvatarUrl = null,
121148
)
122149
matrixClient.givenGetProfileResult(matrixClient.sessionId, Result.failure(AN_EXCEPTION))
123-
val presenter = createHomePresenter(client = matrixClient)
150+
val presenter = createHomePresenter(
151+
client = matrixClient,
152+
sessionStore = InMemorySessionStore(
153+
updateUserProfileResult = { _, _, _ -> },
154+
),
155+
)
124156
moleculeFlow(RecompositionMode.Immediate) {
125157
presenter.present()
126158
}.test {
127159
val initialState = awaitItem()
128-
assertThat(initialState.matrixUser).isEqualTo(MatrixUser(matrixClient.sessionId))
160+
assertThat(initialState.matrixUserAndNeighbors.first()).isEqualTo(MatrixUser(matrixClient.sessionId))
129161
// No new state is coming
130162
}
131163
}
132164

133165
@Test
134166
fun `present - NavigationBar change`() = runTest {
135-
val presenter = createHomePresenter()
167+
val presenter = createHomePresenter(
168+
sessionStore = InMemorySessionStore(
169+
updateUserProfileResult = { _, _, _ -> },
170+
),
171+
)
136172
moleculeFlow(RecompositionMode.Immediate) {
137173
presenter.present()
138174
}.test {
@@ -144,13 +180,14 @@ class HomePresenterTest {
144180
}
145181
}
146182

147-
private fun TestScope.createHomePresenter(
183+
private fun createHomePresenter(
148184
client: MatrixClient = FakeMatrixClient(),
149185
syncService: SyncService = FakeSyncService(),
150186
snackbarDispatcher: SnackbarDispatcher = SnackbarDispatcher(),
151187
rageshakeFeatureAvailability: RageshakeFeatureAvailability = RageshakeFeatureAvailability { flowOf(false) },
152188
indicatorService: IndicatorService = FakeIndicatorService(),
153-
featureFlagService: FeatureFlagService = FakeFeatureFlagService()
189+
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
190+
sessionStore: SessionStore = InMemorySessionStore(),
154191
) = HomePresenter(
155192
client = client,
156193
syncService = syncService,
@@ -160,5 +197,6 @@ class HomePresenterTest {
160197
roomListPresenter = { aRoomListState() },
161198
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
162199
featureFlagService = featureFlagService,
200+
sessionStore = sessionStore,
163201
)
164202
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ import kotlinx.coroutines.flow.MutableStateFlow
1515
import kotlinx.coroutines.flow.map
1616

1717
class InMemorySessionStore(
18+
initialSessionData: SessionData? = null,
1819
private val updateUserProfileResult: (String, String?, String?) -> Unit = { _, _, _ -> error("Not implemented") },
1920
private val setLatestSessionResult: (String) -> Unit = { error("Not implemented") },
2021
) : SessionStore {
21-
private var sessionDataFlow = MutableStateFlow<SessionData?>(null)
22+
private var sessionDataFlow = MutableStateFlow(initialSessionData)
2223

2324
override fun isLoggedIn(): Flow<LoggedInState> {
2425
return sessionDataFlow.map {
@@ -46,6 +47,10 @@ class InMemorySessionStore(
4647
}
4748

4849
override suspend fun updateUserProfile(sessionId: String, displayName: String?, avatarUrl: String?) {
50+
sessionDataFlow.value = sessionDataFlow.value?.copy(
51+
userDisplayName = displayName,
52+
userAvatarUrl = avatarUrl
53+
)
4954
updateUserProfileResult(sessionId, displayName, avatarUrl)
5055
}
5156

0 commit comments

Comments
 (0)