Knocking feature polishing part 2 (#3738)

* improved implementation of the unknown state

* forget button in the banned state

* error handling for forbidden access

* added the forget function

fixed DMs, and updated preview tests

* removed banned room proxy

* code polishing and test improvement
This commit is contained in:
Mauro
2025-02-05 14:48:24 +01:00
committed by GitHub
parent cfaa1b455a
commit 3839025caa
28 changed files with 466 additions and 101 deletions
@@ -13393,6 +13393,70 @@ class RoomPreviewProxyMock: RoomPreviewProxyProtocol, @unchecked Sendable {
var underlyingOwnMembershipDetails: RoomMembershipDetailsProxyProtocol?
var ownMembershipDetailsClosure: (() async -> RoomMembershipDetailsProxyProtocol?)?
//MARK: - forgetRoom
var forgetRoomUnderlyingCallsCount = 0
var forgetRoomCallsCount: Int {
get {
if Thread.isMainThread {
return forgetRoomUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = forgetRoomUnderlyingCallsCount
}
return returnValue!
}
}
set {
if Thread.isMainThread {
forgetRoomUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
forgetRoomUnderlyingCallsCount = newValue
}
}
}
}
var forgetRoomCalled: Bool {
return forgetRoomCallsCount > 0
}
var forgetRoomUnderlyingReturnValue: Result<Void, RoomProxyError>!
var forgetRoomReturnValue: Result<Void, RoomProxyError>! {
get {
if Thread.isMainThread {
return forgetRoomUnderlyingReturnValue
} else {
var returnValue: Result<Void, RoomProxyError>? = nil
DispatchQueue.main.sync {
returnValue = forgetRoomUnderlyingReturnValue
}
return returnValue!
}
}
set {
if Thread.isMainThread {
forgetRoomUnderlyingReturnValue = newValue
} else {
DispatchQueue.main.sync {
forgetRoomUnderlyingReturnValue = newValue
}
}
}
}
var forgetRoomClosure: (() async -> Result<Void, RoomProxyError>)?
func forgetRoom() async -> Result<Void, RoomProxyError> {
forgetRoomCallsCount += 1
if let forgetRoomClosure = forgetRoomClosure {
return await forgetRoomClosure()
} else {
return forgetRoomReturnValue
}
}
}
class RoomProxyMock: RoomProxyProtocol, @unchecked Sendable {
var id: String {
@@ -11429,6 +11429,46 @@ open class RoomSDKMock: MatrixRustSDK.Room, @unchecked Sendable {
enableSendQueueEnableClosure?(enable)
}
//MARK: - forget
open var forgetThrowableError: Error?
var forgetUnderlyingCallsCount = 0
open var forgetCallsCount: Int {
get {
if Thread.isMainThread {
return forgetUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = forgetUnderlyingCallsCount
}
return returnValue!
}
}
set {
if Thread.isMainThread {
forgetUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
forgetUnderlyingCallsCount = newValue
}
}
}
}
open var forgetCalled: Bool {
return forgetCallsCount > 0
}
open var forgetClosure: (() async throws -> Void)?
open override func forget() async throws {
if let error = forgetThrowableError {
throw error
}
forgetCallsCount += 1
try await forgetClosure?()
}
//MARK: - getPowerLevels
open var getPowerLevelsThrowableError: Error?
@@ -19421,6 +19461,71 @@ open class SyncServiceBuilderSDKMock: MatrixRustSDK.SyncServiceBuilder, @uncheck
}
}
//MARK: - withOfflineMode
var withOfflineModeUnderlyingCallsCount = 0
open var withOfflineModeCallsCount: Int {
get {
if Thread.isMainThread {
return withOfflineModeUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = withOfflineModeUnderlyingCallsCount
}
return returnValue!
}
}
set {
if Thread.isMainThread {
withOfflineModeUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
withOfflineModeUnderlyingCallsCount = newValue
}
}
}
}
open var withOfflineModeCalled: Bool {
return withOfflineModeCallsCount > 0
}
var withOfflineModeUnderlyingReturnValue: SyncServiceBuilder!
open var withOfflineModeReturnValue: SyncServiceBuilder! {
get {
if Thread.isMainThread {
return withOfflineModeUnderlyingReturnValue
} else {
var returnValue: SyncServiceBuilder? = nil
DispatchQueue.main.sync {
returnValue = withOfflineModeUnderlyingReturnValue
}
return returnValue!
}
}
set {
if Thread.isMainThread {
withOfflineModeUnderlyingReturnValue = newValue
} else {
DispatchQueue.main.sync {
withOfflineModeUnderlyingReturnValue = newValue
}
}
}
}
open var withOfflineModeClosure: (() -> SyncServiceBuilder)?
open override func withOfflineMode() -> SyncServiceBuilder {
withOfflineModeCallsCount += 1
if let withOfflineModeClosure = withOfflineModeClosure {
return withOfflineModeClosure()
} else {
return withOfflineModeReturnValue
}
}
//MARK: - withUtdHook
var withUtdHookDelegateUnderlyingCallsCount = 0
@@ -13,13 +13,14 @@ extension RoomPreviewProxyMock {
var roomID = "1"
var canonicalAlias = "#3🌞problem:matrix.org"
var name = "The Three-Body Problem - 三体"
var topic = "“Science and technology were the only keys to opening the door to the future, and people approached science with the faith and sincerity of elementary school students.”"
var topic: String? = "“Science and technology were the only keys to opening the door to the future, and people approached science with the faith and sincerity of elementary school students.”"
var avatarURL = URL.mockMXCAvatar.absoluteString
var numJoinedMembers = UInt64(100)
var numActiveMembers = UInt64(100)
var roomType = RoomType.room
var membership: Membership?
var joinRule: JoinRule
var isDirect = false
}
static var joinable: RoomPreviewProxyMock {
@@ -42,6 +43,14 @@ extension RoomPreviewProxyMock {
return .init(.init(membership: .invited, joinRule: .invite))
}
static func inviteDM(roomID: String? = nil) -> RoomPreviewProxyMock {
if let roomID {
return .init(.init(roomID: roomID, topic: nil, numJoinedMembers: 1, membership: .invited, joinRule: .invite, isDirect: true))
}
return .init(.init(topic: nil, numJoinedMembers: 1, membership: .invited, joinRule: .invite, isDirect: true))
}
static var knockable: RoomPreviewProxyMock {
.init(.init(membership: nil, joinRule: .knock))
}
@@ -71,7 +80,7 @@ extension RoomPreviewProxyMock {
isHistoryWorldReadable: nil,
membership: configuration.membership,
joinRule: configuration.joinRule,
isDirect: nil,
isDirect: configuration.isDirect,
heroes: nil))
let roomMembershipDetails = RoomMembershipDetailsProxyMock()