Move FakeRust classes and factories to a fixtures package
This commit is contained in:
parent
7f7612ef12
commit
d9f96b8fb3
7 changed files with 244 additions and 189 deletions
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.fixtures
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
|
import org.matrix.rustcomponents.sdk.NoPointer
|
||||||
|
import org.matrix.rustcomponents.sdk.Room
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomMembersIterator
|
||||||
|
|
||||||
|
class FakeRustRoom(
|
||||||
|
private val getMembers: () -> RoomMembersIterator = { FakeRustRoomMembersIterator() },
|
||||||
|
private val getMembersNoSync: () -> RoomMembersIterator = { FakeRustRoomMembersIterator() },
|
||||||
|
) : Room(NoPointer) {
|
||||||
|
var membersCallCount = 0
|
||||||
|
var membersNoSyncCallCount = 0
|
||||||
|
|
||||||
|
override fun id(): String {
|
||||||
|
return A_ROOM_ID.value
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun members(): RoomMembersIterator {
|
||||||
|
membersCallCount++
|
||||||
|
return getMembers()
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun membersNoSync(): RoomMembersIterator {
|
||||||
|
membersNoSyncCallCount++
|
||||||
|
return getMembersNoSync()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun close() {
|
||||||
|
// No-op
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.fixtures
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
import org.matrix.rustcomponents.sdk.EventTimelineItem
|
||||||
|
import org.matrix.rustcomponents.sdk.NoPointer
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomInfo
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListItem
|
||||||
|
|
||||||
|
class FakeRustRoomListItem(
|
||||||
|
private val roomId: RoomId,
|
||||||
|
private val roomInfo: RoomInfo = aRustRoomInfo(id = roomId.value),
|
||||||
|
private val latestEvent: EventTimelineItem? = null,
|
||||||
|
) : RoomListItem(NoPointer) {
|
||||||
|
override fun id(): String {
|
||||||
|
return roomId.value
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun roomInfo(): RoomInfo {
|
||||||
|
return roomInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun latestEvent(): EventTimelineItem? {
|
||||||
|
return latestEvent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.fixtures
|
||||||
|
|
||||||
|
import org.matrix.rustcomponents.sdk.NoPointer
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomMember
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomMembersIterator
|
||||||
|
|
||||||
|
class FakeRustRoomMembersIterator(
|
||||||
|
private var members: List<RoomMember>? = null
|
||||||
|
) : RoomMembersIterator(NoPointer) {
|
||||||
|
override fun len(): UInt {
|
||||||
|
return members?.size?.toUInt() ?: 0u
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun nextChunk(chunkSize: UInt): List<RoomMember>? {
|
||||||
|
if (members?.isEmpty() == true) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return members?.let {
|
||||||
|
val result = it.take(chunkSize.toInt())
|
||||||
|
members = it.subList(result.size, it.size)
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.fixtures
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
|
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
||||||
|
import org.matrix.rustcomponents.sdk.Membership
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomHero
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomInfo
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomMember
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomNotificationMode
|
||||||
|
|
||||||
|
fun aRustRoomInfo(
|
||||||
|
id: String = A_ROOM_ID.value,
|
||||||
|
displayName: String = A_ROOM_NAME,
|
||||||
|
rawName: String = A_ROOM_NAME,
|
||||||
|
topic: String? = null,
|
||||||
|
avatarUrl: String? = null,
|
||||||
|
isDirect: Boolean = false,
|
||||||
|
isPublic: Boolean = false,
|
||||||
|
isSpace: Boolean = false,
|
||||||
|
isTombstoned: Boolean = false,
|
||||||
|
isFavourite: Boolean = false,
|
||||||
|
canonicalAlias: String? = null,
|
||||||
|
alternativeAliases: List<String> = listOf(),
|
||||||
|
membership: Membership = Membership.JOINED,
|
||||||
|
inviter: RoomMember? = null,
|
||||||
|
heroes: List<RoomHero> = listOf(),
|
||||||
|
activeMembersCount: ULong = 0uL,
|
||||||
|
invitedMembersCount: ULong = 0uL,
|
||||||
|
joinedMembersCount: ULong = 0uL,
|
||||||
|
userPowerLevels: Map<String, Long> = mapOf(),
|
||||||
|
highlightCount: ULong = 0uL,
|
||||||
|
notificationCount: ULong = 0uL,
|
||||||
|
userDefinedNotificationMode: RoomNotificationMode? = null,
|
||||||
|
hasRoomCall: Boolean = false,
|
||||||
|
activeRoomCallParticipants: List<String> = listOf(),
|
||||||
|
isMarkedUnread: Boolean = false,
|
||||||
|
numUnreadMessages: ULong = 0uL,
|
||||||
|
numUnreadNotifications: ULong = 0uL,
|
||||||
|
numUnreadMentions: ULong = 0uL,
|
||||||
|
pinnedEventIds: List<String> = listOf(),
|
||||||
|
roomCreator: UserId? = null,
|
||||||
|
) = RoomInfo(
|
||||||
|
id = id,
|
||||||
|
displayName = displayName,
|
||||||
|
rawName = rawName,
|
||||||
|
topic = topic,
|
||||||
|
avatarUrl = avatarUrl,
|
||||||
|
isDirect = isDirect,
|
||||||
|
isPublic = isPublic,
|
||||||
|
isSpace = isSpace,
|
||||||
|
isTombstoned = isTombstoned,
|
||||||
|
isFavourite = isFavourite,
|
||||||
|
canonicalAlias = canonicalAlias,
|
||||||
|
alternativeAliases = alternativeAliases,
|
||||||
|
membership = membership,
|
||||||
|
inviter = inviter,
|
||||||
|
heroes = heroes,
|
||||||
|
activeMembersCount = activeMembersCount,
|
||||||
|
invitedMembersCount = invitedMembersCount,
|
||||||
|
joinedMembersCount = joinedMembersCount,
|
||||||
|
userPowerLevels = userPowerLevels,
|
||||||
|
highlightCount = highlightCount,
|
||||||
|
notificationCount = notificationCount,
|
||||||
|
cachedUserDefinedNotificationMode = userDefinedNotificationMode,
|
||||||
|
hasRoomCall = hasRoomCall,
|
||||||
|
activeRoomCallParticipants = activeRoomCallParticipants,
|
||||||
|
isMarkedUnread = isMarkedUnread,
|
||||||
|
numUnreadMessages = numUnreadMessages,
|
||||||
|
numUnreadNotifications = numUnreadNotifications,
|
||||||
|
numUnreadMentions = numUnreadMentions,
|
||||||
|
pinnedEventIds = pinnedEventIds,
|
||||||
|
creator = roomCreator?.value,
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.fixtures
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
import org.matrix.rustcomponents.sdk.MembershipState
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomMember
|
||||||
|
import uniffi.matrix_sdk.RoomMemberRole
|
||||||
|
|
||||||
|
fun aRustRoomMember(
|
||||||
|
userId: UserId,
|
||||||
|
displayName: String? = null,
|
||||||
|
avatarUrl: String? = null,
|
||||||
|
membership: MembershipState = MembershipState.JOIN,
|
||||||
|
isNameAmbiguous: Boolean = false,
|
||||||
|
powerLevel: Long = 0L,
|
||||||
|
isIgnored: Boolean = false,
|
||||||
|
role: RoomMemberRole = RoomMemberRole.USER,
|
||||||
|
) = RoomMember(
|
||||||
|
userId = userId.value,
|
||||||
|
displayName = displayName,
|
||||||
|
avatarUrl = avatarUrl,
|
||||||
|
membership = membership,
|
||||||
|
isNameAmbiguous = isNameAmbiguous,
|
||||||
|
powerLevel = powerLevel,
|
||||||
|
normalizedPowerLevel = powerLevel,
|
||||||
|
isIgnored = isIgnored,
|
||||||
|
suggestedRoleForPowerLevel = role,
|
||||||
|
)
|
||||||
|
|
@ -9,13 +9,14 @@ package io.element.android.libraries.matrix.impl.room.member
|
||||||
|
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
||||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||||
|
import io.element.android.libraries.matrix.impl.fixtures.FakeRustRoom
|
||||||
|
import io.element.android.libraries.matrix.impl.fixtures.FakeRustRoomMembersIterator
|
||||||
|
import io.element.android.libraries.matrix.impl.fixtures.aRustRoomMember
|
||||||
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE
|
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE
|
||||||
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE_AND_SERVER
|
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE_AND_SERVER
|
||||||
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.SERVER
|
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.SERVER
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID_2
|
import io.element.android.libraries.matrix.test.A_USER_ID_2
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID_3
|
import io.element.android.libraries.matrix.test.A_USER_ID_3
|
||||||
|
|
@ -23,22 +24,16 @@ import io.element.android.libraries.matrix.test.A_USER_ID_4
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.matrix.rustcomponents.sdk.MembershipState
|
|
||||||
import org.matrix.rustcomponents.sdk.NoPointer
|
|
||||||
import org.matrix.rustcomponents.sdk.Room
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomMember
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomMembersIterator
|
|
||||||
import uniffi.matrix_sdk.RoomMemberRole
|
|
||||||
|
|
||||||
class RoomMemberListFetcherTest {
|
class RoomMemberListFetcherTest {
|
||||||
@Test
|
@Test
|
||||||
fun `fetchRoomMembers with CACHE source - emits cached members, if any`() = runTest {
|
fun `fetchRoomMembers with CACHE source - emits cached members, if any`() = runTest {
|
||||||
val room = FakeRustRoom(getMembersNoSync = {
|
val room = FakeRustRoom(getMembersNoSync = {
|
||||||
FakeRoomMembersIterator(
|
FakeRustRoomMembersIterator(
|
||||||
listOf(
|
listOf(
|
||||||
fakeRustRoomMember(A_USER_ID),
|
aRustRoomMember(A_USER_ID),
|
||||||
fakeRustRoomMember(A_USER_ID_2),
|
aRustRoomMember(A_USER_ID_2),
|
||||||
fakeRustRoomMember(A_USER_ID_3),
|
aRustRoomMember(A_USER_ID_3),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
@ -65,7 +60,7 @@ class RoomMemberListFetcherTest {
|
||||||
@Test
|
@Test
|
||||||
fun `fetchRoomMembers with CACHE source - emits empty list, if no members exist`() = runTest {
|
fun `fetchRoomMembers with CACHE source - emits empty list, if no members exist`() = runTest {
|
||||||
val room = FakeRustRoom(getMembersNoSync = {
|
val room = FakeRustRoom(getMembersNoSync = {
|
||||||
FakeRoomMembersIterator(emptyList())
|
FakeRustRoomMembersIterator(emptyList())
|
||||||
})
|
})
|
||||||
|
|
||||||
val fetcher = RoomMemberListFetcher(room, Dispatchers.Default)
|
val fetcher = RoomMemberListFetcher(room, Dispatchers.Default)
|
||||||
|
|
@ -95,11 +90,11 @@ class RoomMemberListFetcherTest {
|
||||||
@Test
|
@Test
|
||||||
fun `fetchRoomMembers with CACHE source - emits all items at once`() = runTest {
|
fun `fetchRoomMembers with CACHE source - emits all items at once`() = runTest {
|
||||||
val room = FakeRustRoom(getMembersNoSync = {
|
val room = FakeRustRoom(getMembersNoSync = {
|
||||||
FakeRoomMembersIterator(
|
FakeRustRoomMembersIterator(
|
||||||
listOf(
|
listOf(
|
||||||
fakeRustRoomMember(A_USER_ID),
|
aRustRoomMember(A_USER_ID),
|
||||||
fakeRustRoomMember(A_USER_ID_2),
|
aRustRoomMember(A_USER_ID_2),
|
||||||
fakeRustRoomMember(A_USER_ID_3),
|
aRustRoomMember(A_USER_ID_3),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
@ -122,11 +117,11 @@ class RoomMemberListFetcherTest {
|
||||||
@Test
|
@Test
|
||||||
fun `fetchRoomMembers with SERVER source - emits only new members, if any`() = runTest {
|
fun `fetchRoomMembers with SERVER source - emits only new members, if any`() = runTest {
|
||||||
val room = FakeRustRoom(getMembers = {
|
val room = FakeRustRoom(getMembers = {
|
||||||
FakeRoomMembersIterator(
|
FakeRustRoomMembersIterator(
|
||||||
listOf(
|
listOf(
|
||||||
fakeRustRoomMember(A_USER_ID),
|
aRustRoomMember(A_USER_ID),
|
||||||
fakeRustRoomMember(A_USER_ID_2),
|
aRustRoomMember(A_USER_ID_2),
|
||||||
fakeRustRoomMember(A_USER_ID_3),
|
aRustRoomMember(A_USER_ID_3),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
@ -163,14 +158,14 @@ class RoomMemberListFetcherTest {
|
||||||
fun `fetchRoomMembers with CACHE_AND_SERVER source - returns cached items first, then new ones`() = runTest {
|
fun `fetchRoomMembers with CACHE_AND_SERVER source - returns cached items first, then new ones`() = runTest {
|
||||||
val room = FakeRustRoom(
|
val room = FakeRustRoom(
|
||||||
getMembersNoSync = {
|
getMembersNoSync = {
|
||||||
FakeRoomMembersIterator(listOf(fakeRustRoomMember(A_USER_ID_4)))
|
FakeRustRoomMembersIterator(listOf(aRustRoomMember(A_USER_ID_4)))
|
||||||
},
|
},
|
||||||
getMembers = {
|
getMembers = {
|
||||||
FakeRoomMembersIterator(
|
FakeRustRoomMembersIterator(
|
||||||
listOf(
|
listOf(
|
||||||
fakeRustRoomMember(A_USER_ID),
|
aRustRoomMember(A_USER_ID),
|
||||||
fakeRustRoomMember(A_USER_ID_2),
|
aRustRoomMember(A_USER_ID_2),
|
||||||
fakeRustRoomMember(A_USER_ID_3),
|
aRustRoomMember(A_USER_ID_3),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -203,69 +198,3 @@ class RoomMemberListFetcherTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakeRustRoom(
|
|
||||||
private val getMembers: () -> RoomMembersIterator = { FakeRoomMembersIterator() },
|
|
||||||
private val getMembersNoSync: () -> RoomMembersIterator = { FakeRoomMembersIterator() },
|
|
||||||
) : Room(NoPointer) {
|
|
||||||
var membersCallCount = 0
|
|
||||||
var membersNoSyncCallCount = 0
|
|
||||||
|
|
||||||
override fun id(): String {
|
|
||||||
return A_ROOM_ID.value
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun members(): RoomMembersIterator {
|
|
||||||
membersCallCount++
|
|
||||||
return getMembers()
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun membersNoSync(): RoomMembersIterator {
|
|
||||||
membersNoSyncCallCount++
|
|
||||||
return getMembersNoSync()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
// No-op
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FakeRoomMembersIterator(
|
|
||||||
private var members: List<RoomMember>? = null
|
|
||||||
) : RoomMembersIterator(NoPointer) {
|
|
||||||
override fun len(): UInt {
|
|
||||||
return members?.size?.toUInt() ?: 0u
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun nextChunk(chunkSize: UInt): List<RoomMember>? {
|
|
||||||
if (members?.isEmpty() == true) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
return members?.let {
|
|
||||||
val result = it.take(chunkSize.toInt())
|
|
||||||
members = it.subList(result.size, it.size)
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun fakeRustRoomMember(
|
|
||||||
userId: UserId,
|
|
||||||
displayName: String? = null,
|
|
||||||
avatarUrl: String? = null,
|
|
||||||
membership: MembershipState = MembershipState.JOIN,
|
|
||||||
isNameAmbiguous: Boolean = false,
|
|
||||||
powerLevel: Long = 0L,
|
|
||||||
isIgnored: Boolean = false,
|
|
||||||
role: RoomMemberRole = RoomMemberRole.USER,
|
|
||||||
) = RoomMember(
|
|
||||||
userId = userId.value,
|
|
||||||
displayName = displayName,
|
|
||||||
avatarUrl = avatarUrl,
|
|
||||||
membership = membership,
|
|
||||||
isNameAmbiguous = isNameAmbiguous,
|
|
||||||
powerLevel = powerLevel,
|
|
||||||
normalizedPowerLevel = powerLevel,
|
|
||||||
isIgnored = isIgnored,
|
|
||||||
suggestedRoleForPowerLevel = role,
|
|
||||||
)
|
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,10 @@ package io.element.android.libraries.matrix.impl.roomlist
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import com.sun.jna.Pointer
|
import com.sun.jna.Pointer
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||||
|
import io.element.android.libraries.matrix.impl.fixtures.FakeRustRoomListItem
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID_2
|
import io.element.android.libraries.matrix.test.A_ROOM_ID_2
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
|
||||||
import io.element.android.libraries.matrix.test.room.aRoomSummary
|
import io.element.android.libraries.matrix.test.room.aRoomSummary
|
||||||
import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled
|
import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
@ -22,19 +20,12 @@ import kotlinx.coroutines.test.StandardTestDispatcher
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.matrix.rustcomponents.sdk.EventTimelineItem
|
|
||||||
import org.matrix.rustcomponents.sdk.Membership
|
|
||||||
import org.matrix.rustcomponents.sdk.NoPointer
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomHero
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomInfo
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomList
|
import org.matrix.rustcomponents.sdk.RoomList
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate
|
import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate
|
||||||
import org.matrix.rustcomponents.sdk.RoomListItem
|
import org.matrix.rustcomponents.sdk.RoomListItem
|
||||||
import org.matrix.rustcomponents.sdk.RoomListServiceInterface
|
import org.matrix.rustcomponents.sdk.RoomListServiceInterface
|
||||||
import org.matrix.rustcomponents.sdk.RoomListServiceStateListener
|
import org.matrix.rustcomponents.sdk.RoomListServiceStateListener
|
||||||
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
|
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
|
||||||
import org.matrix.rustcomponents.sdk.RoomMember
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomNotificationMode
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomSubscription
|
import org.matrix.rustcomponents.sdk.RoomSubscription
|
||||||
import org.matrix.rustcomponents.sdk.TaskHandle
|
import org.matrix.rustcomponents.sdk.TaskHandle
|
||||||
|
|
||||||
|
|
@ -48,7 +39,7 @@ class RoomSummaryListProcessorTest {
|
||||||
summaries.value = listOf(aRoomSummary())
|
summaries.value = listOf(aRoomSummary())
|
||||||
val processor = createProcessor()
|
val processor = createProcessor()
|
||||||
|
|
||||||
val newEntry = FakeRoomListItem(A_ROOM_ID_2)
|
val newEntry = FakeRustRoomListItem(A_ROOM_ID_2)
|
||||||
processor.postUpdate(listOf(RoomListEntriesUpdate.Append(listOf(newEntry, newEntry, newEntry))))
|
processor.postUpdate(listOf(RoomListEntriesUpdate.Append(listOf(newEntry, newEntry, newEntry))))
|
||||||
|
|
||||||
assertThat(summaries.value.count()).isEqualTo(4)
|
assertThat(summaries.value.count()).isEqualTo(4)
|
||||||
|
|
@ -59,7 +50,7 @@ class RoomSummaryListProcessorTest {
|
||||||
fun `PushBack adds a new entry at the end of the list`() = runTest {
|
fun `PushBack adds a new entry at the end of the list`() = runTest {
|
||||||
summaries.value = listOf(aRoomSummaryFilled())
|
summaries.value = listOf(aRoomSummaryFilled())
|
||||||
val processor = createProcessor()
|
val processor = createProcessor()
|
||||||
processor.postUpdate(listOf(RoomListEntriesUpdate.PushBack(FakeRoomListItem(A_ROOM_ID_2))))
|
processor.postUpdate(listOf(RoomListEntriesUpdate.PushBack(FakeRustRoomListItem(A_ROOM_ID_2))))
|
||||||
|
|
||||||
assertThat(summaries.value.count()).isEqualTo(2)
|
assertThat(summaries.value.count()).isEqualTo(2)
|
||||||
assertThat(summaries.value.last().roomId).isEqualTo(A_ROOM_ID_2)
|
assertThat(summaries.value.last().roomId).isEqualTo(A_ROOM_ID_2)
|
||||||
|
|
@ -69,7 +60,7 @@ class RoomSummaryListProcessorTest {
|
||||||
fun `PushFront inserts a new entry at the start of the list`() = runTest {
|
fun `PushFront inserts a new entry at the start of the list`() = runTest {
|
||||||
summaries.value = listOf(aRoomSummaryFilled())
|
summaries.value = listOf(aRoomSummaryFilled())
|
||||||
val processor = createProcessor()
|
val processor = createProcessor()
|
||||||
processor.postUpdate(listOf(RoomListEntriesUpdate.PushFront(FakeRoomListItem(A_ROOM_ID_2))))
|
processor.postUpdate(listOf(RoomListEntriesUpdate.PushFront(FakeRustRoomListItem(A_ROOM_ID_2))))
|
||||||
|
|
||||||
assertThat(summaries.value.count()).isEqualTo(2)
|
assertThat(summaries.value.count()).isEqualTo(2)
|
||||||
assertThat(summaries.value.first().roomId).isEqualTo(A_ROOM_ID_2)
|
assertThat(summaries.value.first().roomId).isEqualTo(A_ROOM_ID_2)
|
||||||
|
|
@ -81,7 +72,7 @@ class RoomSummaryListProcessorTest {
|
||||||
val processor = createProcessor()
|
val processor = createProcessor()
|
||||||
val index = 0
|
val index = 0
|
||||||
|
|
||||||
processor.postUpdate(listOf(RoomListEntriesUpdate.Set(index.toUInt(), FakeRoomListItem(A_ROOM_ID_2))))
|
processor.postUpdate(listOf(RoomListEntriesUpdate.Set(index.toUInt(), FakeRustRoomListItem(A_ROOM_ID_2))))
|
||||||
|
|
||||||
assertThat(summaries.value.count()).isEqualTo(1)
|
assertThat(summaries.value.count()).isEqualTo(1)
|
||||||
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
|
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
|
||||||
|
|
@ -93,7 +84,7 @@ class RoomSummaryListProcessorTest {
|
||||||
val processor = createProcessor()
|
val processor = createProcessor()
|
||||||
val index = 0
|
val index = 0
|
||||||
|
|
||||||
processor.postUpdate(listOf(RoomListEntriesUpdate.Insert(index.toUInt(), FakeRoomListItem(A_ROOM_ID_2))))
|
processor.postUpdate(listOf(RoomListEntriesUpdate.Insert(index.toUInt(), FakeRustRoomListItem(A_ROOM_ID_2))))
|
||||||
|
|
||||||
assertThat(summaries.value.count()).isEqualTo(2)
|
assertThat(summaries.value.count()).isEqualTo(2)
|
||||||
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
|
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
|
||||||
|
|
@ -185,85 +176,3 @@ class RoomSummaryListProcessorTest {
|
||||||
override fun subscribeToRooms(roomIds: List<String>, settings: RoomSubscription?) = Unit
|
override fun subscribeToRooms(roomIds: List<String>, settings: RoomSubscription?) = Unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun aRustRoomInfo(
|
|
||||||
id: String = A_ROOM_ID.value,
|
|
||||||
displayName: String = A_ROOM_NAME,
|
|
||||||
rawName: String = A_ROOM_NAME,
|
|
||||||
topic: String? = null,
|
|
||||||
avatarUrl: String? = null,
|
|
||||||
isDirect: Boolean = false,
|
|
||||||
isPublic: Boolean = false,
|
|
||||||
isSpace: Boolean = false,
|
|
||||||
isTombstoned: Boolean = false,
|
|
||||||
isFavourite: Boolean = false,
|
|
||||||
canonicalAlias: String? = null,
|
|
||||||
alternativeAliases: List<String> = listOf(),
|
|
||||||
membership: Membership = Membership.JOINED,
|
|
||||||
inviter: RoomMember? = null,
|
|
||||||
heroes: List<RoomHero> = listOf(),
|
|
||||||
activeMembersCount: ULong = 0uL,
|
|
||||||
invitedMembersCount: ULong = 0uL,
|
|
||||||
joinedMembersCount: ULong = 0uL,
|
|
||||||
userPowerLevels: Map<String, Long> = mapOf(),
|
|
||||||
highlightCount: ULong = 0uL,
|
|
||||||
notificationCount: ULong = 0uL,
|
|
||||||
userDefinedNotificationMode: RoomNotificationMode? = null,
|
|
||||||
hasRoomCall: Boolean = false,
|
|
||||||
activeRoomCallParticipants: List<String> = listOf(),
|
|
||||||
isMarkedUnread: Boolean = false,
|
|
||||||
numUnreadMessages: ULong = 0uL,
|
|
||||||
numUnreadNotifications: ULong = 0uL,
|
|
||||||
numUnreadMentions: ULong = 0uL,
|
|
||||||
pinnedEventIds: List<String> = listOf(),
|
|
||||||
roomCreator: UserId? = null,
|
|
||||||
) = RoomInfo(
|
|
||||||
id = id,
|
|
||||||
displayName = displayName,
|
|
||||||
rawName = rawName,
|
|
||||||
topic = topic,
|
|
||||||
avatarUrl = avatarUrl,
|
|
||||||
isDirect = isDirect,
|
|
||||||
isPublic = isPublic,
|
|
||||||
isSpace = isSpace,
|
|
||||||
isTombstoned = isTombstoned,
|
|
||||||
isFavourite = isFavourite,
|
|
||||||
canonicalAlias = canonicalAlias,
|
|
||||||
alternativeAliases = alternativeAliases,
|
|
||||||
membership = membership,
|
|
||||||
inviter = inviter,
|
|
||||||
heroes = heroes,
|
|
||||||
activeMembersCount = activeMembersCount,
|
|
||||||
invitedMembersCount = invitedMembersCount,
|
|
||||||
joinedMembersCount = joinedMembersCount,
|
|
||||||
userPowerLevels = userPowerLevels,
|
|
||||||
highlightCount = highlightCount,
|
|
||||||
notificationCount = notificationCount,
|
|
||||||
cachedUserDefinedNotificationMode = userDefinedNotificationMode,
|
|
||||||
hasRoomCall = hasRoomCall,
|
|
||||||
activeRoomCallParticipants = activeRoomCallParticipants,
|
|
||||||
isMarkedUnread = isMarkedUnread,
|
|
||||||
numUnreadMessages = numUnreadMessages,
|
|
||||||
numUnreadNotifications = numUnreadNotifications,
|
|
||||||
numUnreadMentions = numUnreadMentions,
|
|
||||||
pinnedEventIds = pinnedEventIds,
|
|
||||||
creator = roomCreator?.value,
|
|
||||||
)
|
|
||||||
|
|
||||||
class FakeRoomListItem(
|
|
||||||
private val roomId: RoomId,
|
|
||||||
private val roomInfo: RoomInfo = aRustRoomInfo(id = roomId.value),
|
|
||||||
private val latestEvent: EventTimelineItem? = null,
|
|
||||||
) : RoomListItem(NoPointer) {
|
|
||||||
override fun id(): String {
|
|
||||||
return roomId.value
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun roomInfo(): RoomInfo {
|
|
||||||
return roomInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun latestEvent(): EventTimelineItem? {
|
|
||||||
return latestEvent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue