Browse Source

Fix tests after change on `InReplyTo` classes

pull/2759/head
Benoit Marty 5 months ago
parent
commit
906650b8d2
  1. 3
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt
  2. 20
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt
  3. 22
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt
  4. 40
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt

3
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.aTimelineItemImageContent
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent 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.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.features.messages.impl.timeline.model.metadata
import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom
import io.element.android.libraries.designsystem.colors.AvatarColorsProvider import io.element.android.libraries.designsystem.colors.AvatarColorsProvider
@ -146,7 +147,7 @@ fun TimelineItemEventRow(
} }
fun inReplyToClicked() { fun inReplyToClicked() {
val inReplyToEventId = event.inReplyTo?.eventId ?: return val inReplyToEventId = event.inReplyTo?.eventId() ?: return
inReplyToClick(inReplyToEventId) inReplyToClick(inReplyToEventId)
} }

20
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 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.EventId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.permalink.PermalinkParser 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.api.timeline.item.event.TextMessageType
import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.matrix.ui.messages.toPlainText
sealed class InReplyToDetails(val eventId: EventId) { @Immutable
class Ready( sealed interface InReplyToDetails {
eventId: EventId, data class Ready(
val eventId: EventId,
val senderId: UserId, val senderId: UserId,
val senderProfile: ProfileTimelineDetails, val senderProfile: ProfileTimelineDetails,
val eventContent: EventContent?, val eventContent: EventContent?,
val textContent: String?, val textContent: String?,
) : InReplyToDetails(eventId) ) : InReplyToDetails
class Loading(eventId: EventId) : InReplyToDetails(eventId) data class Loading(val eventId: EventId) : InReplyToDetails
class Error(eventId: EventId, val message: String) : InReplyToDetails(eventId) 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( fun InReplyTo.map(

22
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 { class InReplyToDetailTest {
@Test @Test
fun `map - with a not ready InReplyTo does not work`() { fun `map - with a not ready InReplyTo return expected object`() {
assertThat( assertThat(
InReplyTo.Pending.map( InReplyTo.Pending(AN_EVENT_ID).map(
permalinkParser = FakePermalinkParser() permalinkParser = FakePermalinkParser()
) )
).isNull() ).isEqualTo(InReplyToDetails.Loading(AN_EVENT_ID))
assertThat( assertThat(
InReplyTo.NotLoaded(AN_EVENT_ID).map( InReplyTo.NotLoaded(AN_EVENT_ID).map(
permalinkParser = FakePermalinkParser() permalinkParser = FakePermalinkParser()
) )
).isNull() ).isEqualTo(InReplyToDetails.Loading(AN_EVENT_ID))
assertThat( assertThat(
InReplyTo.Error.map( InReplyTo.Error(AN_EVENT_ID, "a message").map(
permalinkParser = FakePermalinkParser() permalinkParser = FakePermalinkParser()
) )
).isNull() ).isEqualTo(InReplyToDetails.Error(AN_EVENT_ID, "a message"))
} }
@Test @Test
@ -65,7 +65,7 @@ class InReplyToDetailTest {
permalinkParser = FakePermalinkParser() permalinkParser = FakePermalinkParser()
) )
assertThat(inReplyToDetails).isNotNull() assertThat(inReplyToDetails).isNotNull()
assertThat(inReplyToDetails?.textContent).isNull() assertThat((inReplyToDetails as InReplyToDetails.Ready).textContent).isNull()
} }
@Test @Test
@ -89,9 +89,7 @@ class InReplyToDetailTest {
) )
) )
assertThat( assertThat(
inReplyTo.map( (inReplyTo.map(permalinkParser = FakePermalinkParser()) as InReplyToDetails.Ready).textContent
permalinkParser = FakePermalinkParser()
)?.textContent
).isEqualTo("Hello!") ).isEqualTo("Hello!")
} }
@ -113,9 +111,7 @@ class InReplyToDetailTest {
) )
) )
assertThat( assertThat(
inReplyTo.map( (inReplyTo.map(permalinkParser = FakePermalinkParser()) as InReplyToDetails.Ready).textContent
permalinkParser = FakePermalinkParser()
)?.textContent
).isEqualTo("**Hello!**") ).isEqualTo("**Hello!**")
} }
} }

40
features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt

