Merge pull request #2041 from element-hq/feature/fga/fix_timeline_back_pagination_loop
Fix timeline back pagination loop in encrypted room.
This commit is contained in:
commit
7273abd42b
10 changed files with 84 additions and 123 deletions
|
|
@ -80,7 +80,7 @@ class TimelineItemEventFactory @Inject constructor(
|
|||
)
|
||||
currentTimelineItem.event
|
||||
return TimelineItem.Event(
|
||||
id = currentTimelineItem.uniqueId.toString(),
|
||||
id = currentTimelineItem.uniqueId,
|
||||
eventId = currentTimelineItem.eventId,
|
||||
transactionId = currentTimelineItem.transactionId,
|
||||
senderId = currentSender,
|
||||
|
|
|
|||
|
|
@ -31,13 +31,8 @@ class TimelineItemVirtualFactory @Inject constructor(
|
|||
fun create(
|
||||
virtualTimelineItem: MatrixTimelineItem.Virtual,
|
||||
): TimelineItem.Virtual {
|
||||
val id = if (virtualTimelineItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner) {
|
||||
"encrypted_history_banner"
|
||||
} else {
|
||||
virtualTimelineItem.uniqueId.toString()
|
||||
}
|
||||
return TimelineItem.Virtual(
|
||||
id = id,
|
||||
id = virtualTimelineItem.uniqueId,
|
||||
model = virtualTimelineItem.computeModel()
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@ import org.junit.Rule
|
|||
import org.junit.Test
|
||||
import java.util.Date
|
||||
|
||||
private const val FAKE_UNIQUE_ID = "FAKE_UNIQUE_ID"
|
||||
|
||||
class TimelinePresenterTest {
|
||||
|
||||
@get:Rule
|
||||
|
|
@ -120,7 +122,7 @@ class TimelinePresenterTest {
|
|||
fun `present - on scroll finished send read receipt if an event is before the index`() = runTest {
|
||||
val timeline = FakeMatrixTimeline(
|
||||
initialTimelineItems = listOf(
|
||||
MatrixTimelineItem.Event(0, anEventTimelineItem())
|
||||
MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem())
|
||||
)
|
||||
)
|
||||
val presenter = createTimelinePresenter(timeline)
|
||||
|
|
@ -144,7 +146,7 @@ class TimelinePresenterTest {
|
|||
fun `present - on scroll finished will not send read receipt if no event is before the index`() = runTest {
|
||||
val timeline = FakeMatrixTimeline(
|
||||
initialTimelineItems = listOf(
|
||||
MatrixTimelineItem.Event(0, anEventTimelineItem())
|
||||
MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem())
|
||||
)
|
||||
)
|
||||
val presenter = createTimelinePresenter(timeline)
|
||||
|
|
@ -168,7 +170,7 @@ class TimelinePresenterTest {
|
|||
fun `present - on scroll finished will not send read receipt only virtual events exist before the index`() = runTest {
|
||||
val timeline = FakeMatrixTimeline(
|
||||
initialTimelineItems = listOf(
|
||||
MatrixTimelineItem.Virtual(0, VirtualTimelineItem.ReadMarker)
|
||||
MatrixTimelineItem.Virtual(FAKE_UNIQUE_ID, VirtualTimelineItem.ReadMarker)
|
||||
)
|
||||
)
|
||||
val presenter = createTimelinePresenter(timeline)
|
||||
|
|
@ -199,13 +201,13 @@ class TimelinePresenterTest {
|
|||
assertThat(initialState.newEventState).isEqualTo(NewEventState.None)
|
||||
assertThat(initialState.timelineItems.size).isEqualTo(0)
|
||||
timeline.updateTimelineItems {
|
||||
listOf(MatrixTimelineItem.Event(0, anEventTimelineItem(content = aMessageContent())))
|
||||
listOf(MatrixTimelineItem.Event("0", anEventTimelineItem(content = aMessageContent())))
|
||||
}
|
||||
consumeItemsUntilPredicate { it.timelineItems.size == 1 }
|
||||
// Mimics sending a message, and assert newEventState is FromMe
|
||||
timeline.updateTimelineItems { items ->
|
||||
val event = anEventTimelineItem(content = aMessageContent(), isOwn = true)
|
||||
items + listOf(MatrixTimelineItem.Event(1, event))
|
||||
items + listOf(MatrixTimelineItem.Event("1", event))
|
||||
}
|
||||
consumeItemsUntilPredicate { it.timelineItems.size == 2 }
|
||||
awaitLastSequentialItem().also { state ->
|
||||
|
|
@ -214,7 +216,7 @@ class TimelinePresenterTest {
|
|||
// Mimics receiving a message without clearing the previous FromMe
|
||||
timeline.updateTimelineItems { items ->
|
||||
val event = anEventTimelineItem(content = aMessageContent())
|
||||
items + listOf(MatrixTimelineItem.Event(2, event))
|
||||
items + listOf(MatrixTimelineItem.Event("2", event))
|
||||
}
|
||||
consumeItemsUntilPredicate { it.timelineItems.size == 3 }
|
||||
|
||||
|
|
@ -226,7 +228,7 @@ class TimelinePresenterTest {
|
|||
// Mimics receiving a message and assert newEventState is FromOther
|
||||
timeline.updateTimelineItems { items ->
|
||||
val event = anEventTimelineItem(content = aMessageContent())
|
||||
items + listOf(MatrixTimelineItem.Event(3, event))
|
||||
items + listOf(MatrixTimelineItem.Event("3", event))
|
||||
}
|
||||
consumeItemsUntilPredicate { it.timelineItems.size == 4 }
|
||||
awaitLastSequentialItem().also { state ->
|
||||
|
|
@ -267,7 +269,7 @@ class TimelinePresenterTest {
|
|||
),
|
||||
)
|
||||
timeline.updateTimelineItems {
|
||||
listOf(MatrixTimelineItem.Event(0, anEventTimelineItem(reactions = oneReaction)))
|
||||
listOf(MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem(reactions = oneReaction)))
|
||||
}
|
||||
skipItems(1)
|
||||
val item = awaitItem().timelineItems.first()
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ fun TestScope.aDefaultRedactedVoiceMessageManager(
|
|||
|
||||
fun aRedactedMatrixTimeline(eventId: EventId) = listOf<MatrixTimelineItem>(
|
||||
MatrixTimelineItem.Event(
|
||||
uniqueId = 0,
|
||||
uniqueId = "0",
|
||||
event = EventTimelineItem(
|
||||
eventId = eventId,
|
||||
transactionId = null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue