@@ -22,85 +22,174 @@ import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem
2222import org.junit.Test
2323
2424class RoomBeginningPostProcessorTest {
25+ private val roomCreateEvent = MatrixTimelineItem .Event (
26+ uniqueId = UniqueId (" m.room.create" ),
27+ event = anEventTimelineItem(sender = A_USER_ID , content = StateContent (" " , OtherState .RoomCreate ))
28+ )
29+ private val roomCreatorJoinEvent = MatrixTimelineItem .Event (
30+ uniqueId = UniqueId (" m.room.member" ),
31+ event = anEventTimelineItem(content = RoomMembershipContent (A_USER_ID , null , MembershipChange .JOINED ))
32+ )
33+ private val otherMemberJoinEvent = MatrixTimelineItem .Event (
34+ uniqueId = UniqueId (" m.room.member_other" ),
35+ event = anEventTimelineItem(content = RoomMembershipContent (A_USER_ID_2 , null , MembershipChange .JOINED ))
36+ )
37+ private val messageEvent = MatrixTimelineItem .Event (
38+ uniqueId = UniqueId (" m.room.message" ),
39+ event = anEventTimelineItem(content = aMessageContent(" hi" ))
40+ )
41+
42+ @Test
43+ fun `processor returns empty list when empty list is provided` () {
44+ val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
45+ val processedItems = processor.process(
46+ items = emptyList(),
47+ isDm = true ,
48+ roomCreator = A_USER_ID ,
49+ hasMoreToLoadBackwards = false ,
50+ )
51+ assertThat(processedItems).isEmpty()
52+ }
53+
54+ @Test
55+ fun `processor returns the provided list when it only contains a message` () {
56+ val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
57+ val processedItems = processor.process(
58+ items = listOf (messageEvent),
59+ isDm = true ,
60+ roomCreator = A_USER_ID ,
61+ hasMoreToLoadBackwards = false ,
62+ )
63+ assertThat(processedItems).isEqualTo(listOf (messageEvent))
64+ }
65+
66+ @Test
67+ fun `processor returns the provided list when it only contains a message and the roomCreator is not provided` () {
68+ val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
69+ val processedItems = processor.process(
70+ items = listOf (messageEvent),
71+ isDm = true ,
72+ roomCreator = null ,
73+ hasMoreToLoadBackwards = false ,
74+ )
75+ assertThat(processedItems).isEqualTo(listOf (messageEvent))
76+ }
77+
2578 @Test
2679 fun `processor removes room creation event and self-join event from DM timeline` () {
2780 val timelineItems = listOf (
28- MatrixTimelineItem . Event ( UniqueId ( " m.room.create " ), anEventTimelineItem(sender = A_USER_ID , content = StateContent ( " " , OtherState . RoomCreate ))) ,
29- MatrixTimelineItem . Event ( UniqueId ( " m.room.member " ), anEventTimelineItem(content = RoomMembershipContent ( A_USER_ID , null , MembershipChange . JOINED ))) ,
81+ roomCreateEvent ,
82+ roomCreatorJoinEvent ,
3083 )
3184 val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
32- val processedItems = processor.process(timelineItems, isDm = true , hasMoreToLoadBackwards = false )
85+ val processedItems = processor.process(
86+ items = timelineItems,
87+ isDm = true ,
88+ roomCreator = A_USER_ID ,
89+ hasMoreToLoadBackwards = false ,
90+ )
3391 assertThat(processedItems).isEmpty()
3492 }
3593
94+ @Test
95+ fun `processor does not remove anything with PINNED_EVENTS mode` () {
96+ val timelineItems = listOf (
97+ roomCreateEvent,
98+ roomCreatorJoinEvent,
99+ )
100+ val processor = RoomBeginningPostProcessor (Timeline .Mode .PINNED_EVENTS )
101+ val processedItems = processor.process(
102+ items = timelineItems,
103+ isDm = true ,
104+ roomCreator = A_USER_ID ,
105+ hasMoreToLoadBackwards = false ,
106+ )
107+ assertThat(processedItems).isEqualTo(timelineItems)
108+ }
109+
36110 @Test
37111 fun `processor removes room creation event and self-join event from DM timeline even if they're not the first items` () {
38112 val timelineItems = listOf (
39- MatrixTimelineItem .Event (
40- UniqueId (" m.room.member_other" ),
41- anEventTimelineItem(content = RoomMembershipContent (A_USER_ID_2 , null , MembershipChange .JOINED ))
42- ),
43- MatrixTimelineItem .Event (UniqueId (" m.room.create" ), anEventTimelineItem(sender = A_USER_ID , content = StateContent (" " , OtherState .RoomCreate ))),
44- MatrixTimelineItem .Event (UniqueId (" m.room.message" ), anEventTimelineItem(content = aMessageContent(" hi" ))),
45- MatrixTimelineItem .Event (UniqueId (" m.room.member" ), anEventTimelineItem(content = RoomMembershipContent (A_USER_ID , null , MembershipChange .JOINED ))),
113+ otherMemberJoinEvent,
114+ roomCreateEvent,
115+ messageEvent,
116+ roomCreatorJoinEvent,
46117 )
47118 val expected = listOf (
48- MatrixTimelineItem .Event (
49- UniqueId (" m.room.member_other" ),
50- anEventTimelineItem(content = RoomMembershipContent (A_USER_ID_2 , null , MembershipChange .JOINED ))
51- ),
52- MatrixTimelineItem .Event (UniqueId (" m.room.message" ), anEventTimelineItem(content = aMessageContent(" hi" ))),
119+ otherMemberJoinEvent,
120+ messageEvent,
53121 )
54122 val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
55- val processedItems = processor.process(timelineItems, isDm = true , hasMoreToLoadBackwards = false )
123+ val processedItems = processor.process(timelineItems, isDm = true , roomCreator = A_USER_ID , hasMoreToLoadBackwards = false )
56124 assertThat(processedItems).isEqualTo(expected)
57125 }
58126
59127 @Test
60128 fun `processor will add beginning of room item if it's not a DM` () {
61129 val timelineItems = listOf (
62- MatrixTimelineItem . Event ( UniqueId ( " m.room.create " ), anEventTimelineItem(sender = A_USER_ID , content = StateContent ( " " , OtherState . RoomCreate ))) ,
63- MatrixTimelineItem . Event ( UniqueId ( " m.room.member " ), anEventTimelineItem(content = RoomMembershipContent ( A_USER_ID , null , MembershipChange . JOINED ))) ,
130+ roomCreateEvent ,
131+ roomCreatorJoinEvent ,
64132 )
65133 val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
66- val processedItems = processor.process(timelineItems, isDm = false , hasMoreToLoadBackwards = false )
134+ val processedItems = processor.process(timelineItems, isDm = false , roomCreator = A_USER_ID , hasMoreToLoadBackwards = false )
67135 assertThat(processedItems).isEqualTo(
68136 listOf (processor.createRoomBeginningItem()) + timelineItems
69137 )
70138 }
71139
72140 @Test
73- fun `processor won't remove items if it's not at the start of the timeline ` () {
141+ fun `processor will not add beginning of room item if it's not a DM but the room has more to load ` () {
74142 val timelineItems = listOf (
75- MatrixTimelineItem . Event ( UniqueId ( " m.room.create " ), anEventTimelineItem(sender = A_USER_ID , content = StateContent ( " " , OtherState . RoomCreate ))) ,
76- MatrixTimelineItem . Event ( UniqueId ( " m.room.member " ), anEventTimelineItem(content = RoomMembershipContent ( A_USER_ID , null , MembershipChange . JOINED ))) ,
143+ roomCreateEvent ,
144+ roomCreatorJoinEvent ,
77145 )
78146 val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
79- val processedItems = processor.process(timelineItems, isDm = true , hasMoreToLoadBackwards = true )
147+ val processedItems = processor.process(timelineItems, isDm = false , roomCreator = A_USER_ID , hasMoreToLoadBackwards = true )
80148 assertThat(processedItems).isEqualTo(timelineItems)
81149 }
82150
83151 @Test
84- fun `processor won't remove the first member join event if it can't find the room creation event ` () {
152+ fun `processor will add beginning of room item if it's not a DM, when the parameter roomCreator is null ` () {
85153 val timelineItems = listOf (
86- MatrixTimelineItem .Event (UniqueId (" m.room.member" ), anEventTimelineItem(content = RoomMembershipContent (A_USER_ID , null , MembershipChange .JOINED ))),
154+ roomCreateEvent,
155+ roomCreatorJoinEvent,
87156 )
88157 val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
89- val processedItems = processor.process(timelineItems, isDm = true , hasMoreToLoadBackwards = true )
90- assertThat(processedItems).isEqualTo(timelineItems)
158+ val processedItems = processor.process(timelineItems, isDm = false , roomCreator = null , hasMoreToLoadBackwards = false )
159+ assertThat(processedItems).isEqualTo(
160+ listOf (processor.createRoomBeginningItem()) + timelineItems
161+ )
162+ }
163+
164+ @Test
165+ fun `processor removes items event it's not at the start of the timeline` () {
166+ val timelineItems = listOf (
167+ roomCreateEvent,
168+ roomCreatorJoinEvent,
169+ )
170+ val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
171+ val processedItems = processor.process(timelineItems, isDm = true , roomCreator = A_USER_ID , hasMoreToLoadBackwards = true )
172+ assertThat(processedItems).isEmpty()
173+ }
174+
175+ @Test
176+ fun `processor removes the first member join event if it matches the roomCreator parameter` () {
177+ val timelineItems = listOf (
178+ roomCreatorJoinEvent,
179+ )
180+ val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
181+ val processedItems = processor.process(timelineItems, isDm = true , roomCreator = A_USER_ID , hasMoreToLoadBackwards = true )
182+ assertThat(processedItems).isEmpty()
91183 }
92184
93185 @Test
94186 fun `processor won't remove the first member join event if it's not from the room creator` () {
95187 val timelineItems = listOf (
96- MatrixTimelineItem .Event (UniqueId (" m.room.create" ), anEventTimelineItem(sender = A_USER_ID , content = StateContent (" " , OtherState .RoomCreate ))),
97- MatrixTimelineItem .Event (
98- UniqueId (" m.room.member" ),
99- anEventTimelineItem(content = RoomMembershipContent (A_USER_ID_2 , null , MembershipChange .JOINED ))
100- ),
188+ roomCreateEvent,
189+ otherMemberJoinEvent,
101190 )
102191 val processor = RoomBeginningPostProcessor (Timeline .Mode .LIVE )
103- val processedItems = processor.process(timelineItems, isDm = true , hasMoreToLoadBackwards = true )
104- assertThat(processedItems).isEqualTo(timelineItems )
192+ val processedItems = processor.process(timelineItems, isDm = true , roomCreator = A_USER_ID , hasMoreToLoadBackwards = true )
193+ assertThat(processedItems).isEqualTo(listOf (otherMemberJoinEvent) )
105194 }
106195}
0 commit comments