@ -70,7 +70,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `any message content`() = runTest { fun `any message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails(eventContent = aMessageContent()).metadata() anInReplyToDetailsReady(eventContent = aMessageContent()).metadata()
}.test { }.test {
awaitItem().let { awaitItem().let {
assertThat(it).isEqualTo(InReplyToMetadata.Text("textContent")) assertThat(it).isEqualTo(InReplyToMetadata.Text("textContent"))
@ -81,7 +81,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `an image message content`() = runTest { fun `an image message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aMessageContent( eventContent = aMessageContent(
messageType = ImageMessageType( messageType = ImageMessageType(
body = "body", body = "body",
@ -111,7 +111,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `a sticker message content`() = runTest { fun `a sticker message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = StickerContent( eventContent = StickerContent(
body = "body", body = "body",
info = anImageInfo(), info = anImageInfo(),
@ -137,7 +137,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `a video message content`() = runTest { fun `a video message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aMessageContent( eventContent = aMessageContent(
messageType = VideoMessageType( messageType = VideoMessageType(
body = "body", body = "body",
@ -167,7 +167,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `a file message content`() = runTest { fun `a file message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aMessageContent( eventContent = aMessageContent(
messageType = FileMessageType( messageType = FileMessageType(
body = "body", body = "body",
@ -200,7 +200,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `a audio message content`() = runTest { fun `a audio message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aMessageContent( eventContent = aMessageContent(
messageType = AudioMessageType( messageType = AudioMessageType(
body = "body", body = "body",
@ -232,7 +232,7 @@ class InReplyToMetadataKtTest {
fun `a location message content`() = runTest { fun `a location message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
testEnv { testEnv {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aMessageContent( eventContent = aMessageContent(
messageType = LocationMessageType( messageType = LocationMessageType(
body = "body", body = "body",
@ -262,7 +262,7 @@ class InReplyToMetadataKtTest {
fun `a voice message content`() = runTest { fun `a voice message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
testEnv { testEnv {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aMessageContent( eventContent = aMessageContent(
messageType = VoiceMessageType( messageType = VoiceMessageType(
body = "body", body = "body",
@ -292,7 +292,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `a poll content`() = runTest { fun `a poll content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = aPollContent() eventContent = aPollContent()
).metadata() ).metadata()
}.test { }.test {
@ -314,7 +314,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `redacted content`() = runTest { fun `redacted content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = RedactedContent eventContent = RedactedContent
).metadata() ).metadata()
}.test { }.test {
@ -327,7 +327,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `unable to decrypt content`() = runTest { fun `unable to decrypt content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = UnableToDecryptContent(UnableToDecryptContent.Data.Unknown) eventContent = UnableToDecryptContent(UnableToDecryptContent.Data.Unknown)
).metadata() ).metadata()
}.test { }.test {
@ -340,7 +340,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `failed to parse message content`() = runTest { fun `failed to parse message content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = FailedToParseMessageLikeContent("", "") eventContent = FailedToParseMessageLikeContent("", "")
).metadata() ).metadata()
}.test { }.test {
@ -353,7 +353,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `failed to parse state content`() = runTest { fun `failed to parse state content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = FailedToParseStateContent("", "", "") eventContent = FailedToParseStateContent("", "", "")
).metadata() ).metadata()
}.test { }.test {
@ -366,7 +366,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `profile change content`() = runTest { fun `profile change content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = ProfileChangeContent("", "", "", "") eventContent = ProfileChangeContent("", "", "", "")
).metadata() ).metadata()
}.test { }.test {
@ -379,7 +379,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `room membership content`() = runTest { fun `room membership content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = RoomMembershipContent(A_USER_ID, null) eventContent = RoomMembershipContent(A_USER_ID, null)
).metadata() ).metadata()
}.test { }.test {
@ -392,7 +392,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `state content`() = runTest { fun `state content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = StateContent("", OtherState.RoomJoinRules) eventContent = StateContent("", OtherState.RoomJoinRules)
).metadata() ).metadata()
}.test { }.test {
@ -405,7 +405,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `unknown content`() = runTest { fun `unknown content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = UnknownContent eventContent = UnknownContent
).metadata() ).metadata()
}.test { }.test {
@ -418,7 +418,7 @@ class InReplyToMetadataKtTest {
@Test @Test
fun `null content`() = runTest { fun `null content`() = runTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
anInReplyToDetails( anInReplyToDetailsReady(
eventContent = null eventContent = null
).metadata() ).metadata()
}.test { }.test {
@ -429,13 +429,13 @@ class InReplyToMetadataKtTest {
} }
} }
fun anInReplyToDetails( private fun anInReplyToDetailsReady(
eventId: EventId = AN_EVENT_ID, eventId: EventId = AN_EVENT_ID,
senderId: UserId = A_USER_ID, senderId: UserId = A_USER_ID,
senderProfile: ProfileTimelineDetails = aProfileTimelineDetails(), senderProfile: ProfileTimelineDetails = aProfileTimelineDetails(),
eventContent: EventContent? = aMessageContent(), eventContent: EventContent? = aMessageContent(),
textContent: String? = "textContent", textContent: String? = "textContent",
) = InReplyToDetails( ) = InReplyToDetails.Ready(
eventId = eventId, eventId = eventId,
senderId = senderId, senderId = senderId,
senderProfile = senderProfile, senderProfile = senderProfile,

Loading…
Cancel
Save