diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 0cf1c0a32..7c5b7254b 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -111,8 +111,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/matrix-org/matrix-rust-components-swift", "state" : { - "revision" : "cc68dbd95a35a481a7398e7cc324e26917fd4022", - "version" : "1.0.47-alpha" + "revision" : "9eee9ba2f14eaa4981759295790bcbdbdebca747", + "version" : "1.0.48-alpha" } }, { diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index c5d21e794..9b3aab9b1 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -50,6 +50,36 @@ class BugReportServiceMock: BugReportServiceProtocol { } } } +class RoomMemberProxyMock: RoomMemberProxyProtocol { + var userID: String { + get { return underlyingUserID } + set(value) { underlyingUserID = value } + } + var underlyingUserID: String! + var displayName: String? + var avatarURL: URL? + var membership: MembershipState { + get { return underlyingMembership } + set(value) { underlyingMembership = value } + } + var underlyingMembership: MembershipState! + var isNameAmbiguous: Bool { + get { return underlyingIsNameAmbiguous } + set(value) { underlyingIsNameAmbiguous = value } + } + var underlyingIsNameAmbiguous: Bool! + var powerLevel: Int { + get { return underlyingPowerLevel } + set(value) { underlyingPowerLevel = value } + } + var underlyingPowerLevel: Int! + var normalizedPowerLevel: Int { + get { return underlyingNormalizedPowerLevel } + set(value) { underlyingNormalizedPowerLevel = value } + } + var underlyingNormalizedPowerLevel: Int! + +} class RoomProxyMock: RoomProxyProtocol { var id: String { get { return underlyingId } @@ -321,10 +351,10 @@ class RoomProxyMock: RoomProxyProtocol { var membersCalled: Bool { return membersCallsCount > 0 } - var membersReturnValue: Result<[RoomMemberProxy], RoomProxyError>! - var membersClosure: (() async -> Result<[RoomMemberProxy], RoomProxyError>)? + var membersReturnValue: Result<[RoomMemberProxyProtocol], RoomProxyError>! + var membersClosure: (() async -> Result<[RoomMemberProxyProtocol], RoomProxyError>)? - func members() async -> Result<[RoomMemberProxy], RoomProxyError> { + func members() async -> Result<[RoomMemberProxyProtocol], RoomProxyError> { membersCallsCount += 1 if let membersClosure = membersClosure { return await membersClosure() diff --git a/ElementX/Sources/Mocks/RoomMemberProxyMock.swift b/ElementX/Sources/Mocks/RoomMemberProxyMock.swift new file mode 100644 index 000000000..f3947345d --- /dev/null +++ b/ElementX/Sources/Mocks/RoomMemberProxyMock.swift @@ -0,0 +1,74 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import MatrixRustSDK + +struct RoomMemberProxyMockConfiguration { + var userID: String + var displayName: String + var avatarURL: String? + var membership: MembershipState + var isNameAmbiguous: Bool + var powerLevel: Int + var normalizedPowerLevel: Int +} + +extension RoomMemberProxyMock { + convenience init(with configuration: RoomMemberProxyMockConfiguration) { + self.init() + userID = configuration.userID + displayName = configuration.displayName + if let avatarURL = configuration.avatarURL { + self.avatarURL = URL(string: avatarURL) + } + membership = configuration.membership + isNameAmbiguous = configuration.isNameAmbiguous + powerLevel = configuration.powerLevel + normalizedPowerLevel = configuration.normalizedPowerLevel + } + + // Mocks + static var mockAlice: RoomMemberProxyMock { + RoomMemberProxyMock(with: .init(userID: "alice@matrix.org", + displayName: "Alice", + avatarURL: nil, + membership: .join, + isNameAmbiguous: false, + powerLevel: 50, + normalizedPowerLevel: 50)) + } + + static var mockBob: RoomMemberProxyMock { + RoomMemberProxyMock(with: .init(userID: "bob@matrix.org", + displayName: "Bob", + avatarURL: nil, + membership: .join, + isNameAmbiguous: false, + powerLevel: 50, + normalizedPowerLevel: 50)) + } + + static var mockCharlie: RoomMemberProxyMock { + RoomMemberProxyMock(with: .init(userID: "charlie@matrix.org", + displayName: "Charlie", + avatarURL: nil, + membership: .join, + isNameAmbiguous: false, + powerLevel: 50, + normalizedPowerLevel: 50)) + } +} diff --git a/ElementX/Sources/Mocks/RoomProxyMock.swift b/ElementX/Sources/Mocks/RoomProxyMock.swift index 1fb48df56..28e9c1bc1 100644 --- a/ElementX/Sources/Mocks/RoomProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomProxyMock.swift @@ -30,7 +30,7 @@ struct RoomProxyMockConfiguration { var canonicalAlias: String? var alternativeAliases: [String] = [] var hasUnreadNotifications = Bool.random() - var members: [RoomMemberProxy]? + var members: [RoomMemberProxyProtocol]? } extension RoomProxyMock { diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift b/ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift index 69e10e78f..197dc3b69 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift +++ b/ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift @@ -62,7 +62,7 @@ final class RoomDetailsCoordinator: CoordinatorProtocol { AnyView(RoomDetailsScreen(context: viewModel.context)) } - private func presentRoomMemberDetails(_ members: [RoomMemberProxy]) { + private func presentRoomMemberDetails(_ members: [RoomMemberProxyProtocol]) { let params = RoomMemberDetailsCoordinatorParameters(mediaProvider: parameters.mediaProvider, members: members) let coordinator = RoomMemberDetailsCoordinator(parameters: params) diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift b/ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift index 79b7ddb96..2a442d0b7 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift +++ b/ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift @@ -22,7 +22,7 @@ import UIKit // MARK: View model enum RoomDetailsViewModelAction { - case requestMemberDetailsPresentation([RoomMemberProxy]) + case requestMemberDetailsPresentation([RoomMemberProxyProtocol]) case leftRoom case cancel } @@ -86,8 +86,8 @@ struct RoomDetailsMember: Identifiable, Equatable { let name: String? let avatarURL: URL? - init(withProxy proxy: RoomMemberProxy) { - id = proxy.userId + init(withProxy proxy: RoomMemberProxyProtocol) { + id = proxy.userID name = proxy.displayName avatarURL = proxy.avatarURL } diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift b/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift index 836c040ea..2afc7664c 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift +++ b/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift @@ -20,7 +20,7 @@ typealias RoomDetailsViewModelType = StateStoreViewModel Void)? init(mediaProvider: MediaProviderProtocol, - members: [RoomMemberProxy]) { + members: [RoomMemberProxyProtocol]) { self.mediaProvider = mediaProvider super.init(initialViewState: .init(members: members.map { RoomDetailsMember(withProxy: $0) }, bindings: .init()), diff --git a/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsMemberCell.swift b/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsMemberCell.swift index 00d7004d5..7081f5711 100644 --- a/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsMemberCell.swift +++ b/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsMemberCell.swift @@ -48,7 +48,7 @@ struct RoomMemberDetailsMemberCell: View { struct RoomMemberDetailsMemberCell_Previews: PreviewProvider { static var previews: some View { - let members: [RoomMemberProxy] = [ + let members: [RoomMemberProxyMock] = [ .mockAlice, .mockBob, .mockCharlie @@ -57,7 +57,7 @@ struct RoomMemberDetailsMemberCell_Previews: PreviewProvider { members: members) return VStack { - ForEach(members) { member in + ForEach(members, id: \.userID) { member in RoomMemberDetailsMemberCell(member: .init(withProxy: member), context: viewModel.context) } } diff --git a/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsScreen.swift b/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsScreen.swift index 9b43563ce..0eeadda7e 100644 --- a/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomMembers/View/RoomMemberDetailsScreen.swift @@ -50,7 +50,7 @@ struct RoomMemberDetailsScreen: View { struct RoomMemberDetails_Previews: PreviewProvider { static let viewModel = { - let members: [RoomMemberProxy] = [ + let members: [RoomMemberProxyMock] = [ .mockAlice, .mockBob, .mockCharlie diff --git a/ElementX/Sources/Screens/StartChat/StartChatModels.swift b/ElementX/Sources/Screens/StartChat/StartChatModels.swift index 14aa82880..e6ef87217 100644 --- a/ElementX/Sources/Screens/StartChat/StartChatModels.swift +++ b/ElementX/Sources/Screens/StartChat/StartChatModels.swift @@ -25,7 +25,7 @@ struct StartChatViewState: BindableState { var bindings = StartChatScreenViewStateBindings() // TODO: bind with real service, and mock data only in preview - var suggestedUsers: [RoomMemberProxy] = [.mockAlice, .mockBob, .mockCharlie] + var suggestedUsers: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie] } struct StartChatScreenViewStateBindings { diff --git a/ElementX/Sources/Screens/StartChat/View/StartChatScreen.swift b/ElementX/Sources/Screens/StartChat/View/StartChatScreen.swift index ef322e252..4d8166029 100644 --- a/ElementX/Sources/Screens/StartChat/View/StartChatScreen.swift +++ b/ElementX/Sources/Screens/StartChat/View/StartChatScreen.swift @@ -60,7 +60,7 @@ struct StartChatScreen: View { private var suggestionsSection: some View { Section { - ForEach(context.viewState.suggestedUsers, id: \.userId) { user in + ForEach(context.viewState.suggestedUsers, id: \.userID) { user in StartChatSuggestedUserCell(user: user, imageProvider: context.imageProvider) } } header: { diff --git a/ElementX/Sources/Screens/StartChat/View/StartChatSuggestedUserCell.swift b/ElementX/Sources/Screens/StartChat/View/StartChatSuggestedUserCell.swift index e625b78a3..1997f9ac9 100644 --- a/ElementX/Sources/Screens/StartChat/View/StartChatSuggestedUserCell.swift +++ b/ElementX/Sources/Screens/StartChat/View/StartChatSuggestedUserCell.swift @@ -17,14 +17,14 @@ import SwiftUI struct StartChatSuggestedUserCell: View { - let user: RoomMemberProxy + let user: RoomMemberProxyProtocol let imageProvider: ImageProviderProtocol? var body: some View { HStack(spacing: 13) { LoadableAvatarImage(url: user.avatarURL, name: user.displayName, - contentID: user.userId, + contentID: user.userID, avatarSize: .user(on: .home), imageProvider: imageProvider) .accessibilityHidden(true) @@ -32,11 +32,11 @@ struct StartChatSuggestedUserCell: View { VStack(alignment: .leading, spacing: 4) { // covers both nil and empty state let displayName = user.displayName ?? "" - Text(displayName.isEmpty ? user.userId : displayName) + Text(displayName.isEmpty ? user.userID : displayName) .font(.element.title3) .foregroundColor(.element.primaryContent) if !displayName.isEmpty { - Text(user.userId) + Text(user.userID) .font(.element.subheadline) .foregroundColor(.element.tertiaryContent) } diff --git a/ElementX/Sources/Services/Room/RoomMember/RoomMemberProxy.swift b/ElementX/Sources/Services/Room/RoomMember/RoomMemberProxy.swift new file mode 100644 index 000000000..1ec5db6b4 --- /dev/null +++ b/ElementX/Sources/Services/Room/RoomMember/RoomMemberProxy.swift @@ -0,0 +1,54 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import MatrixRustSDK + +final class RoomMemberProxy: RoomMemberProxyProtocol { + private let member: RoomMemberProtocol + + init(member: RoomMemberProtocol) { + self.member = member + } + + var userID: String { + member.userId() + } + + var displayName: String? { + member.displayName() + } + + var avatarURL: URL? { + member.avatarUrl().flatMap(URL.init(string:)) + } + + var membership: MembershipState { + member.membership() + } + + var isNameAmbiguous: Bool { + member.isNameAmbiguous() + } + + var powerLevel: Int { + Int(member.powerLevel()) + } + + var normalizedPowerLevel: Int { + Int(member.normalizedPowerLevel()) + } +} diff --git a/ElementX/Sources/Services/Room/RoomMember/RoomMemberProxyProtocol.swift b/ElementX/Sources/Services/Room/RoomMember/RoomMemberProxyProtocol.swift new file mode 100644 index 000000000..f0c2394ef --- /dev/null +++ b/ElementX/Sources/Services/Room/RoomMember/RoomMemberProxyProtocol.swift @@ -0,0 +1,29 @@ +// +// Copyright 2022 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import MatrixRustSDK + +// sourcery: AutoMockable +protocol RoomMemberProxyProtocol { + var userID: String { get } + var displayName: String? { get } + var avatarURL: URL? { get } + var membership: MembershipState { get } + var isNameAmbiguous: Bool { get } + var powerLevel: Int { get } + var normalizedPowerLevel: Int { get } +} diff --git a/ElementX/Sources/Services/Room/RoomMemberProxy.swift b/ElementX/Sources/Services/Room/RoomMemberProxy.swift deleted file mode 100644 index b2cdfac84..000000000 --- a/ElementX/Sources/Services/Room/RoomMemberProxy.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// Copyright 2022 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import MatrixRustSDK - -struct RoomMemberProxy { - private let member: RoomMember - - init(with member: RoomMember) { - self.member = member - } - - var userId: String { - member.userId - } - - var displayName: String? { - member.displayName - } - - var avatarURL: URL? { - member.avatarUrl.flatMap(URL.init(string:)) - } - - var membership: MembershipState { - member.membership - } - - var isNameAmbiguous: Bool { - member.isNameAmbiguous - } - - var powerLevel: Int64 { - member.powerLevel - } - - var normalizedPowerLevel: Int64 { - member.normalizedPowerLevel - } -} - -extension RoomMemberProxy: Identifiable { - var id: String { - userId - } -} - -// Mocks -extension RoomMemberProxy { - static var mockAlice: RoomMemberProxy { - RoomMemberProxy(with: .init(userId: "alice@matrix.org", - displayName: "Alice", - avatarUrl: nil, - membership: .join, - isNameAmbiguous: false, - powerLevel: 50, - normalizedPowerLevel: 50)) - } - - static var mockBob: RoomMemberProxy { - RoomMemberProxy(with: .init(userId: "bob@matrix.org", - displayName: "Bob", - avatarUrl: nil, - membership: .join, - isNameAmbiguous: false, - powerLevel: 50, - normalizedPowerLevel: 50)) - } - - static var mockCharlie: RoomMemberProxy { - RoomMemberProxy(with: .init(userId: "charlie@matrix.org", - displayName: "Charlie", - avatarUrl: nil, - membership: .join, - isNameAmbiguous: false, - powerLevel: 50, - normalizedPowerLevel: 50)) - } -} diff --git a/ElementX/Sources/Services/Room/RoomProxy.swift b/ElementX/Sources/Services/Room/RoomProxy.swift index d3bd275a7..be7be9e5a 100644 --- a/ElementX/Sources/Services/Room/RoomProxy.swift +++ b/ElementX/Sources/Services/Room/RoomProxy.swift @@ -271,11 +271,11 @@ class RoomProxy: RoomProxyProtocol { } } - func members() async -> Result<[RoomMemberProxy], RoomProxyError> { + func members() async -> Result<[RoomMemberProxyProtocol], RoomProxyError> { await Task.dispatch(on: .global()) { do { let members = try self.room.members() - return .success(members.map { RoomMemberProxy(with: $0) }) + return .success(members.map { RoomMemberProxy(member: $0) }) } catch { return .failure(.failedRetrievingMembers) } diff --git a/ElementX/Sources/Services/Room/RoomProxyProtocol.swift b/ElementX/Sources/Services/Room/RoomProxyProtocol.swift index 29e311bbb..3905f4568 100644 --- a/ElementX/Sources/Services/Room/RoomProxyProtocol.swift +++ b/ElementX/Sources/Services/Room/RoomProxyProtocol.swift @@ -76,7 +76,7 @@ protocol RoomProxyProtocol { func reportContent(_ eventID: String, reason: String?) async -> Result - func members() async -> Result<[RoomMemberProxy], RoomProxyError> + func members() async -> Result<[RoomMemberProxyProtocol], RoomProxyError> func retryDecryption(for sessionID: String) async diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 33445bc03..f027b7757 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -270,10 +270,11 @@ class MockScreen: Identifiable { return navigationSplitCoordinator case .roomDetailsScreen: let navigationStackCoordinator = NavigationStackCoordinator() + let members: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie] let roomProxy = RoomProxyMock(with: .init(id: "MockRoomIdentifier", displayName: "Room", isEncrypted: true, - members: [.mockAlice, .mockBob, .mockCharlie])) + members: members)) let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, roomProxy: roomProxy, mediaProvider: MockMediaProvider())) @@ -281,13 +282,14 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomDetailsScreenWithRoomAvatar: let navigationStackCoordinator = NavigationStackCoordinator() + let members: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie] let roomProxy = RoomProxyMock(with: .init(id: "MockRoomIdentifier", displayName: "Room", topic: "Bacon ipsum dolor amet commodo incididunt ribeye dolore cupidatat short ribs.", avatarURL: URL.picturesDirectory, isEncrypted: true, canonicalAlias: "#mock:room.org", - members: [.mockAlice, .mockBob, .mockCharlie])) + members: members)) let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, roomProxy: roomProxy, mediaProvider: MockMediaProvider())) @@ -295,8 +297,9 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomMemberDetailsScreen: let navigationStackCoordinator = NavigationStackCoordinator() + let members: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie] let coordinator = RoomMemberDetailsCoordinator(parameters: .init(mediaProvider: MockMediaProvider(), - members: [.mockAlice, .mockBob, .mockCharlie])) + members: members)) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .reportContent: diff --git a/UnitTests/Sources/MediaProvider/MediaLoaderTests.swift b/UnitTests/Sources/MediaProvider/MediaLoaderTests.swift index d1ed23ae2..1d088cd68 100644 --- a/UnitTests/Sources/MediaProvider/MediaLoaderTests.swift +++ b/UnitTests/Sources/MediaProvider/MediaLoaderTests.swift @@ -118,7 +118,23 @@ private class MockMediaLoadingClient: ClientProtocol { func startSync(timelineLimit: UInt16?) { } func createRoom(request: MatrixRustSDK.CreateRoomParameters) throws -> String { fatalError() } - + + func getDmRoom(userId: String) throws -> MatrixRustSDK.Room? { + fatalError() + } + + func ignoreUser(userId: String) throws { + fatalError() + } + + func searchUsers(searchTerm: String, limit: UInt64) throws -> MatrixRustSDK.SearchUsersResults { + fatalError() + } + + func unignoreUser(userId: String) throws { + fatalError() + } + // swiftlint:disable:next function_parameter_count func setPusher(identifiers: MatrixRustSDK.PusherIdentifiers, kind: MatrixRustSDK.PusherKind, diff --git a/UnitTests/Sources/RoomDetailsViewModelTests.swift b/UnitTests/Sources/RoomDetailsViewModelTests.swift index 634d33c06..9a6e0453a 100644 --- a/UnitTests/Sources/RoomDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsViewModelTests.swift @@ -30,7 +30,8 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } func testLeaveRoomTappedWhenPublic() async { - roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: [.mockBob, .mockAlice])) + let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice] + roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers)) viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .processTapLeave) await Task.yield() @@ -39,7 +40,8 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } func testLeavRoomTappedWhenRoomNotPublic() async { - roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: [.mockBob, .mockAlice])) + let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice] + roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers)) viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .processTapLeave) await Task.yield() diff --git a/project.yml b/project.yml index 084cf24c0..79c396e14 100644 --- a/project.yml +++ b/project.yml @@ -42,7 +42,7 @@ include: packages: MatrixRustSDK: url: https://github.com/matrix-org/matrix-rust-components-swift - exactVersion: 1.0.47-alpha + exactVersion: 1.0.48-alpha # path: ../matrix-rust-sdk DesignKit: path: DesignKit