Adopt the lastest SDK APIs and refactor how we deal with user permissions.

This patch introduces a new RoomPowerLevelsProxy and its associated mock and adopts newer Rust APIs to make working with user power levels and permissions easier.
This commit is contained in:
Stefan Ceriu
2025-06-20 14:20:01 +03:00
committed by Stefan Ceriu
parent 96e5ed06f5
commit f522e15dac
25 changed files with 1863 additions and 1660 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -89,9 +89,8 @@ extension JoinedRoomProxyMock {
markAsReadReceiptTypeReturnValue = .success(())
flagAsFavouriteReturnValue = .success(())
powerLevelsReturnValue = .success(.mock)
applyPowerLevelChangesReturnValue = .success(())
resetPowerLevelsReturnValue = .success(.mock)
resetPowerLevelsReturnValue = .success(())
suggestedRoleForClosure = { [weak self] userID in
guard case .success(let member) = await self?.getMember(userID: userID) else {
return .failure(.sdkError(RoomProxyMockError.generic))
@@ -99,22 +98,27 @@ extension JoinedRoomProxyMock {
return .success(member.role)
}
updatePowerLevelsForUsersReturnValue = .success(())
canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
let powerLevelsProxyMock = RoomPowerLevelsProxyMock(configuration: .init())
powerLevelsProxyMock.canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
powerLevelsProxyMock.canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
}
canUserInviteUserIDReturnValue = .success(configuration.canUserInvite)
canUserRedactOtherUserIDReturnValue = .success(false)
canUserRedactOwnUserIDReturnValue = .success(true)
canUserKickUserIDClosure = { [weak self] userID in
powerLevelsProxyMock.canUserInviteUserIDReturnValue = .success(configuration.canUserInvite)
powerLevelsProxyMock.canUserRedactOtherUserIDReturnValue = .success(false)
powerLevelsProxyMock.canUserRedactOwnUserIDReturnValue = .success(true)
powerLevelsProxyMock.canUserKickUserIDClosure = { [weak self] userID in
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
}
canUserBanUserIDClosure = { [weak self] userID in
powerLevelsProxyMock.canUserBanUserIDClosure = { [weak self] userID in
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
}
canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification)
canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall)
canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin)
powerLevelsProxyMock.canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification)
powerLevelsProxyMock.canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall)
powerLevelsProxyMock.canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin)
powerLevelsReturnValue = .success(powerLevelsProxyMock)
kickUserReasonReturnValue = .success(())
banUserReasonReturnValue = .success(())
@@ -0,0 +1,44 @@
//
// Copyright 2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//
import MatrixRustSDK
extension RoomPowerLevelsProxyMock {
struct Configuration { }
convenience init(configuration: Configuration) {
self.init()
underlyingValues = RoomPowerLevelsValues.mock
canUserUserIDSendMessageReturnValue = .success(true)
canUserUserIDSendStateEventReturnValue = .success(true)
canUserInviteUserIDReturnValue = .success(true)
canUserRedactOtherUserIDReturnValue = .success(true)
canUserRedactOwnUserIDReturnValue = .success(true)
canUserKickUserIDReturnValue = .success(true)
canUserBanUserIDReturnValue = .success(true)
canUserTriggerRoomNotificationUserIDReturnValue = .success(true)
canUserPinOrUnpinUserIDReturnValue = .success(true)
canUserJoinCallUserIDReturnValue = .success(true)
}
}
extension RoomPowerLevelsValues {
static var mock: RoomPowerLevelsValues {
RoomPowerLevelsValues(ban: 50,
invite: 0,
kick: 50,
redact: 50,
eventsDefault: 0,
stateDefault: 50,
usersDefault: 0,
roomName: 50,
roomAvatar: 50,
roomTopic: 50)
}
}