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 @@ -80,7 +80,9 @@ class MessageDeliveryStatusTests : StreamTestCase() {
userRobot.login().openChannel()
}
step("AND user successfully sends a new message") {
userRobot.sendMessage(sampleText)
userRobot
.sendMessage(sampleText)
.assertMessageDeliveryStatus(MessageDeliveryStatus.SENT) // await for message to be successfully sent
}
step("WHEN participant reads the user's message") {
participantRobot.readMessage()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@

package io.getstream.chat.android.offline.repository.domain.channel.internal

import io.getstream.chat.android.client.extensions.getCreatedAtOrNull
import io.getstream.chat.android.client.extensions.internal.lastMessage
import io.getstream.chat.android.client.extensions.syncUnreadCountWithReads
import io.getstream.chat.android.core.utils.date.max
import io.getstream.chat.android.models.Channel
import io.getstream.chat.android.models.ChannelUserRead
import io.getstream.chat.android.models.DraftMessage
Expand Down Expand Up @@ -53,7 +55,7 @@ internal fun Channel.toEntity(): ChannelEntity {
memberCount = memberCount,
reads = read.map(ChannelUserRead::toEntity).associateBy(ChannelUserReadEntity::userId).toMutableMap(),
lastMessageId = lastMessage?.id,
lastMessageAt = lastMessageAt,
lastMessageAt = max(lastMessageAt, lastMessage?.getCreatedAtOrNull()),
createdByUserId = createdBy.id,
watcherIds = watchers.map(User::id),
watcherCount = watcherCount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import io.getstream.chat.android.randomUser
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import java.util.Date

internal class ChannelMapperTest {

Expand Down Expand Up @@ -86,7 +87,7 @@ internal class ChannelMapperTest {
memberCount = channel.memberCount,
reads = reads.map { it.toEntity() }.associateBy { it.userId }.toMutableMap(),
lastMessageId = lastMessage.id,
lastMessageAt = channel.lastMessageAt,
lastMessageAt = listOfNotNull(channel.lastMessageAt, lastMessage.createdAt).maxOrNull(),
createdByUserId = createdByUser.id,
watcherIds = watchers.map { it.id },
watcherCount = channel.watcherCount,
Expand All @@ -102,6 +103,48 @@ internal class ChannelMapperTest {
assertEquals(expectedChannelEntity, result)
}

@Test
fun `toEntity should advance lastMessageAt to the newest message when the stored value is stale`() = runTest {
val newest = randomMessage(
createdAt = Date(2000),
createdLocallyAt = null,
parentId = null,
deletedAt = null,
deletedForMe = false,
)
val channel = randomChannel(messages = listOf(newest), lastMessageAt = Date(1000))

val entity = channel.toEntity()

assertEquals(Date(2000), entity.lastMessageAt)
assertEquals(newest.id, entity.lastMessageId)
}

@Test
fun `toEntity should keep lastMessageAt when it is newer than the last message`() = runTest {
val older = randomMessage(
createdAt = Date(1000),
createdLocallyAt = null,
parentId = null,
deletedAt = null,
deletedForMe = false,
)
val channel = randomChannel(messages = listOf(older), lastMessageAt = Date(3000))

val entity = channel.toEntity()

assertEquals(Date(3000), entity.lastMessageAt)
}

@Test
fun `toEntity should keep lastMessageAt when there is no last message`() = runTest {
val channel = randomChannel(messages = emptyList(), lastMessageAt = Date(1000))

val entity = channel.toEntity()

assertEquals(Date(1000), entity.lastMessageAt)
}

@Test
@Suppress("LongMethod")
fun `Should map ChannelEntity to Channel correctly`() = runTest {
Expand Down
Loading