mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Kick/ban room members (#2501)
* Add a temporary membershipChangePublisher on the timeline. * Kick/Ban users from a room. * Unit tests. * Disable autocorrection on the members list search field.
This commit is contained in:
@@ -1750,6 +1750,11 @@ class RoomMemberProxyMock: RoomMemberProxyProtocol {
|
||||
set(value) { underlyingCanInviteUsers = value }
|
||||
}
|
||||
var underlyingCanInviteUsers: Bool!
|
||||
var canKickUsers: Bool {
|
||||
get { return underlyingCanKickUsers }
|
||||
set(value) { underlyingCanKickUsers = value }
|
||||
}
|
||||
var underlyingCanKickUsers: Bool!
|
||||
var canBanUsers: Bool {
|
||||
get { return underlyingCanBanUsers }
|
||||
set(value) { underlyingCanBanUsers = value }
|
||||
@@ -2338,6 +2343,69 @@ class RoomProxyMock: RoomProxyProtocol {
|
||||
return flagAsFavouriteReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - kickUser
|
||||
|
||||
var kickUserCallsCount = 0
|
||||
var kickUserCalled: Bool {
|
||||
return kickUserCallsCount > 0
|
||||
}
|
||||
var kickUserReceivedUserID: String?
|
||||
var kickUserReceivedInvocations: [String] = []
|
||||
var kickUserReturnValue: Result<Void, RoomProxyError>!
|
||||
var kickUserClosure: ((String) async -> Result<Void, RoomProxyError>)?
|
||||
|
||||
func kickUser(_ userID: String) async -> Result<Void, RoomProxyError> {
|
||||
kickUserCallsCount += 1
|
||||
kickUserReceivedUserID = userID
|
||||
kickUserReceivedInvocations.append(userID)
|
||||
if let kickUserClosure = kickUserClosure {
|
||||
return await kickUserClosure(userID)
|
||||
} else {
|
||||
return kickUserReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - banUser
|
||||
|
||||
var banUserCallsCount = 0
|
||||
var banUserCalled: Bool {
|
||||
return banUserCallsCount > 0
|
||||
}
|
||||
var banUserReceivedUserID: String?
|
||||
var banUserReceivedInvocations: [String] = []
|
||||
var banUserReturnValue: Result<Void, RoomProxyError>!
|
||||
var banUserClosure: ((String) async -> Result<Void, RoomProxyError>)?
|
||||
|
||||
func banUser(_ userID: String) async -> Result<Void, RoomProxyError> {
|
||||
banUserCallsCount += 1
|
||||
banUserReceivedUserID = userID
|
||||
banUserReceivedInvocations.append(userID)
|
||||
if let banUserClosure = banUserClosure {
|
||||
return await banUserClosure(userID)
|
||||
} else {
|
||||
return banUserReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - unbanUser
|
||||
|
||||
var unbanUserCallsCount = 0
|
||||
var unbanUserCalled: Bool {
|
||||
return unbanUserCallsCount > 0
|
||||
}
|
||||
var unbanUserReceivedUserID: String?
|
||||
var unbanUserReceivedInvocations: [String] = []
|
||||
var unbanUserReturnValue: Result<Void, RoomProxyError>!
|
||||
var unbanUserClosure: ((String) async -> Result<Void, RoomProxyError>)?
|
||||
|
||||
func unbanUser(_ userID: String) async -> Result<Void, RoomProxyError> {
|
||||
unbanUserCallsCount += 1
|
||||
unbanUserReceivedUserID = userID
|
||||
unbanUserReceivedInvocations.append(userID)
|
||||
if let unbanUserClosure = unbanUserClosure {
|
||||
return await unbanUserClosure(userID)
|
||||
} else {
|
||||
return unbanUserReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - canUserJoinCall
|
||||
|
||||
var canUserJoinCallUserIDCallsCount = 0
|
||||
@@ -2389,6 +2457,11 @@ class RoomTimelineProviderMock: RoomTimelineProviderProtocol {
|
||||
set(value) { underlyingBackPaginationState = value }
|
||||
}
|
||||
var underlyingBackPaginationState: BackPaginationStatus!
|
||||
var membershipChangePublisher: AnyPublisher<Void, Never> {
|
||||
get { return underlyingMembershipChangePublisher }
|
||||
set(value) { underlyingMembershipChangePublisher = value }
|
||||
}
|
||||
var underlyingMembershipChangePublisher: AnyPublisher<Void, Never>!
|
||||
|
||||
}
|
||||
class SecureBackupControllerMock: SecureBackupControllerProtocol {
|
||||
|
||||
@@ -27,6 +27,7 @@ struct RoomMemberProxyMockConfiguration {
|
||||
var powerLevel = 0
|
||||
var role = RoomMemberRole.user
|
||||
var canInviteUsers = false
|
||||
var canKickUsers = false
|
||||
var canBanUsers = false
|
||||
var canSendStateEvent: (StateEventType) -> Bool = { _ in true }
|
||||
}
|
||||
@@ -43,6 +44,7 @@ extension RoomMemberProxyMock {
|
||||
powerLevel = configuration.powerLevel
|
||||
role = configuration.role
|
||||
canInviteUsers = configuration.canInviteUsers
|
||||
canKickUsers = configuration.canKickUsers
|
||||
canBanUsers = configuration.canBanUsers
|
||||
canSendStateEventTypeClosure = configuration.canSendStateEvent
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
import Combine
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
struct RoomProxyMockConfiguration {
|
||||
var id = UUID().uuidString
|
||||
var name: String?
|
||||
@@ -33,6 +34,10 @@ struct RoomProxyMockConfiguration {
|
||||
let mock = TimelineProxyMock()
|
||||
mock.underlyingActions = Empty(completeImmediately: false).eraseToAnyPublisher()
|
||||
mock.timelineStartReached = false
|
||||
|
||||
let timelineProvider = RoomTimelineProviderMock()
|
||||
timelineProvider.underlyingMembershipChangePublisher = PassthroughSubject().eraseToAnyPublisher()
|
||||
mock.underlyingTimelineProvider = timelineProvider
|
||||
return mock
|
||||
}()
|
||||
|
||||
@@ -45,6 +50,7 @@ struct RoomProxyMockConfiguration {
|
||||
}
|
||||
|
||||
extension RoomProxyMock {
|
||||
@MainActor
|
||||
convenience init(with configuration: RoomProxyMockConfiguration) {
|
||||
self.init()
|
||||
|
||||
@@ -84,6 +90,10 @@ extension RoomProxyMock {
|
||||
underlyingIsFavourite = false
|
||||
flagAsFavouriteReturnValue = .success(())
|
||||
|
||||
kickUserReturnValue = .success(())
|
||||
banUserReturnValue = .success(())
|
||||
unbanUserReturnValue = .success(())
|
||||
|
||||
let widgetDriver = ElementCallWidgetDriverMock()
|
||||
widgetDriver.underlyingMessagePublisher = .init()
|
||||
widgetDriver.underlyingActions = PassthroughSubject().eraseToAnyPublisher()
|
||||
|
||||
Reference in New Issue
Block a user