diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt index abb24fc153..71ed8b83be 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt @@ -53,7 +53,7 @@ fun aRoomInfo( notificationCount: Long = 0, userDefinedNotificationMode: RoomNotificationMode? = null, hasRoomCall: Boolean = false, - roomPowerLevels: RoomPowerLevels = RoomPowerLevels( + roomPowerLevels: RoomPowerLevels? = RoomPowerLevels( values = defaultRoomPowerLevelValues(), users = persistentMapOf(), ), diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt index 52e7d43085..f9a86c9bd7 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt @@ -23,12 +23,12 @@ fun RoomInfo.getAvatarData(size: AvatarSize) = AvatarData( /** * Returns the role of the user in the room. - * If the user is a creator, returns [RoomMember.Role.Owner]. + * If the user is a creator and [RoomInfo.privilegedCreatorRole] is true, returns [RoomMember.Role.Owner]. * Otherwise, checks the power levels and returns the corresponding role. * If no specific power level is set for the user, defaults to [RoomMember.Role.User]. */ fun RoomInfo.roleOf(userId: UserId): RoomMember.Role { - return if (creators.contains(userId)) { + return if (privilegedCreatorRole && creators.contains(userId)) { RoomMember.Role.Owner(isCreator = true) } else { roomPowerLevels?.roleOf(userId) ?: RoomMember.Role.User diff --git a/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtensionTest.kt b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtensionTest.kt new file mode 100644 index 0000000000..c6dcc27bba --- /dev/null +++ b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtensionTest.kt @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.matrix.ui.model + +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.room.RoomMember +import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels +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_3 +import io.element.android.libraries.matrix.test.room.aRoomInfo +import io.element.android.libraries.matrix.test.room.defaultRoomPowerLevelValues +import kotlinx.collections.immutable.toImmutableMap +import org.junit.Test + +class RoomInfoExtensionTest { + @Test + fun `roleOf returns Owner for creator with privilegedCreatorRole true`() { + val roomInfo = aRoomInfo( + privilegedCreatorRole = true, + roomCreators = listOf(A_USER_ID), + ) + assertThat(roomInfo.roleOf(A_USER_ID)).isEqualTo(RoomMember.Role.Owner(isCreator = true)) + } + + @Test + fun `roleOf returns User for not creator with privilegedCreatorRole true`() { + val roomInfo = aRoomInfo( + privilegedCreatorRole = true, + roomCreators = listOf(A_USER_ID), + ) + assertThat(roomInfo.roleOf(A_USER_ID_2)).isEqualTo(RoomMember.Role.User) + } + + @Test + fun `roleOf returns User for creator with privilegedCreatorRole false`() { + val roomInfo = aRoomInfo( + privilegedCreatorRole = false, + roomCreators = listOf(A_USER_ID), + ) + assertThat(roomInfo.roleOf(A_USER_ID)).isEqualTo(RoomMember.Role.User) + } + + @Test + fun `roleOf returns role from the power level`() { + val roomInfo = aRoomInfo( + privilegedCreatorRole = false, + roomPowerLevels = RoomPowerLevels( + values = defaultRoomPowerLevelValues(), + users = mapOf( + A_USER_ID to 100L, // Admin + A_USER_ID_2 to 50L, // Moderator + A_USER_ID_3 to 0L, // User + ).toImmutableMap(), + ), + roomCreators = listOf(A_USER_ID), + ) + assertThat(roomInfo.roleOf(A_USER_ID)).isEqualTo(RoomMember.Role.Admin) + assertThat(roomInfo.roleOf(A_USER_ID_2)).isEqualTo(RoomMember.Role.Moderator) + assertThat(roomInfo.roleOf(A_USER_ID_3)).isEqualTo(RoomMember.Role.User) + } + + @Test + fun `roleOf returns User when the power level is null`() { + val roomInfo = aRoomInfo( + privilegedCreatorRole = false, + roomPowerLevels = null, + roomCreators = listOf(A_USER_ID), + ) + assertThat(roomInfo.roleOf(A_USER_ID)).isEqualTo(RoomMember.Role.User) + assertThat(roomInfo.roleOf(A_USER_ID_2)).isEqualTo(RoomMember.Role.User) + assertThat(roomInfo.roleOf(A_USER_ID_3)).isEqualTo(RoomMember.Role.User) + } +}