Improve test coverage of PinnedMessagesBannerState
This commit is contained in:
parent
2d0c039c68
commit
fa6c804447
4 changed files with 23 additions and 25 deletions
|
|
@ -391,7 +391,7 @@ private fun MessagesViewContent(
|
||||||
|
|
||||||
Box {
|
Box {
|
||||||
val scrollBehavior = PinnedMessagesBannerViewDefaults.rememberScrollBehavior(
|
val scrollBehavior = PinnedMessagesBannerViewDefaults.rememberScrollBehavior(
|
||||||
pinnedMessagesCount = state.pinnedMessagesBannerState.pinnedMessagesCount(),
|
pinnedMessagesCount = (state.pinnedMessagesBannerState as? PinnedMessagesBannerState.Visible)?.pinnedMessagesCount() ?: 0,
|
||||||
)
|
)
|
||||||
TimelineView(
|
TimelineView(
|
||||||
state = state.timelineState,
|
state = state.timelineState,
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,30 @@ package io.element.android.features.messages.impl.pinned.banner
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.AnnotatedString
|
|
||||||
import io.element.android.libraries.designsystem.text.toAnnotatedString
|
import io.element.android.libraries.designsystem.text.toAnnotatedString
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
sealed interface PinnedMessagesBannerState {
|
sealed interface PinnedMessagesBannerState {
|
||||||
data object Hidden : PinnedMessagesBannerState
|
data object Hidden : PinnedMessagesBannerState
|
||||||
sealed interface Visible : PinnedMessagesBannerState
|
sealed interface Visible : PinnedMessagesBannerState {
|
||||||
|
fun pinnedMessagesCount() = when (this) {
|
||||||
|
is Loading -> expectedPinnedMessagesCount
|
||||||
|
is Loaded -> loadedPinnedMessagesCount
|
||||||
|
}
|
||||||
|
|
||||||
|
fun currentPinnedMessageIndex() = when (this) {
|
||||||
|
is Loading -> expectedPinnedMessagesCount - 1
|
||||||
|
is Loaded -> currentPinnedMessageIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun formattedMessage() = when (this) {
|
||||||
|
is Loading -> stringResource(id = CommonStrings.screen_room_pinned_banner_loading_description).toAnnotatedString()
|
||||||
|
is Loaded -> currentPinnedMessage.formatted
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
data class Loading(val expectedPinnedMessagesCount: Int) : Visible
|
data class Loading(val expectedPinnedMessagesCount: Int) : Visible
|
||||||
data class Loaded(
|
data class Loaded(
|
||||||
val currentPinnedMessage: PinnedMessagesBannerItem,
|
val currentPinnedMessage: PinnedMessagesBannerItem,
|
||||||
|
|
@ -25,23 +41,4 @@ sealed interface PinnedMessagesBannerState {
|
||||||
val loadedPinnedMessagesCount: Int,
|
val loadedPinnedMessagesCount: Int,
|
||||||
val eventSink: (PinnedMessagesBannerEvents) -> Unit
|
val eventSink: (PinnedMessagesBannerEvents) -> Unit
|
||||||
) : Visible
|
) : Visible
|
||||||
|
|
||||||
fun pinnedMessagesCount() = when (this) {
|
|
||||||
is Hidden -> 0
|
|
||||||
is Loading -> expectedPinnedMessagesCount
|
|
||||||
is Loaded -> loadedPinnedMessagesCount
|
|
||||||
}
|
|
||||||
|
|
||||||
fun currentPinnedMessageIndex() = when (this) {
|
|
||||||
is Hidden -> 0
|
|
||||||
is Loading -> expectedPinnedMessagesCount - 1
|
|
||||||
is Loaded -> currentPinnedMessageIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun formattedMessage() = when (this) {
|
|
||||||
is Hidden -> AnnotatedString("")
|
|
||||||
is Loading -> stringResource(id = CommonStrings.screen_room_pinned_banner_loading_description).toAnnotatedString()
|
|
||||||
is Loaded -> currentPinnedMessage.formatted
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ fun PinnedMessagesBannerView(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun PinnedMessagesBannerRow(
|
private fun PinnedMessagesBannerRow(
|
||||||
state: PinnedMessagesBannerState,
|
state: PinnedMessagesBannerState.Visible,
|
||||||
onClick: (EventId) -> Unit,
|
onClick: (EventId) -> Unit,
|
||||||
onViewAllClick: () -> Unit,
|
onViewAllClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class PinnedMessagesBannerPresenterTest {
|
||||||
val presenter = createPinnedMessagesBannerPresenter(room = room)
|
val presenter = createPinnedMessagesBannerPresenter(room = room)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem() as PinnedMessagesBannerState.Loading
|
||||||
assertThat(loadingState).isEqualTo(PinnedMessagesBannerState.Loading(1))
|
assertThat(loadingState).isEqualTo(PinnedMessagesBannerState.Loading(1))
|
||||||
assertThat(loadingState.pinnedMessagesCount()).isEqualTo(1)
|
assertThat(loadingState.pinnedMessagesCount()).isEqualTo(1)
|
||||||
assertThat(loadingState.currentPinnedMessageIndex()).isEqualTo(0)
|
assertThat(loadingState.currentPinnedMessageIndex()).isEqualTo(0)
|
||||||
|
|
@ -167,7 +167,8 @@ class PinnedMessagesBannerPresenterTest {
|
||||||
val presenter = createPinnedMessagesBannerPresenter(room = room)
|
val presenter = createPinnedMessagesBannerPresenter(room = room)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
awaitItem().also { loadingState ->
|
awaitItem().also { state ->
|
||||||
|
val loadingState = state as PinnedMessagesBannerState.Loading
|
||||||
assertThat(loadingState).isEqualTo(PinnedMessagesBannerState.Loading(1))
|
assertThat(loadingState).isEqualTo(PinnedMessagesBannerState.Loading(1))
|
||||||
assertThat(loadingState.pinnedMessagesCount()).isEqualTo(1)
|
assertThat(loadingState.pinnedMessagesCount()).isEqualTo(1)
|
||||||
assertThat(loadingState.currentPinnedMessageIndex()).isEqualTo(0)
|
assertThat(loadingState.currentPinnedMessageIndex()).isEqualTo(0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue