Add a view to show the user's account from Element Classic. (#5361)

No presentation logic yet.
This commit is contained in:
Doug
2026-04-08 21:18:03 +01:00
committed by GitHub
parent f21e8cb892
commit 1a5a709e27
19 changed files with 588 additions and 26 deletions
@@ -0,0 +1,41 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import Foundation
import MatrixRustSDK
extension ClassicAppManagerMock {
struct Configuration { }
convenience init(_ configuration: Configuration) {
self.init()
}
}
extension ClassicAppAccount {
static var mockAlice: ClassicAppAccount {
ClassicAppAccount(userID: "@alice:matrix.org",
displayName: "Alice",
avatarURL: nil,
serverName: "matrix.org",
homeserverURL: "https://matrix-client.matrix.org/",
cryptoStoreURL: .cachesDirectory,
cryptoStorePassphrase: "1234567890",
accessToken: "accessToken")
}
static var mockDan: ClassicAppAccount {
ClassicAppAccount(userID: "@dan:matrix.org",
displayName: "Dan",
avatarURL: .mockMXCUserAvatar,
serverName: "matrix.org",
homeserverURL: "https://matrix-client.matrix.org/",
cryptoStoreURL: .cachesDirectory,
cryptoStorePassphrase: "1234567890",
accessToken: "accessToken")
}
}
@@ -2239,6 +2239,77 @@ class CXProviderMock: CXProviderProtocol, @unchecked Sendable {
reportCallWithEndedAtReasonClosure?(uuid, endedAt, reason)
}
}
class ClassicAppManagerMock: ClassicAppManagerProtocol, @unchecked Sendable {
//MARK: - loadAccounts
var loadAccountsThrowableError: Error?
var loadAccountsUnderlyingCallsCount = 0
var loadAccountsCallsCount: Int {
get {
if Thread.isMainThread {
return loadAccountsUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = loadAccountsUnderlyingCallsCount
}
return returnValue!
}
}
set {
if Thread.isMainThread {
loadAccountsUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
loadAccountsUnderlyingCallsCount = newValue
}
}
}
}
var loadAccountsCalled: Bool {
return loadAccountsCallsCount > 0
}
var loadAccountsUnderlyingReturnValue: [ClassicAppAccount]!
var loadAccountsReturnValue: [ClassicAppAccount]! {
get {
if Thread.isMainThread {
return loadAccountsUnderlyingReturnValue
} else {
var returnValue: [ClassicAppAccount]? = nil
DispatchQueue.main.sync {
returnValue = loadAccountsUnderlyingReturnValue
}
return returnValue!
}
}
set {
if Thread.isMainThread {
loadAccountsUnderlyingReturnValue = newValue
} else {
DispatchQueue.main.sync {
loadAccountsUnderlyingReturnValue = newValue
}
}
}
}
var loadAccountsClosure: (() throws -> [ClassicAppAccount])?
func loadAccounts() throws -> [ClassicAppAccount] {
if let error = loadAccountsThrowableError {
throw error
}
loadAccountsCallsCount += 1
if let loadAccountsClosure = loadAccountsClosure {
return try loadAccountsClosure()
} else {
return loadAccountsReturnValue
}
}
}
class ClientProxyMock: ClientProxyProtocol, @unchecked Sendable {
var actionsPublisher: AnyPublisher<ClientProxyAction, Never> {
get { return underlyingActionsPublisher }