Makes sure to test loadMore method on TimelinePresenter
This commit is contained in:
parent
c8ec8da44f
commit
39edc780fe
3 changed files with 32 additions and 12 deletions
|
|
@ -55,7 +55,7 @@ class TimelinePresenter @Inject constructor(
|
||||||
}
|
}
|
||||||
val timelineItems = timelineItemsFactory
|
val timelineItems = timelineItemsFactory
|
||||||
.flow()
|
.flow()
|
||||||
.collectAsState(emptyList())
|
.collectAsState()
|
||||||
|
|
||||||
val paginationState = timeline
|
val paginationState = timeline
|
||||||
.paginationState()
|
.paginationState()
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@ class TimelinePresenterTest {
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.timelineItems).isEmpty()
|
assertThat(initialState.timelineItems).isEmpty()
|
||||||
|
val loadedNoTimelineState = awaitItem()
|
||||||
|
assertThat(loadedNoTimelineState.timelineItems).isEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -58,11 +60,14 @@ class TimelinePresenterTest {
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.paginationState.canBackPaginate).isTrue()
|
assertThat(initialState.paginationState.canBackPaginate).isTrue()
|
||||||
matrixTimeline.updatePaginationState {
|
assertThat(initialState.paginationState.isBackPaginating).isFalse()
|
||||||
copy(canBackPaginate = false)
|
initialState.eventSink.invoke(TimelineEvents.LoadMore)
|
||||||
}
|
val inPaginationState = awaitItem()
|
||||||
val loadedState = awaitItem()
|
assertThat(inPaginationState.paginationState.isBackPaginating).isTrue()
|
||||||
assertThat(loadedState.paginationState.canBackPaginate).isFalse()
|
assertThat(inPaginationState.paginationState.canBackPaginate).isTrue()
|
||||||
|
val postPaginationState = awaitItem()
|
||||||
|
assertThat(postPaginationState.paginationState.canBackPaginate).isTrue()
|
||||||
|
assertThat(postPaginationState.paginationState.isBackPaginating).isFalse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,6 +83,7 @@ class TimelinePresenterTest {
|
||||||
presenter.present()
|
presenter.present()
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
skipItems(1)
|
||||||
assertThat(initialState.highlightedEventId).isNull()
|
assertThat(initialState.highlightedEventId).isNull()
|
||||||
initialState.eventSink.invoke(TimelineEvents.SetHighlightedEvent(AN_EVENT_ID))
|
initialState.eventSink.invoke(TimelineEvents.SetHighlightedEvent(AN_EVENT_ID))
|
||||||
val withHighlightedState = awaitItem()
|
val withHighlightedState = awaitItem()
|
||||||
|
|
|
||||||
|
|
@ -23,28 +23,42 @@ import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.emptyFlow
|
|
||||||
|
|
||||||
class FakeMatrixTimeline : MatrixTimeline {
|
class FakeMatrixTimeline(
|
||||||
|
initialTimelineItems: List<MatrixTimelineItem> = emptyList(),
|
||||||
|
initialPaginationState: MatrixTimeline.PaginationState = MatrixTimeline.PaginationState(canBackPaginate = true, isBackPaginating = false)
|
||||||
|
) : MatrixTimeline {
|
||||||
|
|
||||||
private val paginationState = MutableStateFlow(
|
private val paginationState: MutableStateFlow<MatrixTimeline.PaginationState> = MutableStateFlow(initialPaginationState)
|
||||||
MatrixTimeline.PaginationState(canBackPaginate = true, isBackPaginating = false)
|
private val timelineItems: MutableStateFlow<List<MatrixTimelineItem>> = MutableStateFlow(initialTimelineItems)
|
||||||
)
|
|
||||||
|
|
||||||
fun updatePaginationState(update: (MatrixTimeline.PaginationState.() -> MatrixTimeline.PaginationState)) {
|
fun updatePaginationState(update: (MatrixTimeline.PaginationState.() -> MatrixTimeline.PaginationState)) {
|
||||||
paginationState.value = update(paginationState.value)
|
paginationState.value = update(paginationState.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateTimelineItems(update: (items: List<MatrixTimelineItem>) -> List<MatrixTimelineItem>) {
|
||||||
|
timelineItems.value = update(timelineItems.value)
|
||||||
|
}
|
||||||
|
|
||||||
override fun paginationState(): StateFlow<MatrixTimeline.PaginationState> {
|
override fun paginationState(): StateFlow<MatrixTimeline.PaginationState> {
|
||||||
return paginationState
|
return paginationState
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun timelineItems(): Flow<List<MatrixTimelineItem>> {
|
override fun timelineItems(): Flow<List<MatrixTimelineItem>> {
|
||||||
return emptyFlow()
|
return timelineItems
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun paginateBackwards(requestSize: Int, untilNumberOfItems: Int): Result<Unit> {
|
override suspend fun paginateBackwards(requestSize: Int, untilNumberOfItems: Int): Result<Unit> {
|
||||||
|
updatePaginationState {
|
||||||
|
copy(isBackPaginating = true)
|
||||||
|
}
|
||||||
delay(100)
|
delay(100)
|
||||||
|
updatePaginationState {
|
||||||
|
copy(isBackPaginating = false)
|
||||||
|
}
|
||||||
|
updateTimelineItems { timelineItems ->
|
||||||
|
timelineItems
|
||||||
|
}
|
||||||
return Result.success(Unit)
|
return Result.success(Unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue