Timeline: fix tests

This commit is contained in:
ganfra 2023-07-13 21:29:01 +02:00
parent 96ac1763a1
commit d47d0deb17
2 changed files with 32 additions and 9 deletions

View file

@ -16,6 +16,7 @@
package io.element.android.features.messages.impl.timeline.groups package io.element.android.features.messages.impl.timeline.groups
import androidx.annotation.VisibleForTesting
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SingleIn import io.element.android.libraries.di.SingleIn
@ -86,8 +87,11 @@ private fun MutableMap<String, String>.getOrPutGroupId(timelineItems: List<Timel
return this[itemIdentifier]!! return this[itemIdentifier]!!
} }
} }
val itemIdentifier = timelineItems.first().identifier() val timelineItem = timelineItems.first()
return "${itemIdentifier}_group".also { groupId -> return computeGroupIdWith(timelineItem).also { groupId ->
this[itemIdentifier] = groupId this[timelineItem.identifier()] = groupId
} }
} }
@VisibleForTesting
internal fun computeGroupIdWith(timelineItem: TimelineItem): String = "${timelineItem.identifier()}_group"

View file

@ -20,13 +20,13 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.features.messages.fixtures.aMessageEvent import io.element.android.features.messages.fixtures.aMessageEvent
import io.element.android.features.messages.impl.timeline.aTimelineItemReactions import io.element.android.features.messages.impl.timeline.aTimelineItemReactions
import io.element.android.features.messages.impl.timeline.groups.TimelineItemGrouper import io.element.android.features.messages.impl.timeline.groups.TimelineItemGrouper
import io.element.android.features.messages.impl.timeline.groups.computeGroupIdWith
import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateEventContent
import io.element.android.features.messages.impl.timeline.model.virtual.aTimelineItemDaySeparatorModel import io.element.android.features.messages.impl.timeline.model.virtual.aTimelineItemDaySeparatorModel
import io.element.android.libraries.designsystem.components.avatar.anAvatarData import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.AN_EVENT_ID_2
import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.room.aTimelineItemDebugInfo import io.element.android.libraries.matrix.test.room.aTimelineItemDebugInfo
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@ -36,7 +36,7 @@ class TimelineItemGrouperTest {
private val sut = TimelineItemGrouper() private val sut = TimelineItemGrouper()
private val aGroupableItem = TimelineItem.Event( private val aGroupableItem = TimelineItem.Event(
id = AN_EVENT_ID.value, id = "0",
senderId = A_USER_ID, senderId = A_USER_ID,
senderAvatar = anAvatarData(), senderAvatar = anAvatarData(),
senderDisplayName = "", senderDisplayName = "",
@ -76,16 +76,17 @@ class TimelineItemGrouperTest {
fun `test groupables and ensure reordering`() { fun `test groupables and ensure reordering`() {
val result = sut.group( val result = sut.group(
listOf( listOf(
aGroupableItem.copy(id = AN_EVENT_ID_2.value), aGroupableItem.copy(id = "1"),
aGroupableItem, aGroupableItem.copy(id = "0"),
), ),
) )
assertThat(result).isEqualTo( assertThat(result).isEqualTo(
listOf( listOf(
TimelineItem.GroupedEvents( TimelineItem.GroupedEvents(
computeGroupIdWith(aGroupableItem),
events = listOf( events = listOf(
aGroupableItem, aGroupableItem.copy("0"),
aGroupableItem.copy(id = AN_EVENT_ID_2.value), aGroupableItem.copy(id = "1"),
).toImmutableList() ).toImmutableList()
), ),
) )
@ -128,6 +129,7 @@ class TimelineItemGrouperTest {
assertThat(result).isEqualTo( assertThat(result).isEqualTo(
listOf( listOf(
TimelineItem.GroupedEvents( TimelineItem.GroupedEvents(
computeGroupIdWith(aGroupableItem),
events = listOf( events = listOf(
aGroupableItem, aGroupableItem,
aGroupableItem, aGroupableItem,
@ -135,6 +137,7 @@ class TimelineItemGrouperTest {
), ),
aNonGroupableItem, aNonGroupableItem,
TimelineItem.GroupedEvents( TimelineItem.GroupedEvents(
computeGroupIdWith(aGroupableItem),
events = listOf( events = listOf(
aGroupableItem, aGroupableItem,
aGroupableItem, aGroupableItem,
@ -144,4 +147,20 @@ class TimelineItemGrouperTest {
) )
) )
} }
@Test
fun `when calling multiple time the method group over a growing list of groupable items, then groupId is stable`() {
// When
val groupableItems = mutableListOf(
aGroupableItem.copy(id = "1"),
aGroupableItem.copy(id = "2")
)
val expectedGroupId = sut.group(groupableItems).first().identifier()
groupableItems.add(0, aGroupableItem.copy("3"))
groupableItems.add(2, aGroupableItem.copy("4"))
groupableItems.add(aGroupableItem.copy("5"))
val actualGroupId = sut.group(groupableItems).first().identifier()
// Then
assertThat(actualGroupId).isEqualTo(expectedGroupId)
}
} }