@@ -20,8 +20,11 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
2020import io.element.android.libraries.matrix.api.timeline.item.EventThreadInfo
2121import io.element.android.libraries.matrix.api.timeline.item.ThreadSummary
2222import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType
23+ import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails
2324import io.element.android.libraries.matrix.test.A_THREAD_ID
2425import io.element.android.libraries.matrix.test.A_USER_ID
26+ import io.element.android.libraries.matrix.test.A_USER_ID_2
27+ import io.element.android.libraries.matrix.test.room.aRoomMember
2528import io.element.android.libraries.matrix.test.timeline.aMessageContent
2629import io.element.android.libraries.matrix.test.timeline.aRedactedContent
2730import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem
@@ -207,6 +210,74 @@ class TimelineItemsFactoryTest {
207210 }
208211 }
209212
213+ @Test
214+ fun `a sender the timeline knows nothing about is named from the room member list` () = runTest {
215+ val factory = aTimelineItemsFactory(
216+ config = TimelineItemsFactoryConfig (
217+ computeReadReceipts = false ,
218+ computeReactions = false ,
219+ )
220+ )
221+ val items = listOf (
222+ MatrixTimelineItem .Event (
223+ uniqueId = UniqueId (" event-0" ),
224+ event = anEventTimelineItem(
225+ sender = A_USER_ID ,
226+ senderProfile = ProfileDetails .Unavailable ,
227+ content = aMessageContent(body = " A regular message" ),
228+ ),
229+ ),
230+ )
231+ factory.timelineItems.test {
232+ factory.replaceWith(
233+ timelineItems = items,
234+ roomMembers = listOf (aRoomMember(userId = A_USER_ID , displayName = " Alice" )),
235+ renderReadReceipts = false ,
236+ )
237+ val event = awaitItem().filterIsInstance<TimelineItem .Event >().single()
238+ assertThat(event.senderProfile).isEqualTo(
239+ ProfileDetails .Ready (
240+ displayName = " Alice" ,
241+ displayNameAmbiguous = false ,
242+ avatarUrl = null ,
243+ displayedStatus = null ,
244+ )
245+ )
246+ assertThat(event.senderAvatar.name).isEqualTo(" Alice" )
247+ cancelAndIgnoreRemainingEvents()
248+ }
249+ }
250+
251+ @Test
252+ fun `a sender the room member list knows nothing about keeps the profile the timeline gave` () = runTest {
253+ val factory = aTimelineItemsFactory(
254+ config = TimelineItemsFactoryConfig (
255+ computeReadReceipts = false ,
256+ computeReactions = false ,
257+ )
258+ )
259+ val items = listOf (
260+ MatrixTimelineItem .Event (
261+ uniqueId = UniqueId (" event-0" ),
262+ event = anEventTimelineItem(
263+ sender = A_USER_ID ,
264+ senderProfile = ProfileDetails .Unavailable ,
265+ content = aMessageContent(body = " A regular message" ),
266+ ),
267+ ),
268+ )
269+ factory.timelineItems.test {
270+ factory.replaceWith(
271+ timelineItems = items,
272+ roomMembers = listOf (aRoomMember(userId = A_USER_ID_2 , displayName = " Bob" )),
273+ renderReadReceipts = false ,
274+ )
275+ val event = awaitItem().filterIsInstance<TimelineItem .Event >().single()
276+ assertThat(event.senderProfile).isEqualTo(ProfileDetails .Unavailable )
277+ cancelAndIgnoreRemainingEvents()
278+ }
279+ }
280+
210281 private suspend fun TestScope.groupPositionsOf (timestamps : List <Long >): List <TimelineItemGroupPosition > {
211282 val factory = aTimelineItemsFactory(
212283 config = TimelineItemsFactoryConfig (
0 commit comments