From 906650b8d2826a891f5cc77ad9816642e9abc03f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 21:35:07 +0200 Subject: [PATCH] Fix tests after change on `InReplyTo` classes --- .../components/TimelineItemEventRow.kt | 3 +- .../impl/timeline/model/InReplyToDetails.kt | 20 +++++++--- .../timeline/model/InReplyToDetailTest.kt | 22 +++++----- .../timeline/model/InReplyToMetadataKtTest.kt | 40 +++++++++---------- 4 files changed, 45 insertions(+), 40 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt index 6cece86a58..9633cb31bc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt @@ -92,6 +92,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.canBeRepliedTo +import io.element.android.features.messages.impl.timeline.model.eventId import io.element.android.features.messages.impl.timeline.model.metadata import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.colors.AvatarColorsProvider @@ -146,7 +147,7 @@ fun TimelineItemEventRow( } fun inReplyToClicked() { - val inReplyToEventId = event.inReplyTo?.eventId ?: return + val inReplyToEventId = event.inReplyTo?.eventId() ?: return inReplyToClick(inReplyToEventId) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt index 41fda8c294..5317c3231e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.model +import androidx.compose.runtime.Immutable 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.permalink.PermalinkParser @@ -27,17 +28,24 @@ 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.ui.messages.toPlainText -sealed class InReplyToDetails(val eventId: EventId) { - class Ready( - eventId: EventId, +@Immutable +sealed interface InReplyToDetails { + data class Ready( + val eventId: EventId, val senderId: UserId, val senderProfile: ProfileTimelineDetails, val eventContent: EventContent?, val textContent: String?, - ) : InReplyToDetails(eventId) + ) : InReplyToDetails - class Loading(eventId: EventId) : InReplyToDetails(eventId) - class Error(eventId: EventId, val message: String) : InReplyToDetails(eventId) + data class Loading(val eventId: EventId) : InReplyToDetails + data class Error(val eventId: EventId, val message: String) : InReplyToDetails +} + +fun InReplyToDetails.eventId() = when (this) { + is InReplyToDetails.Ready -> eventId + is InReplyToDetails.Loading -> eventId + is InReplyToDetails.Error -> eventId } fun InReplyTo.map( diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt index 86355f82dc..d73f7246c9 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt @@ -32,22 +32,22 @@ import org.junit.Test class InReplyToDetailTest { @Test - fun `map - with a not ready InReplyTo does not work`() { + fun `map - with a not ready InReplyTo return expected object`() { assertThat( - InReplyTo.Pending.map( + InReplyTo.Pending(AN_EVENT_ID).map( permalinkParser = FakePermalinkParser() ) - ).isNull() + ).isEqualTo(InReplyToDetails.Loading(AN_EVENT_ID)) assertThat( InReplyTo.NotLoaded(AN_EVENT_ID).map( permalinkParser = FakePermalinkParser() ) - ).isNull() + ).isEqualTo(InReplyToDetails.Loading(AN_EVENT_ID)) assertThat( - InReplyTo.Error.map( + InReplyTo.Error(AN_EVENT_ID, "a message").map( permalinkParser = FakePermalinkParser() ) - ).isNull() + ).isEqualTo(InReplyToDetails.Error(AN_EVENT_ID, "a message")) } @Test @@ -65,7 +65,7 @@ class InReplyToDetailTest { permalinkParser = FakePermalinkParser() ) assertThat(inReplyToDetails).isNotNull() - assertThat(inReplyToDetails?.textContent).isNull() + assertThat((inReplyToDetails as InReplyToDetails.Ready).textContent).isNull() } @Test @@ -89,9 +89,7 @@ class InReplyToDetailTest { ) ) assertThat( - inReplyTo.map( - permalinkParser = FakePermalinkParser() - )?.textContent + (inReplyTo.map(permalinkParser = FakePermalinkParser()) as InReplyToDetails.Ready).textContent ).isEqualTo("Hello!") } @@ -113,9 +111,7 @@ class InReplyToDetailTest { ) ) assertThat( - inReplyTo.map( - permalinkParser = FakePermalinkParser() - )?.textContent + (inReplyTo.map(permalinkParser = FakePermalinkParser()) as InReplyToDetails.Ready).textContent ).isEqualTo("**Hello!**") } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt index dc91de52b0..b56d871704 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt @@ -70,7 +70,7 @@ class InReplyToMetadataKtTest { @Test fun `any message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails(eventContent = aMessageContent()).metadata() + anInReplyToDetailsReady(eventContent = aMessageContent()).metadata() }.test { awaitItem().let { assertThat(it).isEqualTo(InReplyToMetadata.Text("textContent")) @@ -81,7 +81,7 @@ class InReplyToMetadataKtTest { @Test fun `an image message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = ImageMessageType( body = "body", @@ -111,7 +111,7 @@ class InReplyToMetadataKtTest { @Test fun `a sticker message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = StickerContent( body = "body", info = anImageInfo(), @@ -137,7 +137,7 @@ class InReplyToMetadataKtTest { @Test fun `a video message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = VideoMessageType( body = "body", @@ -167,7 +167,7 @@ class InReplyToMetadataKtTest { @Test fun `a file message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = FileMessageType( body = "body", @@ -200,7 +200,7 @@ class InReplyToMetadataKtTest { @Test fun `a audio message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = AudioMessageType( body = "body", @@ -232,7 +232,7 @@ class InReplyToMetadataKtTest { fun `a location message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { testEnv { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = LocationMessageType( body = "body", @@ -262,7 +262,7 @@ class InReplyToMetadataKtTest { fun `a voice message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { testEnv { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = VoiceMessageType( body = "body", @@ -292,7 +292,7 @@ class InReplyToMetadataKtTest { @Test fun `a poll content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aPollContent() ).metadata() }.test { @@ -314,7 +314,7 @@ class InReplyToMetadataKtTest { @Test fun `redacted content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = RedactedContent ).metadata() }.test { @@ -327,7 +327,7 @@ class InReplyToMetadataKtTest { @Test fun `unable to decrypt content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = UnableToDecryptContent(UnableToDecryptContent.Data.Unknown) ).metadata() }.test { @@ -340,7 +340,7 @@ class InReplyToMetadataKtTest { @Test fun `failed to parse message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = FailedToParseMessageLikeContent("", "") ).metadata() }.test { @@ -353,7 +353,7 @@ class InReplyToMetadataKtTest { @Test fun `failed to parse state content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = FailedToParseStateContent("", "", "") ).metadata() }.test { @@ -366,7 +366,7 @@ class InReplyToMetadataKtTest { @Test fun `profile change content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = ProfileChangeContent("", "", "", "") ).metadata() }.test { @@ -379,7 +379,7 @@ class InReplyToMetadataKtTest { @Test fun `room membership content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = RoomMembershipContent(A_USER_ID, null) ).metadata() }.test { @@ -392,7 +392,7 @@ class InReplyToMetadataKtTest { @Test fun `state content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = StateContent("", OtherState.RoomJoinRules) ).metadata() }.test { @@ -405,7 +405,7 @@ class InReplyToMetadataKtTest { @Test fun `unknown content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = UnknownContent ).metadata() }.test { @@ -418,7 +418,7 @@ class InReplyToMetadataKtTest { @Test fun `null content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = null ).metadata() }.test { @@ -429,13 +429,13 @@ class InReplyToMetadataKtTest { } } -fun anInReplyToDetails( +private fun anInReplyToDetailsReady( eventId: EventId = AN_EVENT_ID, senderId: UserId = A_USER_ID, senderProfile: ProfileTimelineDetails = aProfileTimelineDetails(), eventContent: EventContent? = aMessageContent(), textContent: String? = "textContent", -) = InReplyToDetails( +) = InReplyToDetails.Ready( eventId = eventId, senderId = senderId, senderProfile = senderProfile,