From 6ae0d67e69992a4a6344194f4c3774a714fb2eb5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 28 Oct 2025 20:28:37 +0100 Subject: [PATCH] Add missing tests. --- .../impl/gallery/MediaGalleryPresenterTest.kt | 47 ++++++++++++++++++- .../impl/viewer/MediaViewerPresenterTest.kt | 27 ++++++++++- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenterTest.kt b/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenterTest.kt index f126dab2b5..b09aae5d26 100644 --- a/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenterTest.kt +++ b/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenterTest.kt @@ -345,7 +345,7 @@ class MediaGalleryPresenterTest { } @Test - fun `present - view in timeline invokes the navigator`() = runTest { + fun `present - view in timeline closes the bottom sheet and invokes the navigator`() = runTest { val onViewInTimelineClickLambda = lambdaRecorder { } val navigator = FakeMediaGalleryNavigator( onViewInTimelineClickLambda = onViewInTimelineClickLambda, @@ -353,16 +353,59 @@ class MediaGalleryPresenterTest { val presenter = createMediaGalleryPresenter( room = FakeJoinedRoom( createTimelineResult = { Result.success(FakeTimeline()) }, + baseRoom = FakeBaseRoom( + canRedactOwnResult = { Result.success(true) }, + ), ), navigator = navigator, ) presenter.test { val initialState = awaitFirstItem() - initialState.eventSink(MediaGalleryEvents.ViewInTimeline(AN_EVENT_ID)) + val item = aMediaItemImage( + eventId = AN_EVENT_ID, + senderId = A_USER_ID, + ) + initialState.eventSink(MediaGalleryEvents.OpenInfo(item)) + val withBottomSheetState = awaitItem() + assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java) + withBottomSheetState.eventSink(MediaGalleryEvents.ViewInTimeline(AN_EVENT_ID)) + val finalState = awaitItem() + assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden) onViewInTimelineClickLambda.assertions().isCalledOnce().with(value(AN_EVENT_ID)) } } + @Test + fun `present - forward closes the bottom sheet and invokes the navigator`() = runTest { + val onForwardClickLambda = lambdaRecorder { } + val navigator = FakeMediaGalleryNavigator( + onForwardClickLambda = onForwardClickLambda, + ) + val presenter = createMediaGalleryPresenter( + room = FakeJoinedRoom( + createTimelineResult = { Result.success(FakeTimeline()) }, + baseRoom = FakeBaseRoom( + canRedactOwnResult = { Result.success(true) }, + ), + ), + navigator = navigator, + ) + presenter.test { + val initialState = awaitFirstItem() + val item = aMediaItemImage( + eventId = AN_EVENT_ID, + senderId = A_USER_ID, + ) + initialState.eventSink(MediaGalleryEvents.OpenInfo(item)) + val withBottomSheetState = awaitItem() + assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java) + withBottomSheetState.eventSink(MediaGalleryEvents.Forward(AN_EVENT_ID)) + val finalState = awaitItem() + assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden) + onForwardClickLambda.assertions().isCalledOnce().with(value(AN_EVENT_ID)) + } + } + @Test fun `present - load more`() = runTest { val loadMoreLambda = lambdaRecorder { } diff --git a/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenterTest.kt b/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenterTest.kt index b9964d8d3d..359eda7a5e 100644 --- a/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenterTest.kt +++ b/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenterTest.kt @@ -759,7 +759,7 @@ class MediaViewerPresenterTest { } @Test - fun `present - view in timeline hide the bottom sheet and invokes the navigator`() = runTest { + fun `present - view in timeline hides the bottom sheet and invokes the navigator`() = runTest { val onViewInTimelineClickLambda = lambdaRecorder { } val navigator = FakeMediaViewerNavigator( onViewInTimelineClickLambda = onViewInTimelineClickLambda, @@ -783,6 +783,31 @@ class MediaViewerPresenterTest { } } + @Test + fun `present - forward hides the bottom sheet and invokes the navigator`() = runTest { + val onForwardClickLambda = lambdaRecorder { } + val navigator = FakeMediaViewerNavigator( + onForwardClickLambda = onForwardClickLambda, + ) + val presenter = createMediaViewerPresenter( + localMediaFactory = localMediaFactory, + mediaViewerNavigator = navigator, + room = FakeJoinedRoom( + baseRoom = FakeBaseRoom(canRedactOwnResult = { Result.success(true) }), + ), + ) + presenter.test { + val initialState = awaitItem() + initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData())) + val withBottomSheetState = awaitItem() + assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java) + initialState.eventSink(MediaViewerEvents.Forward(AN_EVENT_ID)) + val finalState = awaitItem() + assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden) + onForwardClickLambda.assertions().isCalledOnce().with(value(AN_EVENT_ID)) + } + } + private suspend fun ReceiveTurbine.awaitFirstItem(): T { return awaitItem() }