Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import io.getstream.chat.android.models.Member
import io.getstream.chat.android.models.MemberData
import io.getstream.chat.android.models.Message
import io.getstream.chat.android.models.MessageTransformer
import io.getstream.chat.android.models.MessageType
import io.getstream.chat.android.models.Mute
import io.getstream.chat.android.models.Reaction
import io.getstream.chat.android.models.User
Expand All @@ -53,6 +54,8 @@ internal class DtoMapping(
private val userTransformer: UserTransformer,
) {

private val supportedUpstreamMessageTypes = setOf(MessageType.REGULAR, MessageType.SYSTEM)

/**
* Converts [Attachment] to [AttachmentDto].
*/
Expand Down Expand Up @@ -121,14 +124,15 @@ internal class DtoMapping(
internal fun Message.toDto(): UpstreamMessageDto =
messageTransformer.transform(this)
.run {
val upstreamType = if (type in supportedUpstreamMessageTypes) type else ""
UpstreamMessageDto(
attachments = attachments.map { it.toDto() },
cid = cid,
command = command,
args = null,
html = html,
id = id,
type = type,
type = upstreamType,
mentioned_users = mentionedUsersIds,
parent_id = parentId,
pin_expires = pinExpires,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import io.getstream.chat.android.client.api2.model.dto.UpstreamReactionDto
import io.getstream.chat.android.client.api2.model.dto.UpstreamUserDto
import io.getstream.chat.android.client.test.randomConnectedEvent
import io.getstream.chat.android.models.MessageTransformer
import io.getstream.chat.android.models.MessageType
import io.getstream.chat.android.models.NoOpMessageTransformer
import io.getstream.chat.android.models.NoOpUserTransformer
import io.getstream.chat.android.models.UserTransformer
Expand All @@ -49,6 +50,9 @@ import io.getstream.chat.android.randomReaction
import io.getstream.chat.android.randomUser
import org.amshove.kluent.shouldBeEqualTo
import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.MethodSource
import org.mockito.kotlin.spy
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
Expand Down Expand Up @@ -168,7 +172,7 @@ internal class DtoMappingTest {
@Test
fun `Message is correctly mapped to Dto`() {
val messageTransformer = spy(NoOpMessageTransformer)
val message = randomMessage()
val message = randomMessage(type = MessageType.REGULAR)
val mapping = Fixture()
.withMessageTransformer(messageTransformer)
.get()
Expand Down Expand Up @@ -203,6 +207,17 @@ internal class DtoMappingTest {
verify(messageTransformer, times(1)).transform(message)
}

@ParameterizedTest
@MethodSource("messageTypeCoercionInput")
fun `Message toDto coerces type to allowed upstream values`(inputType: String, expectedType: String) {
val message = randomMessage(type = inputType)
val mapping = Fixture().get()

val dto = with(mapping) { message.toDto() }

dto.type shouldBeEqualTo expectedType
}

@Test
fun `Mute is correctly mapped to Dto`() {
val mute = randomMute()
Expand Down Expand Up @@ -313,6 +328,20 @@ internal class DtoMappingTest {
dto shouldBeEqualTo expected
}

companion object {
@JvmStatic
fun messageTypeCoercionInput(): List<Arguments> = listOf(
Arguments.of(MessageType.REGULAR, MessageType.REGULAR),
Arguments.of(MessageType.SYSTEM, MessageType.SYSTEM),
Arguments.of(MessageType.REPLY, ""),
Arguments.of(MessageType.EPHEMERAL, ""),
Arguments.of(MessageType.ERROR, ""),
Arguments.of(MessageType.FAILED, ""),
Arguments.of("some-unknown-type", ""),
Arguments.of("", ""),
)
}

internal class Fixture {

private var messageTransformer: MessageTransformer = NoOpMessageTransformer
Expand Down
Loading