Disable the composer when you don't have the power to post. (#4076)

This commit is contained in:
Doug
2025-04-29 10:12:20 +01:00
committed by GitHub
parent 41b18cfd52
commit 58b982a8f8
15 changed files with 150 additions and 19 deletions
@@ -8593,6 +8593,76 @@ class JoinedRoomProxyMock: JoinedRoomProxyProtocol, @unchecked Sendable {
}
//MARK: - canUser
var canUserUserIDSendMessageUnderlyingCallsCount = 0
var canUserUserIDSendMessageCallsCount: Int {
get {
if Thread.isMainThread {
return canUserUserIDSendMessageUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = canUserUserIDSendMessageUnderlyingCallsCount
}
return returnValue!
}
}
set {
if Thread.isMainThread {
canUserUserIDSendMessageUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
canUserUserIDSendMessageUnderlyingCallsCount = newValue
}
}
}
}
var canUserUserIDSendMessageCalled: Bool {
return canUserUserIDSendMessageCallsCount > 0
}
var canUserUserIDSendMessageReceivedArguments: (userID: String, messageType: MessageLikeEventType)?
var canUserUserIDSendMessageReceivedInvocations: [(userID: String, messageType: MessageLikeEventType)] = []
var canUserUserIDSendMessageUnderlyingReturnValue: Result<Bool, RoomProxyError>!
var canUserUserIDSendMessageReturnValue: Result<Bool, RoomProxyError>! {
get {
if Thread.isMainThread {
return canUserUserIDSendMessageUnderlyingReturnValue
} else {
var returnValue: Result<Bool, RoomProxyError>? = nil
DispatchQueue.main.sync {
returnValue = canUserUserIDSendMessageUnderlyingReturnValue
}
return returnValue!
}
}
set {
if Thread.isMainThread {
canUserUserIDSendMessageUnderlyingReturnValue = newValue
} else {
DispatchQueue.main.sync {
canUserUserIDSendMessageUnderlyingReturnValue = newValue
}
}
}
}
var canUserUserIDSendMessageClosure: ((String, MessageLikeEventType) async -> Result<Bool, RoomProxyError>)?
func canUser(userID: String, sendMessage messageType: MessageLikeEventType) async -> Result<Bool, RoomProxyError> {
canUserUserIDSendMessageCallsCount += 1
canUserUserIDSendMessageReceivedArguments = (userID: userID, messageType: messageType)
DispatchQueue.main.async {
self.canUserUserIDSendMessageReceivedInvocations.append((userID: userID, messageType: messageType))
}
if let canUserUserIDSendMessageClosure = canUserUserIDSendMessageClosure {
return await canUserUserIDSendMessageClosure(userID, messageType)
} else {
return canUserUserIDSendMessageReturnValue
}
}
//MARK: - canUser
var canUserUserIDSendStateEventUnderlyingCallsCount = 0
var canUserUserIDSendStateEventCallsCount: Int {
get {
@@ -36,6 +36,7 @@ struct JoinedRoomProxyMockConfiguration {
var ownUserID = RoomMemberProxyMock.mockMe.userID
var inviter: RoomMemberProxyProtocol?
var canUserSendMessage = true
var canUserInvite = true
var canUserTriggerRoomNotification = false
var canUserJoinCall = true
@@ -91,6 +92,7 @@ extension JoinedRoomProxyMock {
return .success(member.role)
}
updatePowerLevelsForUsersReturnValue = .success(())
canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
}