mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Moderation tweaks (#2548)
* Only allow admins to see the roles and permissions screen. * Hide the selection checkbox on Admins when changing roles. * Show an empty state for banned users. * Add separate actions for ban and remove. * Implement reset permissions and demote self alerts. * Add tests for resetting permissions and demoting self. * Add a warning when promoting someone to administrator.
This commit is contained in:
@@ -2750,6 +2750,44 @@ class RoomProxyMock: RoomProxyProtocol {
|
||||
return applyPowerLevelChangesReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - resetPowerLevels
|
||||
|
||||
var resetPowerLevelsCallsCount = 0
|
||||
var resetPowerLevelsCalled: Bool {
|
||||
return resetPowerLevelsCallsCount > 0
|
||||
}
|
||||
var resetPowerLevelsReturnValue: Result<RoomPowerLevels, RoomProxyError>!
|
||||
var resetPowerLevelsClosure: (() async -> Result<RoomPowerLevels, RoomProxyError>)?
|
||||
|
||||
func resetPowerLevels() async -> Result<RoomPowerLevels, RoomProxyError> {
|
||||
resetPowerLevelsCallsCount += 1
|
||||
if let resetPowerLevelsClosure = resetPowerLevelsClosure {
|
||||
return await resetPowerLevelsClosure()
|
||||
} else {
|
||||
return resetPowerLevelsReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - suggestedRole
|
||||
|
||||
var suggestedRoleForCallsCount = 0
|
||||
var suggestedRoleForCalled: Bool {
|
||||
return suggestedRoleForCallsCount > 0
|
||||
}
|
||||
var suggestedRoleForReceivedUserID: String?
|
||||
var suggestedRoleForReceivedInvocations: [String] = []
|
||||
var suggestedRoleForReturnValue: Result<RoomMemberRole, RoomProxyError>!
|
||||
var suggestedRoleForClosure: ((String) async -> Result<RoomMemberRole, RoomProxyError>)?
|
||||
|
||||
func suggestedRole(for userID: String) async -> Result<RoomMemberRole, RoomProxyError> {
|
||||
suggestedRoleForCallsCount += 1
|
||||
suggestedRoleForReceivedUserID = userID
|
||||
suggestedRoleForReceivedInvocations.append(userID)
|
||||
if let suggestedRoleForClosure = suggestedRoleForClosure {
|
||||
return await suggestedRoleForClosure(userID)
|
||||
} else {
|
||||
return suggestedRoleForReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - updatePowerLevelsForUsers
|
||||
|
||||
var updatePowerLevelsForUsersCallsCount = 0
|
||||
|
||||
@@ -42,7 +42,6 @@ struct RoomProxyMockConfiguration {
|
||||
}()
|
||||
|
||||
var members: [RoomMemberProxyMock] = .allMembers
|
||||
var memberForID: RoomMemberProxyMock = .mockMe
|
||||
var ownUserID = RoomMemberProxyMock.mockMe.userID
|
||||
|
||||
var canUserInvite = true
|
||||
@@ -81,7 +80,12 @@ extension RoomProxyMock {
|
||||
underlyingActionsPublisher = Empty(completeImmediately: false).eraseToAnyPublisher()
|
||||
setNameClosure = { _ in .success(()) }
|
||||
setTopicClosure = { _ in .success(()) }
|
||||
getMemberUserIDReturnValue = .success(configuration.memberForID)
|
||||
getMemberUserIDClosure = { [weak self] userID in
|
||||
guard let member = self?.membersPublisher.value.first(where: { $0.userID == userID }) else {
|
||||
return .failure(.failedRetrievingMember)
|
||||
}
|
||||
return .success(member)
|
||||
}
|
||||
|
||||
flagAsUnreadReturnValue = .success(())
|
||||
markAsReadReceiptTypeReturnValue = .success(())
|
||||
@@ -90,6 +94,13 @@ extension RoomProxyMock {
|
||||
|
||||
powerLevelsReturnValue = .success(.mock)
|
||||
applyPowerLevelChangesReturnValue = .success(())
|
||||
resetPowerLevelsReturnValue = .success(.mock)
|
||||
suggestedRoleForClosure = { [weak self] userID in
|
||||
guard case .success(let member) = await self?.getMember(userID: userID) else {
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
return .success(member.role)
|
||||
}
|
||||
updatePowerLevelsForUsersReturnValue = .success(())
|
||||
canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
|
||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
||||
|
||||
Reference in New Issue
Block a user