From 2e6671955977bb91d92c815de12c151780da517a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 23 Nov 2023 18:07:56 +0100 Subject: [PATCH 1/3] Move test to `impl` sub package and optimize imports. --- .../{ => impl}/FakeMessagesNavigator.kt | 3 +-- .../{ => impl}/MessagesPresenterTest.kt | 19 ++++++++----------- .../actionlist/ActionListPresenterTest.kt | 7 ++----- .../AttachmentsPreviewPresenterTest.kt | 5 ++--- .../{ => impl}/fixtures/aMessageEvent.kt | 2 +- .../messages/{ => impl}/fixtures/media.kt | 2 +- .../fixtures/timelineItemsFactory.kt | 2 +- .../forward/ForwardMessagesPresenterTests.kt | 4 +--- .../{ => impl}/media/FakeLocalMediaActions.kt | 2 +- .../{ => impl}/media/FakeLocalMediaFactory.kt | 4 ++-- .../media/viewer/MediaViewerPresenterTest.kt | 9 +++------ .../FakeMessageSummaryFormatter.kt | 2 +- .../report/ReportMessagePresenterTests.kt | 4 +--- .../MessageComposerPresenterTest.kt | 4 ++-- .../TestRichTextEditorStateFactory.kt | 2 +- .../timeline/TimelinePresenterTest.kt | 14 ++++++-------- .../CustomReactionPresenterTests.kt | 5 +---- .../customreaction/FakeEmojibaseProvider.kt | 3 +-- .../ReactionSummaryPresenterTests.kt | 4 +--- .../ReadReceiptBottomSheetPresenterTests.kt | 4 +--- .../RetrySendMenuPresenterTests.kt | 4 +--- .../TimelineItemContentPollFactoryTest.kt | 3 +-- .../groups/TimelineItemGrouperTest.kt | 6 ++---- .../timeline/model/AggregatedReactionTest.kt | 3 +-- .../timeline/model/InReplyToDetailTest.kt | 3 +-- .../VoiceMessageComposerPresenterTest.kt | 8 ++------ .../DefaultVoiceMessageMediaRepoTest.kt | 3 +-- .../timeline/DefaultVoiceMessagePlayerTest.kt | 5 +---- .../FakeRedactedVoiceMessageManager.kt | 3 +-- .../timeline/FakeVoiceMessageMediaRepo.kt | 3 +-- .../RedactedVoiceMessageManagerTest.kt | 3 +-- .../timeline/VoiceMessagePresenterTest.kt | 7 +------ 32 files changed, 52 insertions(+), 100 deletions(-) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/FakeMessagesNavigator.kt (92%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/MessagesPresenterTest.kt (97%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/actionlist/ActionListPresenterTest.kt (98%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/attachments/AttachmentsPreviewPresenterTest.kt (96%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/fixtures/aMessageEvent.kt (98%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/fixtures/media.kt (95%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/fixtures/timelineItemsFactory.kt (98%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/forward/ForwardMessagesPresenterTests.kt (97%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/media/FakeLocalMediaActions.kt (96%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/media/FakeLocalMediaFactory.kt (94%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/media/viewer/MediaViewerPresenterTest.kt (93%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{utils => impl}/messagesummary/FakeMessageSummaryFormatter.kt (93%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/report/ReportMessagePresenterTests.kt (96%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/textcomposer/MessageComposerPresenterTest.kt (99%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/textcomposer/TestRichTextEditorStateFactory.kt (94%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/TimelinePresenterTest.kt (96%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/components/customreaction/CustomReactionPresenterTests.kt (89%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/components/customreaction/FakeEmojibaseProvider.kt (81%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt (92%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt (87%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt (95%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/factories/event/TimelineItemContentPollFactoryTest.kt (98%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/groups/TimelineItemGrouperTest.kt (95%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/model/AggregatedReactionTest.kt (89%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/timeline/model/InReplyToDetailTest.kt (96%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/composer/VoiceMessageComposerPresenterTest.kt (98%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt (97%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt (97%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt (86%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt (87%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt (95%) rename features/messages/impl/src/test/kotlin/io/element/android/features/messages/{ => impl}/voicemessages/timeline/VoiceMessagePresenterTest.kt (94%) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/FakeMessagesNavigator.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/FakeMessagesNavigator.kt similarity index 92% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/FakeMessagesNavigator.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/FakeMessagesNavigator.kt index bb2caa9405..a1666b40e0 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/FakeMessagesNavigator.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/FakeMessagesNavigator.kt @@ -14,9 +14,8 @@ * limitations under the License. */ -package io.element.android.features.messages +package io.element.android.features.messages.impl -import io.element.android.features.messages.impl.MessagesNavigator import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt similarity index 97% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/MessagesPresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 0ecb148f99..1f7aab637a 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages +package io.element.android.features.messages.impl import android.net.Uri import app.cash.molecule.RecompositionMode @@ -22,18 +22,19 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import im.vector.app.features.analytics.plan.PollEnd -import io.element.android.features.messages.fixtures.aMessageEvent -import io.element.android.features.messages.fixtures.aTimelineItemsFactory -import io.element.android.features.messages.impl.InviteDialogAction -import io.element.android.features.messages.impl.MessagesEvents -import io.element.android.features.messages.impl.MessagesPresenter import io.element.android.features.messages.impl.actionlist.ActionListPresenter import io.element.android.features.messages.impl.actionlist.ActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction +import io.element.android.features.messages.impl.fixtures.aMessageEvent +import io.element.android.features.messages.impl.fixtures.aTimelineItemsFactory +import io.element.android.features.messages.impl.media.FakeLocalMediaFactory import io.element.android.features.messages.impl.messagecomposer.MessageComposerContextImpl import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter +import io.element.android.features.messages.impl.messagesummary.FakeMessageSummaryFormatter +import io.element.android.features.messages.impl.textcomposer.TestRichTextEditorStateFactory import io.element.android.features.messages.impl.timeline.TimelinePresenter import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionPresenter +import io.element.android.features.messages.impl.timeline.components.customreaction.FakeEmojibaseProvider import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryPresenter import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetPresenter import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuPresenter @@ -44,12 +45,8 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemPollContent import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPlayer import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPresenter -import io.element.android.features.messages.media.FakeLocalMediaFactory +import io.element.android.features.messages.impl.voicemessages.timeline.FakeRedactedVoiceMessageManager import io.element.android.features.messages.test.FakeMessageComposerContext -import io.element.android.features.messages.textcomposer.TestRichTextEditorStateFactory -import io.element.android.features.messages.timeline.components.customreaction.FakeEmojibaseProvider -import io.element.android.features.messages.utils.messagesummary.FakeMessageSummaryFormatter -import io.element.android.features.messages.voicemessages.timeline.FakeRedactedVoiceMessageManager import io.element.android.features.networkmonitor.test.FakeNetworkMonitor import io.element.android.libraries.androidutils.clipboard.FakeClipboardHelper import io.element.android.libraries.architecture.Async diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/actionlist/ActionListPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt similarity index 98% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/actionlist/ActionListPresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt index 1cdba992a2..c462a1eae9 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/actionlist/ActionListPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt @@ -14,17 +14,14 @@ * limitations under the License. */ -package io.element.android.features.messages.actionlist +package io.element.android.features.messages.impl.actionlist import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.fixtures.aMessageEvent -import io.element.android.features.messages.impl.actionlist.ActionListEvents -import io.element.android.features.messages.impl.actionlist.ActionListPresenter -import io.element.android.features.messages.impl.actionlist.ActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction +import io.element.android.features.messages.impl.fixtures.aMessageEvent import io.element.android.features.messages.impl.timeline.aTimelineItemEvent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextContent diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/attachments/AttachmentsPreviewPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt similarity index 96% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/attachments/AttachmentsPreviewPresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt index 22f28f21d0..07d6963441 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/attachments/AttachmentsPreviewPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt @@ -16,18 +16,17 @@ @file:OptIn(ExperimentalCoroutinesApi::class) -package io.element.android.features.messages.attachments +package io.element.android.features.messages.impl.attachments import android.net.Uri import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.fixtures.aLocalMedia -import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.preview.AttachmentsPreviewEvents import io.element.android.features.messages.impl.attachments.preview.AttachmentsPreviewPresenter import io.element.android.features.messages.impl.attachments.preview.SendActionState +import io.element.android.features.messages.impl.fixtures.aLocalMedia import io.element.android.features.messages.impl.media.local.LocalMedia import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.test.room.FakeMatrixRoom diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/aMessageEvent.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/aMessageEvent.kt similarity index 98% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/aMessageEvent.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/aMessageEvent.kt index 7d87830605..4e21c001b8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/aMessageEvent.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/aMessageEvent.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.fixtures +package io.element.android.features.messages.impl.fixtures import io.element.android.features.messages.impl.timeline.aTimelineItemReactions import io.element.android.features.messages.impl.timeline.model.InReplyToDetails diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/media.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/media.kt similarity index 95% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/media.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/media.kt index 00701c0a75..ad1afc1af7 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/media.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/media.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.fixtures +package io.element.android.features.messages.impl.fixtures import android.net.Uri import io.element.android.features.messages.impl.attachments.Attachment diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/timelineItemsFactory.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/timelineItemsFactory.kt similarity index 98% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/timelineItemsFactory.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/timelineItemsFactory.kt index 972f105a4a..18ecb4aea9 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/timelineItemsFactory.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/timelineItemsFactory.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.fixtures +package io.element.android.features.messages.impl.fixtures import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactory import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemContentFactory diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/forward/ForwardMessagesPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt similarity index 97% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/forward/ForwardMessagesPresenterTests.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt index c3a70deac6..cdfd100d84 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/forward/ForwardMessagesPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt @@ -14,14 +14,12 @@ * limitations under the License. */ -package io.element.android.features.messages.forward +package io.element.android.features.messages.impl.forward import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.impl.forward.ForwardMessagesEvents -import io.element.android.features.messages.impl.forward.ForwardMessagesPresenter import io.element.android.libraries.designsystem.theme.components.SearchBarResultState import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.roomlist.RoomSummary diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaActions.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/FakeLocalMediaActions.kt similarity index 96% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaActions.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/FakeLocalMediaActions.kt index 5bdef5f9b1..351bb6aeca 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaActions.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/FakeLocalMediaActions.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.media +package io.element.android.features.messages.impl.media import androidx.compose.runtime.Composable import io.element.android.features.messages.impl.media.local.LocalMedia diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaFactory.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/FakeLocalMediaFactory.kt similarity index 94% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaFactory.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/FakeLocalMediaFactory.kt index b5efdaf77d..724c6e7f55 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaFactory.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/FakeLocalMediaFactory.kt @@ -14,10 +14,10 @@ * limitations under the License. */ -package io.element.android.features.messages.media +package io.element.android.features.messages.impl.media import android.net.Uri -import io.element.android.features.messages.fixtures.aLocalMedia +import io.element.android.features.messages.impl.fixtures.aLocalMedia import io.element.android.features.messages.impl.media.local.LocalMedia import io.element.android.features.messages.impl.media.local.LocalMediaFactory import io.element.android.features.messages.impl.media.local.MediaInfo diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/viewer/MediaViewerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerPresenterTest.kt similarity index 93% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/viewer/MediaViewerPresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerPresenterTest.kt index 79c865ce92..dfd648bd22 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/viewer/MediaViewerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerPresenterTest.kt @@ -16,19 +16,16 @@ @file:OptIn(ExperimentalCoroutinesApi::class) -package io.element.android.features.messages.media.viewer +package io.element.android.features.messages.impl.media.viewer import android.net.Uri import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.features.messages.impl.media.FakeLocalMediaActions +import io.element.android.features.messages.impl.media.FakeLocalMediaFactory import io.element.android.features.messages.impl.media.local.aFileInfo -import io.element.android.features.messages.impl.media.viewer.MediaViewerEvents -import io.element.android.features.messages.impl.media.viewer.MediaViewerNode -import io.element.android.features.messages.impl.media.viewer.MediaViewerPresenter -import io.element.android.features.messages.media.FakeLocalMediaActions -import io.element.android.features.messages.media.FakeLocalMediaFactory import io.element.android.libraries.architecture.Async import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.matrix.test.media.FakeMediaLoader diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/utils/messagesummary/FakeMessageSummaryFormatter.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagesummary/FakeMessageSummaryFormatter.kt similarity index 93% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/utils/messagesummary/FakeMessageSummaryFormatter.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagesummary/FakeMessageSummaryFormatter.kt index 3f8205e555..16f262c965 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/utils/messagesummary/FakeMessageSummaryFormatter.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagesummary/FakeMessageSummaryFormatter.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.utils.messagesummary +package io.element.android.features.messages.impl.messagesummary import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.utils.messagesummary.MessageSummaryFormatter diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/report/ReportMessagePresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenterTests.kt similarity index 96% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/report/ReportMessagePresenterTests.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenterTests.kt index 94b971f300..d09feaf49f 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/report/ReportMessagePresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenterTests.kt @@ -14,14 +14,12 @@ * limitations under the License. */ -package io.element.android.features.messages.report +package io.element.android.features.messages.impl.report import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.impl.report.ReportMessageEvents -import io.element.android.features.messages.impl.report.ReportMessagePresenter import io.element.android.libraries.architecture.Async import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.matrix.api.room.MatrixRoom diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/textcomposer/MessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt similarity index 99% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/textcomposer/MessageComposerPresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt index a48f55d120..02b5b12f2e 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/textcomposer/MessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt @@ -16,7 +16,7 @@ @file:OptIn(ExperimentalCoroutinesApi::class) -package io.element.android.features.messages.textcomposer +package io.element.android.features.messages.impl.textcomposer import android.net.Uri import androidx.compose.runtime.remember @@ -26,13 +26,13 @@ import app.cash.turbine.ReceiveTurbine import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import im.vector.app.features.analytics.plan.Composer +import io.element.android.features.messages.impl.media.FakeLocalMediaFactory import io.element.android.features.messages.impl.mentions.MentionSuggestion import io.element.android.features.messages.impl.messagecomposer.AttachmentsState import io.element.android.features.messages.impl.messagecomposer.MessageComposerContextImpl import io.element.android.features.messages.impl.messagecomposer.MessageComposerEvents import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter import io.element.android.features.messages.impl.messagecomposer.MessageComposerState -import io.element.android.features.messages.media.FakeLocalMediaFactory import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.featureflag.api.FeatureFlagService diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/textcomposer/TestRichTextEditorStateFactory.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/TestRichTextEditorStateFactory.kt similarity index 94% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/textcomposer/TestRichTextEditorStateFactory.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/TestRichTextEditorStateFactory.kt index 762d144cd6..17e1c65daf 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/textcomposer/TestRichTextEditorStateFactory.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/TestRichTextEditorStateFactory.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.textcomposer +package io.element.android.features.messages.impl.textcomposer import androidx.compose.runtime.Composable import io.element.android.features.messages.impl.messagecomposer.RichTextEditorStateFactory diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt similarity index 96% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 15ec930d2e..83fb402a7f 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline +package io.element.android.features.messages.impl.timeline import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow @@ -22,17 +22,15 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import im.vector.app.features.analytics.plan.PollEnd import im.vector.app.features.analytics.plan.PollVote -import io.element.android.features.messages.fixtures.aMessageEvent -import io.element.android.features.messages.fixtures.aTimelineItemsFactory -import io.element.android.features.messages.impl.timeline.TimelineEvents -import io.element.android.features.messages.impl.timeline.TimelinePresenter +import io.element.android.features.messages.impl.fixtures.aMessageEvent +import io.element.android.features.messages.impl.fixtures.aTimelineItemsFactory import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactory import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.session.SessionState -import io.element.android.libraries.featureflag.test.FakeFeatureFlagService +import io.element.android.features.messages.impl.voicemessages.timeline.FakeRedactedVoiceMessageManager import io.element.android.features.messages.impl.voicemessages.timeline.RedactedVoiceMessageManager -import io.element.android.features.messages.voicemessages.timeline.FakeRedactedVoiceMessageManager -import io.element.android.features.messages.voicemessages.timeline.aRedactedMatrixTimeline +import io.element.android.features.messages.impl.voicemessages.timeline.aRedactedMatrixTimeline +import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.MatrixTimeline import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/customreaction/CustomReactionPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenterTests.kt similarity index 89% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/customreaction/CustomReactionPresenterTests.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenterTests.kt index 40912c0cc0..a6ef642672 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/customreaction/CustomReactionPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenterTests.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.components.customreaction +package io.element.android.features.messages.impl.timeline.components.customreaction import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow @@ -22,9 +22,6 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.messages.impl.timeline.aTimelineItemEvent import io.element.android.features.messages.impl.timeline.aTimelineItemReactions -import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents -import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionPresenter -import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.tests.testutils.WarmUpRule import kotlinx.coroutines.test.runTest diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/customreaction/FakeEmojibaseProvider.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/FakeEmojibaseProvider.kt similarity index 81% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/customreaction/FakeEmojibaseProvider.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/FakeEmojibaseProvider.kt index 7bf993e2a4..96513c8ab7 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/customreaction/FakeEmojibaseProvider.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/FakeEmojibaseProvider.kt @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.components.customreaction +package io.element.android.features.messages.impl.timeline.components.customreaction import io.element.android.emojibasebindings.EmojibaseStore -import io.element.android.features.messages.impl.timeline.components.customreaction.EmojibaseProvider class FakeEmojibaseProvider: EmojibaseProvider { override val emojibaseStore: EmojibaseStore diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt similarity index 92% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt index 7b18d890df..080dfaeba6 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenterTests.kt @@ -14,14 +14,12 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.components.reactionsummary +package io.element.android.features.messages.impl.timeline.components.reactionsummary import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents -import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryPresenter import io.element.android.features.messages.impl.timeline.model.anAggregatedReaction import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.test.AN_AVATAR_URL diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt similarity index 87% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt index 248fcad399..ef98e3b3d9 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenterTests.kt @@ -14,15 +14,13 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.components.receipt.bottomsheet +package io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.messages.impl.timeline.aTimelineItemEvent -import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents -import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetPresenter import io.element.android.tests.testutils.WarmUpRule import kotlinx.coroutines.test.runTest import org.junit.Rule diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt similarity index 95% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt index 011db1f038..4278679297 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuPresenterTests.kt @@ -14,15 +14,13 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.components.retrysendmenu +package io.element.android.features.messages.impl.timeline.components.retrysendmenu import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.messages.impl.timeline.aTimelineItemEvent -import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuEvents -import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuPresenter import io.element.android.libraries.matrix.test.A_TRANSACTION_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.tests.testutils.WarmUpRule diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/factories/event/TimelineItemContentPollFactoryTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactoryTest.kt similarity index 98% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/factories/event/TimelineItemContentPollFactoryTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactoryTest.kt index 8cf5704bba..d6673b4770 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/factories/event/TimelineItemContentPollFactoryTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactoryTest.kt @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.factories.event +package io.element.android.features.messages.impl.timeline.factories.event import com.google.common.truth.Truth -import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemContentPollFactory import io.element.android.features.messages.impl.timeline.model.event.TimelineItemPollContent import io.element.android.features.poll.api.PollAnswerItem import io.element.android.libraries.featureflag.api.FeatureFlags diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/groups/TimelineItemGrouperTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt similarity index 95% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/groups/TimelineItemGrouperTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt index e8a8eb30cf..d3440cb88b 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/groups/TimelineItemGrouperTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt @@ -14,13 +14,11 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.groups +package io.element.android.features.messages.impl.timeline.groups import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.fixtures.aMessageEvent +import io.element.android.features.messages.impl.fixtures.aMessageEvent import io.element.android.features.messages.impl.timeline.aTimelineItemReactions -import io.element.android.features.messages.impl.timeline.groups.TimelineItemGrouper -import io.element.android.features.messages.impl.timeline.groups.computeGroupIdWith import io.element.android.features.messages.impl.timeline.model.ReadReceiptData import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItemReadReceipts diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/model/AggregatedReactionTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/AggregatedReactionTest.kt similarity index 89% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/model/AggregatedReactionTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/AggregatedReactionTest.kt index ce107f76aa..e804d2b82a 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/model/AggregatedReactionTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/AggregatedReactionTest.kt @@ -14,9 +14,8 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.model +package io.element.android.features.messages.impl.timeline.model -import io.element.android.features.messages.impl.timeline.model.anAggregatedReaction import org.junit.Assert.assertEquals import org.junit.Test diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/model/InReplyToDetailTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt similarity index 96% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/model/InReplyToDetailTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt index 20b18a066b..33a88cb741 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/model/InReplyToDetailTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.element.android.features.messages.timeline.model +package io.element.android.features.messages.impl.timeline.model import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.impl.timeline.model.map import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/composer/VoiceMessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt similarity index 98% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/composer/VoiceMessageComposerPresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt index 4ec1432377..4a659f4ce3 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/composer/VoiceMessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt @@ -16,7 +16,7 @@ @file:OptIn(ExperimentalCoroutinesApi::class) -package io.element.android.features.messages.voicemessages.composer +package io.element.android.features.messages.impl.voicemessages.composer import android.Manifest import androidx.lifecycle.Lifecycle @@ -27,10 +27,6 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import im.vector.app.features.analytics.plan.Composer import io.element.android.features.messages.impl.voicemessages.VoiceMessageException -import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerEvents -import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPlayer -import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPresenter -import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerState import io.element.android.features.messages.test.FakeMessageComposerContext import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.A_MESSAGE @@ -44,8 +40,8 @@ import io.element.android.libraries.permissions.api.aPermissionsState import io.element.android.libraries.permissions.test.FakePermissionsPresenter import io.element.android.libraries.permissions.test.FakePermissionsPresenterFactory import io.element.android.libraries.textcomposer.model.MessageComposerMode -import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent import io.element.android.libraries.textcomposer.model.VoiceMessagePlayerEvent +import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent import io.element.android.libraries.textcomposer.model.VoiceMessageState import io.element.android.libraries.voicerecorder.test.FakeVoiceRecorder import io.element.android.services.analytics.test.FakeAnalyticsService diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt similarity index 97% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt index 152090b14c..d9587b5e9b 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/DefaultVoiceMessageMediaRepoTest.kt @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.element.android.features.messages.voicemessages.timeline +package io.element.android.features.messages.impl.voicemessages.timeline import com.google.common.truth.Truth -import io.element.android.features.messages.impl.voicemessages.timeline.DefaultVoiceMessageMediaRepo import io.element.android.libraries.matrix.api.media.MatrixMediaLoader import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.test.media.FakeMediaLoader diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt similarity index 97% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt index e989a07b15..23830fdf39 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/DefaultVoiceMessagePlayerTest.kt @@ -14,14 +14,11 @@ * limitations under the License. */ -package io.element.android.features.messages.voicemessages.timeline +package io.element.android.features.messages.impl.voicemessages.timeline import app.cash.turbine.TurbineTestContext import app.cash.turbine.test import com.google.common.truth.Truth -import io.element.android.features.messages.impl.voicemessages.timeline.DefaultVoiceMessagePlayer -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessageMediaRepo -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessagePlayer import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.test.AN_EVENT_ID diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt similarity index 86% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt index 0ff58d7728..589847a3af 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/FakeRedactedVoiceMessageManager.kt @@ -14,9 +14,8 @@ * limitations under the License. */ -package io.element.android.features.messages.voicemessages.timeline +package io.element.android.features.messages.impl.voicemessages.timeline -import io.element.android.features.messages.impl.voicemessages.timeline.RedactedVoiceMessageManager import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem class FakeRedactedVoiceMessageManager : RedactedVoiceMessageManager { diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt similarity index 87% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt index 198b65e445..3fdef7eae8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/FakeVoiceMessageMediaRepo.kt @@ -14,9 +14,8 @@ * limitations under the License. */ -package io.element.android.features.messages.voicemessages.timeline +package io.element.android.features.messages.impl.voicemessages.timeline -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessageMediaRepo import io.element.android.tests.testutils.simulateLongTask import java.io.File diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt similarity index 95% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt index ccf3d4aa92..644f1fe231 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.element.android.features.messages.voicemessages.timeline +package io.element.android.features.messages.impl.voicemessages.timeline import com.google.common.truth.Truth -import io.element.android.features.messages.impl.voicemessages.timeline.DefaultRedactedVoiceMessageManager import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/VoiceMessagePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenterTest.kt similarity index 94% rename from features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/VoiceMessagePresenterTest.kt rename to features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenterTest.kt index 00c8cd1f70..299e27ced2 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/voicemessages/timeline/VoiceMessagePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenterTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.messages.voicemessages.timeline +package io.element.android.features.messages.impl.voicemessages.timeline import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow @@ -23,11 +23,6 @@ import com.google.common.truth.Truth import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemVoiceContent import io.element.android.features.messages.impl.voicemessages.VoiceMessageException -import io.element.android.features.messages.impl.voicemessages.timeline.DefaultVoiceMessagePlayer -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessageEvents -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessageMediaRepo -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessagePresenter -import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessageState import io.element.android.libraries.mediaplayer.test.FakeMediaPlayer import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.test.FakeAnalyticsService From 73a062451c089325d58e4c1233c60a07082aa879 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 23 Nov 2023 20:18:28 +0100 Subject: [PATCH 2/3] Remove `UnknownMessageType`, should be handled by `OtherMessageType` now. --- .../event/TimelineItemContentMessageFactory.kt | 8 -------- .../impl/DefaultRoomLastMessageFormatter.kt | 6 ------ .../DefaultRoomLastMessageFormatterTest.kt | 16 +++------------- .../api/timeline/item/event/MessageType.kt | 2 -- .../timeline/item/event/EventMessageMapper.kt | 4 +--- .../notifications/NotifiableEventResolver.kt | 2 -- .../NotifiableEventResolverTest.kt | 18 ------------------ 7 files changed, 4 insertions(+), 52 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index 58d4a23cf2..9fda8b8548 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -42,7 +42,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MessageConten import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType -import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.ui.messages.toHtmlDocument @@ -174,13 +173,6 @@ class TimelineItemContentMessageFactory @Inject constructor( htmlDocument = null, isEdited = content.isEdited, ) - UnknownMessageType -> TimelineItemTextContent( - // Display the body as a fallback, but should not happen anymore - // (we have `OtherMessageType` now) - body = content.body, - htmlDocument = null, - isEdited = content.isEdited, - ) } } diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt index d60802b471..2dcb19cc43 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt @@ -48,7 +48,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent -import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.ui.messages.toPlainText @@ -138,11 +137,6 @@ class DefaultRoomLastMessageFormatter @Inject constructor( is OtherMessageType -> { messageType.body } - UnknownMessageType -> { - // Display the body as a fallback, but should not happen anymore - // (we have `OtherMessageType` now) - messageContent.body - } is NoticeMessageType -> { messageType.body } diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt index f7b98626e6..8eed121568 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt @@ -45,7 +45,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent -import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.test.A_USER_ID @@ -170,6 +169,7 @@ class DefaultRoomLastMessageFormatterTest { LocationMessageType(body, "geo:1,2", null), NoticeMessageType(body, null), EmoteMessageType(body, null), + OtherMessageType(msgType = "a_type", body = body), ) val senderName = "Someone" val resultsInRoom = mutableListOf>() @@ -187,13 +187,6 @@ class DefaultRoomLastMessageFormatterTest { resultsInRoom.add(type to result) } } - val unknownMessage = createRoomEvent(sentByYou = false, senderDisplayName = "Someone", content = createMessageContent(UnknownMessageType)) - val result = UnknownMessageType to formatter.format(unknownMessage, isDmRoom = isDm) - if (isDm) { - resultsInDm.add(result) - } else { - resultsInRoom.add(result) - } } // Verify results of DM mode @@ -208,8 +201,7 @@ class DefaultRoomLastMessageFormatterTest { is EmoteMessageType -> "* $senderName ${type.body}" is TextMessageType, is NoticeMessageType, - is OtherMessageType, - UnknownMessageType -> body + is OtherMessageType -> body } Truth.assertWithMessage("$type was not properly handled for DM").that(result).isEqualTo(expectedResult) } @@ -226,8 +218,7 @@ class DefaultRoomLastMessageFormatterTest { is LocationMessageType -> "$senderName: Shared location" is TextMessageType, is NoticeMessageType, - is OtherMessageType, - UnknownMessageType -> "$senderName: $body" + is OtherMessageType -> "$senderName: $body" is EmoteMessageType -> "* $senderName ${type.body}" } val shouldCreateAnnotatedString = when (type) { @@ -240,7 +231,6 @@ class DefaultRoomLastMessageFormatterTest { is EmoteMessageType -> false is TextMessageType, is NoticeMessageType -> true is OtherMessageType -> true - UnknownMessageType -> true } if (shouldCreateAnnotatedString) { Truth.assertWithMessage("$type doesn't produce an AnnotatedString") diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageType.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageType.kt index c8122935bd..14c2302def 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageType.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageType.kt @@ -25,8 +25,6 @@ import io.element.android.libraries.matrix.api.media.VideoInfo sealed interface MessageType -data object UnknownMessageType : MessageType - data class EmoteMessageType( val body: String, val formatted: FormattedBody? diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt index 7f88cc0569..4f19a5c40f 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt @@ -30,7 +30,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MessageFormat import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType -import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.impl.media.map @@ -76,7 +75,7 @@ class EventMessageMapper { ) } - fun mapMessageType(type: RustMessageType?) = when (type) { + fun mapMessageType(type: RustMessageType) = when (type) { is RustMessageType.Audio -> { when (type.content.voice) { null -> { @@ -120,7 +119,6 @@ class EventMessageMapper { is MessageType.Other -> { OtherMessageType(type.msgtype, type.body) } - null -> UnknownMessageType } } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt index 8474e9a045..9093b36615 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt @@ -34,7 +34,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessa import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType -import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.ui.messages.toPlainText @@ -222,7 +221,6 @@ class NotifiableEventResolver @Inject constructor( is VideoMessageType -> messageType.body is LocationMessageType -> messageType.body is OtherMessageType -> messageType.body - is UnknownMessageType -> stringProvider.getString(CommonStrings.common_unsupported_event) } } diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt index 9e18f225b8..819a1e94a2 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt @@ -29,7 +29,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageT import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType -import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.test.AN_EVENT_ID @@ -234,23 +233,6 @@ class NotifiableEventResolverTest { assertThat(result).isEqualTo(expectedResult) } - @Test - fun `resolve event message unknown`() = runTest { - val sut = createNotifiableEventResolver( - notificationResult = Result.success( - createNotificationData( - content = NotificationContent.MessageLike.RoomMessage( - senderId = A_USER_ID_2, - messageType = UnknownMessageType, - ) - ) - ) - ) - val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID) - val expectedResult = createNotifiableMessageEvent(body = "Unsupported event") - assertThat(result).isEqualTo(expectedResult) - } - @Test fun `resolve poll`() = runTest { val sut = createNotifiableEventResolver( From c10525bbc1e070d42921bb4c1da8f78078deeeae Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 23 Nov 2023 20:16:11 +0100 Subject: [PATCH 3/3] Add test for TimelineItemContentMessageFactory --- .../TimelineItemContentMessageFactoryTest.kt | 501 ++++++++++++++++++ 1 file changed, 501 insertions(+) create mode 100644 features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt new file mode 100644 index 0000000000..e695107e10 --- /dev/null +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt @@ -0,0 +1,501 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.factories.event + +import com.google.common.truth.Truth.assertThat +import io.element.android.features.location.api.Location +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEmoteContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemImageContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemNoticeContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent +import io.element.android.features.messages.impl.timeline.util.FileExtensionExtractorWithoutValidation +import io.element.android.libraries.androidutils.filesize.FakeFileSizeFormatter +import io.element.android.libraries.core.mimetype.MimeTypes +import io.element.android.libraries.featureflag.api.FeatureFlagService +import io.element.android.libraries.featureflag.api.FeatureFlags +import io.element.android.libraries.featureflag.test.FakeFeatureFlagService +import io.element.android.libraries.matrix.api.media.AudioDetails +import io.element.android.libraries.matrix.api.media.AudioInfo +import io.element.android.libraries.matrix.api.media.FileInfo +import io.element.android.libraries.matrix.api.media.ImageInfo +import io.element.android.libraries.matrix.api.media.MediaSource +import io.element.android.libraries.matrix.api.media.ThumbnailInfo +import io.element.android.libraries.matrix.api.media.VideoInfo +import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo +import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent +import io.element.android.libraries.matrix.api.timeline.item.event.MessageType +import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType +import io.element.android.libraries.matrix.test.AN_EVENT_ID +import io.element.android.libraries.matrix.ui.components.A_BLUR_HASH +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.test.runTest +import org.junit.Test +import java.time.Duration +import java.time.Duration.ofMinutes + +class TimelineItemContentMessageFactoryTest { + + @Test + fun `test create OtherMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = OtherMessageType(msgType = "a_type", body = "body")), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemTextContent( + body = "body", + htmlDocument = null, + plainText = "body", + isEdited = false, + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create LocationMessageType not null`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = LocationMessageType("body", "geo:1,2", "description")), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemLocationContent( + body = "body", + location = Location(lat = 1.0, lon = 2.0, accuracy = 0.0F), + description = "description", + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create LocationMessageType null`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = LocationMessageType("body", "", null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemTextContent( + body = "body", + htmlDocument = null, + plainText = "body", + isEdited = false, + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create TextMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = TextMessageType("body", null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemTextContent( + body = "body", + htmlDocument = null, + plainText = "body", + isEdited = false, + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create VideoMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = VideoMessageType("body", MediaSource("url"), null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemVideoContent( + body = "body", + duration = 0, + videoSource = MediaSource(url = "url", json = null), + thumbnailSource = null, + aspectRatio = null, + blurHash = null, + height = null, + width = null, + mimeType = "application/octet-stream", + formattedFileSize = "0 Bytes", + fileExtension = "", + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create VideoMessageType with info`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent( + type = VideoMessageType( + body = "body.mp4", + source = MediaSource("url"), + info = VideoInfo( + duration = ofMinutes(1), + height = 100, + width = 300, + mimetype = MimeTypes.Mp4, + size = 555, + thumbnailInfo = ThumbnailInfo( + height = 10L, + width = 5L, + mimetype = MimeTypes.Jpeg, + size = 111L, + ), + thumbnailSource = MediaSource("url_thumbnail"), + blurhash = A_BLUR_HASH, + ), + ) + ), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemVideoContent( + body = "body.mp4", + duration = 60_000, + videoSource = MediaSource(url = "url", json = null), + thumbnailSource = MediaSource("url_thumbnail"), + aspectRatio = 3f, + blurHash = A_BLUR_HASH, + height = 100, + width = 300, + mimeType = MimeTypes.Mp4, + formattedFileSize = "555 Bytes", + fileExtension = "mp4", + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create AudioMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = AudioMessageType("body", MediaSource("url"), null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemAudioContent( + body = "body", + duration = Duration.ZERO, + mediaSource = MediaSource(url = "url", json = null), + mimeType = "application/octet-stream", + formattedFileSize = "0 Bytes", + fileExtension = "", + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create AudioMessageType with info`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent( + type = AudioMessageType( + body = "body.mp3", + source = MediaSource("url"), + info = AudioInfo( + duration = ofMinutes(1), + size = 123L, + mimetype = MimeTypes.Mp3, + ) + ) + ), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemAudioContent( + body = "body.mp3", + duration = ofMinutes(1), + mediaSource = MediaSource(url = "url", json = null), + mimeType = MimeTypes.Mp3, + formattedFileSize = "123 Bytes", + fileExtension = "mp3", + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create VoiceMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = VoiceMessageType("body", MediaSource("url"), null, null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemVoiceContent( + eventId = AN_EVENT_ID, + body = "body", + duration = Duration.ZERO, + mediaSource = MediaSource(url = "url", json = null), + mimeType = "application/octet-stream", + waveform = emptyList().toImmutableList() + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create VoiceMessageType with info`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent( + type = VoiceMessageType( + body = "body.ogg", + source = MediaSource("url"), + info = AudioInfo( + duration = ofMinutes(1), + size = 123L, + mimetype = MimeTypes.Ogg, + ), + details = AudioDetails( + duration = ofMinutes(1), waveform = listOf(1f, 2f) + ), + ) + ), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemVoiceContent( + eventId = AN_EVENT_ID, + body = "body.ogg", + duration = ofMinutes(1), + mediaSource = MediaSource(url = "url", json = null), + mimeType = MimeTypes.Ogg, + waveform = listOf(1f, 2f).toImmutableList() + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create VoiceMessageType feature disabled`() = runTest { + val sut = createTimelineItemContentMessageFactory( + featureFlagService = FakeFeatureFlagService( + initialState = mapOf( + FeatureFlags.VoiceMessages.key to false, + ) + ) + ) + val result = sut.create( + content = createMessageContent(type = VoiceMessageType("body", MediaSource("url"), null, null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemAudioContent( + body = "body", + duration = Duration.ZERO, + mediaSource = MediaSource(url = "url", json = null), + mimeType = "application/octet-stream", + formattedFileSize = "0 Bytes", + fileExtension = "" + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create ImageMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = ImageMessageType("body", MediaSource("url"), null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemImageContent( + body = "body", + mediaSource = MediaSource(url = "url", json = null), + thumbnailSource = null, + formattedFileSize = "0 Bytes", + fileExtension = "", + mimeType = "application/octet-stream", + blurhash = null, + width = null, + height = null, + aspectRatio = null + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create ImageMessageType with info`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent( + type = ImageMessageType( + body = "body.jpg", + source = MediaSource("url"), + info = ImageInfo( + height = 10L, + width = 5L, + mimetype = MimeTypes.Jpeg, + size = 888L, + thumbnailInfo = ThumbnailInfo( + height = 10L, + width = 5L, + mimetype = MimeTypes.Jpeg, + size = 111L, + ), + thumbnailSource = MediaSource("url_thumbnail"), + blurhash = A_BLUR_HASH, + ) + ) + ), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemImageContent( + body = "body.jpg", + mediaSource = MediaSource(url = "url", json = null), + thumbnailSource = MediaSource("url_thumbnail"), + formattedFileSize = "888 Bytes", + fileExtension = "jpg", + mimeType = MimeTypes.Jpeg, + blurhash = A_BLUR_HASH, + width = 5, + height = 10, + aspectRatio = 0.5f, + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create FileMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = FileMessageType("body", MediaSource("url"), null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemFileContent( + body = "body", + fileSource = MediaSource(url = "url", json = null), + thumbnailSource = null, + formattedFileSize = "0 Bytes", + fileExtension = "", + mimeType = "application/octet-stream" + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create FileMessageType with info`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent( + type = FileMessageType( + body = "body.pdf", + source = MediaSource("url"), + info = FileInfo( + mimetype = MimeTypes.Pdf, + size = 123L, + thumbnailInfo = ThumbnailInfo( + height = 10L, + width = 5L, + mimetype = MimeTypes.Jpeg, + size = 111L, + ), + thumbnailSource = MediaSource("url_thumbnail"), + ) + ) + ), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemFileContent( + body = "body.pdf", + fileSource = MediaSource(url = "url", json = null), + thumbnailSource = MediaSource("url_thumbnail"), + formattedFileSize = "123 Bytes", + fileExtension = "pdf", + mimeType = MimeTypes.Pdf + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create NoticeMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = NoticeMessageType("body", null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemNoticeContent( + body = "body", + htmlDocument = null, + plainText = "body", + isEdited = false, + ) + assertThat(result).isEqualTo(expected) + } + + @Test + fun `test create EmoteMessageType`() = runTest { + val sut = createTimelineItemContentMessageFactory() + val result = sut.create( + content = createMessageContent(type = EmoteMessageType("body", null)), + senderDisplayName = "Bob", + eventId = AN_EVENT_ID, + ) + val expected = TimelineItemEmoteContent( + body = "* Bob body", + htmlDocument = null, + plainText = "* Bob body", + isEdited = false, + ) + assertThat(result).isEqualTo(expected) + } + + private fun createMessageContent( + body: String = "Body", + inReplyTo: InReplyTo? = null, + isEdited: Boolean = false, + isThreaded: Boolean = false, + type: MessageType, + ): MessageContent { + return MessageContent( + body = body, + inReplyTo = inReplyTo, + isEdited = isEdited, + isThreaded = isThreaded, + type = type, + ) + } + + private fun createTimelineItemContentMessageFactory( + featureFlagService: FeatureFlagService = FakeFeatureFlagService() + ) = TimelineItemContentMessageFactory( + fileSizeFormatter = FakeFileSizeFormatter(), + fileExtensionExtractor = FileExtensionExtractorWithoutValidation(), + featureFlagService = featureFlagService, + ) +}