MediaViewerEvents -> MediaViewerEvent

This commit is contained in:
Benoit Marty 2026-04-21 15:50:59 +02:00
parent f3dd7b86d8
commit 54efb46294
7 changed files with 97 additions and 97 deletions

View file

@ -11,22 +11,22 @@ package io.element.android.libraries.mediaviewer.impl.viewer
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.timeline.Timeline
sealed interface MediaViewerEvents {
data class LoadMedia(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class SaveOnDisk(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class Share(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class OpenWith(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class ClearLoadingError(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class ViewInTimeline(val eventId: EventId) : MediaViewerEvents
data class Forward(val eventId: EventId) : MediaViewerEvents
data class OpenInfo(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
sealed interface MediaViewerEvent {
data class LoadMedia(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class SaveOnDisk(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class Share(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class OpenWith(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class ClearLoadingError(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class ViewInTimeline(val eventId: EventId) : MediaViewerEvent
data class Forward(val eventId: EventId) : MediaViewerEvent
data class OpenInfo(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class ConfirmDelete(
val eventId: EventId,
val data: MediaViewerPageData.MediaViewerData,
) : MediaViewerEvents
) : MediaViewerEvent
data object CloseBottomSheet : MediaViewerEvents
data class Delete(val eventId: EventId) : MediaViewerEvents
data class OnNavigateTo(val index: Int) : MediaViewerEvents
data class LoadMore(val direction: Timeline.PaginationDirection) : MediaViewerEvents
data object CloseBottomSheet : MediaViewerEvent
data class Delete(val eventId: EventId) : MediaViewerEvent
data class OnNavigateTo(val index: Int) : MediaViewerEvent
data class LoadMore(val direction: Timeline.PaginationDirection) : MediaViewerEvent
}

View file

@ -95,42 +95,42 @@ class MediaViewerPresenter(
}
localMediaActions.Configure()
fun handleEvent(event: MediaViewerEvents) {
fun handleEvent(event: MediaViewerEvent) {
when (event) {
is MediaViewerEvents.LoadMedia -> {
is MediaViewerEvent.LoadMedia -> {
coroutineScope.downloadMedia(data = event.data)
}
is MediaViewerEvents.ClearLoadingError -> {
is MediaViewerEvent.ClearLoadingError -> {
dataSource.clearLoadingError(event.data)
}
is MediaViewerEvents.SaveOnDisk -> {
is MediaViewerEvent.SaveOnDisk -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.saveOnDisk(event.data.downloadedMedia.value)
}
is MediaViewerEvents.Share -> {
is MediaViewerEvent.Share -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.share(event.data.downloadedMedia.value)
}
is MediaViewerEvents.OpenWith -> {
is MediaViewerEvent.OpenWith -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.open(event.data.downloadedMedia.value)
}
is MediaViewerEvents.Delete -> {
is MediaViewerEvent.Delete -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.delete(event.eventId)
}
is MediaViewerEvents.ViewInTimeline -> {
is MediaViewerEvent.ViewInTimeline -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
navigator.onViewInTimelineClick(event.eventId)
}
is MediaViewerEvents.Forward -> {
is MediaViewerEvent.Forward -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
navigator.onForwardClick(
eventId = event.eventId,
fromPinnedEvents = inputs.mode.getTimelineMode() == Timeline.Mode.PinnedEvents,
)
}
is MediaViewerEvents.OpenInfo -> coroutineScope.launch {
is MediaViewerEvent.OpenInfo -> coroutineScope.launch {
mediaBottomSheetState = MediaBottomSheetState.MediaDetailsBottomSheetState(
eventId = event.data.eventId,
canDelete = when (event.data.mediaInfo.senderId) {
@ -142,20 +142,20 @@ class MediaViewerPresenter(
thumbnailSource = event.data.thumbnailSource,
)
}
is MediaViewerEvents.ConfirmDelete -> {
is MediaViewerEvent.ConfirmDelete -> {
mediaBottomSheetState = MediaBottomSheetState.MediaDeleteConfirmationState(
eventId = event.eventId,
mediaInfo = event.data.mediaInfo,
thumbnailSource = event.data.thumbnailSource ?: event.data.mediaSource,
)
}
MediaViewerEvents.CloseBottomSheet -> {
MediaViewerEvent.CloseBottomSheet -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
}
is MediaViewerEvents.OnNavigateTo -> {
is MediaViewerEvent.OnNavigateTo -> {
currentIndex.intValue = event.index
}
is MediaViewerEvents.LoadMore -> coroutineScope.launch {
is MediaViewerEvent.LoadMore -> coroutineScope.launch {
dataSource.loadMore(event.direction)
}
}

View file

@ -26,7 +26,7 @@ data class MediaViewerState(
val snackbarMessage: SnackbarMessage?,
val canShowInfo: Boolean,
val mediaBottomSheetState: MediaBottomSheetState,
val eventSink: (MediaViewerEvents) -> Unit,
val eventSink: (MediaViewerEvent) -> Unit,
)
sealed interface MediaViewerPageData {

View file

@ -226,7 +226,7 @@ fun aMediaViewerState(
currentIndex: Int = 0,
canShowInfo: Boolean = true,
mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden,
eventSink: (MediaViewerEvents) -> Unit = {},
eventSink: (MediaViewerEvent) -> Unit = {},
) = MediaViewerState(
initiallySelectedEventId = EventId("\$a:b"),
listData = listData.toImmutableList(),

View file

@ -126,7 +126,7 @@ fun MediaViewerView(
}
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
state.eventSink(MediaViewerEvents.OnNavigateTo(page))
state.eventSink(MediaViewerEvent.OnNavigateTo(page))
}
}
HorizontalPager(
@ -145,7 +145,7 @@ fun MediaViewerView(
}
is MediaViewerPageData.Loading -> {
LaunchedEffect(dataForPage.timestamp) {
state.eventSink(MediaViewerEvents.LoadMore(dataForPage.direction))
state.eventSink(MediaViewerEvent.LoadMore(dataForPage.direction))
}
MediaViewerLoadingPage(
onDismiss = onBackClick,
@ -154,7 +154,7 @@ fun MediaViewerView(
is MediaViewerPageData.MediaViewerData -> {
var bottomPaddingInPixels by remember { mutableIntStateOf(defaultBottomPaddingInPixels) }
LaunchedEffect(Unit) {
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
state.eventSink(MediaViewerEvent.LoadMedia(dataForPage))
}
Box(
modifier = Modifier.fillMaxSize()
@ -173,10 +173,10 @@ fun MediaViewerView(
textFileViewer = textFileViewer,
onDismiss = onBackClick,
onRetry = {
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
state.eventSink(MediaViewerEvent.LoadMedia(dataForPage))
},
onDismissError = {
state.eventSink(MediaViewerEvents.ClearLoadingError(dataForPage))
state.eventSink(MediaViewerEvent.ClearLoadingError(dataForPage))
},
onShowOverlayChange = {
showOverlay = it
@ -215,7 +215,7 @@ fun MediaViewerView(
canShowInfo = state.canShowInfo,
onBackClick = onBackClick,
onInfoClick = {
state.eventSink(MediaViewerEvents.OpenInfo(currentData))
state.eventSink(MediaViewerEvent.OpenInfo(currentData))
},
eventSink = state.eventSink
)
@ -251,25 +251,25 @@ fun MediaViewerView(
MediaDetailsBottomSheet(
state = bottomSheetState,
onViewInTimeline = {
state.eventSink(MediaViewerEvents.ViewInTimeline(it))
state.eventSink(MediaViewerEvent.ViewInTimeline(it))
},
onShare = {
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
state.eventSink(MediaViewerEvents.Share(currentData))
state.eventSink(MediaViewerEvent.Share(currentData))
}
},
onForward = {
state.eventSink(MediaViewerEvents.Forward(it))
state.eventSink(MediaViewerEvent.Forward(it))
},
onDownload = {
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
state.eventSink(MediaViewerEvents.SaveOnDisk(currentData))
state.eventSink(MediaViewerEvent.SaveOnDisk(currentData))
}
},
onDelete = { eventId ->
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
state.eventSink(
MediaViewerEvents.ConfirmDelete(
MediaViewerEvent.ConfirmDelete(
eventId,
currentData,
)
@ -277,7 +277,7 @@ fun MediaViewerView(
}
},
onDismiss = {
state.eventSink(MediaViewerEvents.CloseBottomSheet)
state.eventSink(MediaViewerEvent.CloseBottomSheet)
},
)
}
@ -285,10 +285,10 @@ fun MediaViewerView(
MediaDeleteConfirmationBottomSheet(
state = bottomSheetState,
onDelete = {
state.eventSink(MediaViewerEvents.Delete(it))
state.eventSink(MediaViewerEvent.Delete(it))
},
onDismiss = {
state.eventSink(MediaViewerEvents.CloseBottomSheet)
state.eventSink(MediaViewerEvent.CloseBottomSheet)
},
)
}
@ -458,7 +458,7 @@ private fun MediaViewerTopBar(
canShowInfo: Boolean,
onBackClick: () -> Unit,
onInfoClick: () -> Unit,
eventSink: (MediaViewerEvents) -> Unit,
eventSink: (MediaViewerEvent) -> Unit,
) {
val downloadedMedia by data.downloadedMedia
val actionsEnabled = downloadedMedia.isSuccess()
@ -500,7 +500,7 @@ private fun MediaViewerTopBar(
IconButton(
enabled = actionsEnabled,
onClick = {
eventSink(MediaViewerEvents.OpenWith(data))
eventSink(MediaViewerEvent.OpenWith(data))
},
) {
when (mimeType) {

View file

@ -226,7 +226,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.LoadMedia(
MediaViewerEvent.LoadMedia(
aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
)
@ -266,7 +266,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.OpenInfo(
MediaViewerEvent.OpenInfo(
aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
)
@ -275,7 +275,7 @@ class MediaViewerPresenterTest {
val withInfoState = awaitItem()
assertThat(withInfoState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
withInfoState.eventSink(
MediaViewerEvents.CloseBottomSheet
MediaViewerEvent.CloseBottomSheet
)
val finalState = awaitItem()
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
@ -306,7 +306,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.ClearLoadingError(
MediaViewerEvent.ClearLoadingError(
aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
)
@ -339,7 +339,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.Share(
MediaViewerEvent.Share(
aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
)
@ -372,7 +372,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.SaveOnDisk(
MediaViewerEvent.SaveOnDisk(
aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
)
@ -405,7 +405,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.OpenWith(
MediaViewerEvent.OpenWith(
aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
)
@ -438,7 +438,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.ConfirmDelete(
MediaViewerEvent.ConfirmDelete(
eventId = AN_EVENT_ID,
data = aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
@ -448,7 +448,7 @@ class MediaViewerPresenterTest {
val withBottomSheetState = awaitItem()
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDeleteConfirmationState::class.java)
withBottomSheetState.eventSink(
MediaViewerEvents.CloseBottomSheet
MediaViewerEvent.CloseBottomSheet
)
val finalState = awaitItem()
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
@ -498,7 +498,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.ConfirmDelete(
MediaViewerEvent.ConfirmDelete(
eventId = AN_EVENT_ID,
data = aMediaViewerPageData(
mediaSource = MediaSource(aUrl)
@ -508,7 +508,7 @@ class MediaViewerPresenterTest {
val withBottomSheetState = awaitItem()
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDeleteConfirmationState::class.java)
updatedState.eventSink(
MediaViewerEvents.Delete(
MediaViewerEvent.Delete(
eventId = AN_EVENT_ID,
)
)
@ -551,7 +551,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.OnNavigateTo(1)
MediaViewerEvent.OnNavigateTo(1)
)
val finalState = awaitItem()
assertThat(finalState.currentIndex).isEqualTo(1)
@ -606,7 +606,7 @@ class MediaViewerPresenterTest {
val updatedState = awaitItem()
// User navigate to the last item (forward loading indicator)
updatedState.eventSink(
MediaViewerEvents.OnNavigateTo(2)
MediaViewerEvent.OnNavigateTo(2)
)
// data source claims that there is no more items to load forward
mediaGalleryDataSource.emitGroupedMediaItems(
@ -680,7 +680,7 @@ class MediaViewerPresenterTest {
val updatedState = awaitItem()
// User navigate to the first item (backward loading indicator)
updatedState.eventSink(
MediaViewerEvents.OnNavigateTo(0)
MediaViewerEvent.OnNavigateTo(0)
)
// data source claims that there is no more items to load backward
mediaGalleryDataSource.emitGroupedMediaItems(
@ -728,7 +728,7 @@ class MediaViewerPresenterTest {
val updatedState = awaitItem()
// User navigate to the media
updatedState.eventSink(
MediaViewerEvents.OnNavigateTo(1)
MediaViewerEvent.OnNavigateTo(1)
)
skipItems(1)
// data source claims that there is no more items to load at all
@ -771,7 +771,7 @@ class MediaViewerPresenterTest {
)
val updatedState = awaitItem()
updatedState.eventSink(
MediaViewerEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)
MediaViewerEvent.LoadMore(Timeline.PaginationDirection.BACKWARDS)
)
loadMoreLambda.assertions().isCalledOnce().with(value(Timeline.PaginationDirection.BACKWARDS))
}
@ -796,10 +796,10 @@ class MediaViewerPresenterTest {
)
presenter.test {
val initialState = awaitItem()
initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData()))
initialState.eventSink(MediaViewerEvent.OpenInfo(aMediaViewerPageData()))
val withBottomSheetState = awaitItem()
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
initialState.eventSink(MediaViewerEvents.ViewInTimeline(AN_EVENT_ID))
initialState.eventSink(MediaViewerEvent.ViewInTimeline(AN_EVENT_ID))
val finalState = awaitItem()
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
onViewInTimelineClickLambda.assertions().isCalledOnce().with(value(AN_EVENT_ID))
@ -825,10 +825,10 @@ class MediaViewerPresenterTest {
)
presenter.test {
val initialState = awaitItem()
initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData()))
initialState.eventSink(MediaViewerEvent.OpenInfo(aMediaViewerPageData()))
val withBottomSheetState = awaitItem()
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
initialState.eventSink(MediaViewerEvents.Forward(AN_EVENT_ID))
initialState.eventSink(MediaViewerEvent.Forward(AN_EVENT_ID))
val finalState = awaitItem()
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
onForwardClickLambda.assertions().isCalledOnce()
@ -856,10 +856,10 @@ class MediaViewerPresenterTest {
)
presenter.test {
val initialState = awaitItem()
initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData()))
initialState.eventSink(MediaViewerEvent.OpenInfo(aMediaViewerPageData()))
val withBottomSheetState = awaitItem()
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
initialState.eventSink(MediaViewerEvents.Forward(AN_EVENT_ID))
initialState.eventSink(MediaViewerEvent.Forward(AN_EVENT_ID))
val finalState = awaitItem()
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
onForwardClickLambda.assertions().isCalledOnce()

View file

@ -43,7 +43,7 @@ class MediaViewerViewTest {
@Test
fun `clicking on back invokes expected callback`() {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
val state = aMediaViewerState(
eventSink = eventsRecorder
)
@ -56,8 +56,8 @@ class MediaViewerViewTest {
}
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
)
)
}
@ -70,7 +70,7 @@ class MediaViewerViewTest {
testMenuAction(
data,
CommonStrings.action_open_with,
MediaViewerEvents.OpenWith(data),
MediaViewerEvent.OpenWith(data),
)
}
@ -82,16 +82,16 @@ class MediaViewerViewTest {
testMenuAction(
data,
CommonStrings.a11y_view_details,
MediaViewerEvents.OpenInfo(data),
MediaViewerEvent.OpenInfo(data),
)
}
private fun testMenuAction(
data: MediaViewerPageData.MediaViewerData,
contentDescriptionRes: Int,
expectedEvent: MediaViewerEvents,
expectedEvent: MediaViewerEvent,
) {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
rule.setMediaViewerView(
aMediaViewerState(
listData = listOf(data),
@ -102,8 +102,8 @@ class MediaViewerViewTest {
rule.onNodeWithContentDescription(contentDescription).performClick()
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(data),
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(data),
expectedEvent,
)
)
@ -116,7 +116,7 @@ class MediaViewerViewTest {
testBottomSheetAction(
data,
CommonStrings.action_save,
MediaViewerEvents.SaveOnDisk(data),
MediaViewerEvent.SaveOnDisk(data),
)
}
@ -127,16 +127,16 @@ class MediaViewerViewTest {
testBottomSheetAction(
data,
CommonStrings.action_share,
MediaViewerEvents.Share(data),
MediaViewerEvent.Share(data),
)
}
private fun testBottomSheetAction(
data: MediaViewerPageData.MediaViewerData,
contentDescriptionRes: Int,
expectedEvent: MediaViewerEvents,
expectedEvent: MediaViewerEvent,
) {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
rule.setMediaViewerView(
aMediaViewerState(
listData = listOf(data),
@ -147,8 +147,8 @@ class MediaViewerViewTest {
rule.clickOn(contentDescriptionRes)
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(data),
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(data),
expectedEvent,
)
)
@ -156,7 +156,7 @@ class MediaViewerViewTest {
@Test
fun `clicking on image hides the overlay`() {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
val state = aMediaViewerState(
eventSink = eventsRecorder
)
@ -176,15 +176,15 @@ class MediaViewerViewTest {
.assertDoesNotExist()
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
)
)
}
@Test
fun `clicking swipe on the image invokes the expected callback`() {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
val state = aMediaViewerState(
eventSink = eventsRecorder
)
@ -199,15 +199,15 @@ class MediaViewerViewTest {
}
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
)
)
}
@Test
fun `error case, click on retry emits the expected Event`() {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
val data = aMediaViewerPageData(
downloadedMedia = AsyncData.Failure(IllegalStateException("error")),
)
@ -220,16 +220,16 @@ class MediaViewerViewTest {
rule.clickOn(CommonStrings.action_retry)
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(data),
MediaViewerEvents.LoadMedia(data),
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(data),
MediaViewerEvent.LoadMedia(data),
)
)
}
@Test
fun `error case, click on cancel emits the expected Event`() {
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
val data = aMediaViewerPageData(
downloadedMedia = AsyncData.Failure(IllegalStateException("error")),
)
@ -242,9 +242,9 @@ class MediaViewerViewTest {
rule.clickOn(CommonStrings.action_cancel)
eventsRecorder.assertList(
listOf(
MediaViewerEvents.OnNavigateTo(0),
MediaViewerEvents.LoadMedia(data),
MediaViewerEvents.ClearLoadingError(data)
MediaViewerEvent.OnNavigateTo(0),
MediaViewerEvent.LoadMedia(data),
MediaViewerEvent.ClearLoadingError(data)
)
)
}