@@ -29,10 +29,14 @@ import io.element.android.libraries.matrix.test.A_USER_ID
29
29
import io.element.android.libraries.matrix.test.A_USER_NAME
30
30
import io.element.android.libraries.matrix.test.FakeMatrixClient
31
31
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
32
35
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
33
38
import io.element.android.tests.testutils.test
34
39
import kotlinx.coroutines.flow.flowOf
35
- import kotlinx.coroutines.test.TestScope
36
40
import kotlinx.coroutines.test.runTest
37
41
import org.junit.Rule
38
42
import org.junit.Test
@@ -48,29 +52,46 @@ class HomePresenterTest {
48
52
userAvatarUrl = null ,
49
53
)
50
54
matrixClient.givenGetProfileResult(matrixClient.sessionId, Result .success(MatrixUser (matrixClient.sessionId, A_USER_NAME , AN_AVATAR_URL )))
55
+ val updateUserProfileResult = lambdaRecorder<String , String ?, String ?, Unit > { _, _, _ -> }
51
56
val presenter = createHomePresenter(
52
57
client = matrixClient,
53
58
rageshakeFeatureAvailability = { flowOf(false ) },
59
+ sessionStore = InMemorySessionStore (
60
+ initialSessionData = aSessionData(
61
+ sessionId = matrixClient.sessionId.value,
62
+ ),
63
+ updateUserProfileResult = updateUserProfileResult,
64
+ ),
54
65
)
55
66
moleculeFlow(RecompositionMode .Immediate ) {
56
67
presenter.present()
57
68
}.test {
58
69
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
+ )
60
73
assertThat(initialState.canReportBug).isFalse()
61
74
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
+ )
65
78
assertThat(withUserState.showAvatarIndicator).isFalse()
66
79
assertThat(withUserState.isSpaceFeatureEnabled).isFalse()
80
+ updateUserProfileResult.assertions().isCalledOnce().with (
81
+ value(matrixClient.sessionId),
82
+ value(A_USER_NAME ),
83
+ value(AN_AVATAR_URL ),
84
+ )
67
85
}
68
86
}
69
87
70
88
@Test
71
89
fun `present - can report bug` () = runTest {
72
90
val presenter = createHomePresenter(
73
91
rageshakeFeatureAvailability = { flowOf(true ) },
92
+ sessionStore = InMemorySessionStore (
93
+ updateUserProfileResult = { _, _, _ -> },
94
+ ),
74
95
)
75
96
moleculeFlow(RecompositionMode .Immediate ) {
76
97
presenter.present()
@@ -88,6 +109,9 @@ class HomePresenterTest {
88
109
featureFlagService = FakeFeatureFlagService (
89
110
initialState = mapOf (FeatureFlags .Space .key to true ),
90
111
),
112
+ sessionStore = InMemorySessionStore (
113
+ updateUserProfileResult = { _, _, _ -> },
114
+ ),
91
115
)
92
116
presenter.test {
93
117
skipItems(1 )
@@ -101,6 +125,9 @@ class HomePresenterTest {
101
125
val indicatorService = FakeIndicatorService ()
102
126
val presenter = createHomePresenter(
103
127
indicatorService = indicatorService,
128
+ sessionStore = InMemorySessionStore (
129
+ updateUserProfileResult = { _, _, _ -> },
130
+ ),
104
131
)
105
132
moleculeFlow(RecompositionMode .Immediate ) {
106
133
presenter.present()
@@ -120,19 +147,28 @@ class HomePresenterTest {
120
147
userAvatarUrl = null ,
121
148
)
122
149
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
+ )
124
156
moleculeFlow(RecompositionMode .Immediate ) {
125
157
presenter.present()
126
158
}.test {
127
159
val initialState = awaitItem()
128
- assertThat(initialState.matrixUser ).isEqualTo(MatrixUser (matrixClient.sessionId))
160
+ assertThat(initialState.matrixUserAndNeighbors.first() ).isEqualTo(MatrixUser (matrixClient.sessionId))
129
161
// No new state is coming
130
162
}
131
163
}
132
164
133
165
@Test
134
166
fun `present - NavigationBar change` () = runTest {
135
- val presenter = createHomePresenter()
167
+ val presenter = createHomePresenter(
168
+ sessionStore = InMemorySessionStore (
169
+ updateUserProfileResult = { _, _, _ -> },
170
+ ),
171
+ )
136
172
moleculeFlow(RecompositionMode .Immediate ) {
137
173
presenter.present()
138
174
}.test {
@@ -144,13 +180,14 @@ class HomePresenterTest {
144
180
}
145
181
}
146
182
147
- private fun TestScope. createHomePresenter (
183
+ private fun createHomePresenter (
148
184
client : MatrixClient = FakeMatrixClient (),
149
185
syncService : SyncService = FakeSyncService (),
150
186
snackbarDispatcher : SnackbarDispatcher = SnackbarDispatcher (),
151
187
rageshakeFeatureAvailability : RageshakeFeatureAvailability = RageshakeFeatureAvailability { flowOf(false) },
152
188
indicatorService : IndicatorService = FakeIndicatorService (),
153
- featureFlagService : FeatureFlagService = FakeFeatureFlagService ()
189
+ featureFlagService : FeatureFlagService = FakeFeatureFlagService (),
190
+ sessionStore : SessionStore = InMemorySessionStore (),
154
191
) = HomePresenter (
155
192
client = client,
156
193
syncService = syncService,
@@ -160,5 +197,6 @@ class HomePresenterTest {
160
197
roomListPresenter = { aRoomListState() },
161
198
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
162
199
featureFlagService = featureFlagService,
200
+ sessionStore = sessionStore,
163
201
)
164
202
}
0 commit comments