diff --git a/ElementX/Sources/Mocks/JoinedRoomProxyMock.swift b/ElementX/Sources/Mocks/JoinedRoomProxyMock.swift index d145975e6..4427f0e72 100644 --- a/ElementX/Sources/Mocks/JoinedRoomProxyMock.swift +++ b/ElementX/Sources/Mocks/JoinedRoomProxyMock.swift @@ -36,12 +36,6 @@ struct JoinedRoomProxyMockConfiguration { var ownUserID = RoomMemberProxyMock.mockMe.userID var inviter: RoomMemberProxyProtocol? - var canUserSendMessage = true - var canUserInvite = true - var canUserTriggerRoomNotification = false - var canUserJoinCall = true - var canUserPin = true - var shouldUseAutoUpdatingTimeline = false var joinRule: JoinRule? @@ -50,6 +44,8 @@ struct JoinedRoomProxyMockConfiguration { var isVisibleInPublicDirectory = false var predecessor: PredecessorRoom? var successor: SuccessorRoom? + + var powerLevelsConfiguration = RoomPowerLevelsProxyMockConfiguration() } extension JoinedRoomProxyMock { @@ -99,24 +95,17 @@ extension JoinedRoomProxyMock { } updatePowerLevelsForUsersReturnValue = .success(()) - let powerLevelsProxyMock = RoomPowerLevelsProxyMock(configuration: .init()) + let powerLevelsProxyMock = RoomPowerLevelsProxyMock(configuration: configuration.powerLevelsConfiguration) - powerLevelsProxyMock.canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage) powerLevelsProxyMock.canUserUserIDSendStateEventClosure = { [weak self] userID, _ in .success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user) } - powerLevelsProxyMock.canUserInviteUserIDReturnValue = .success(configuration.canUserInvite) - powerLevelsProxyMock.canUserRedactOtherUserIDReturnValue = .success(false) - powerLevelsProxyMock.canUserRedactOwnUserIDReturnValue = .success(true) powerLevelsProxyMock.canUserKickUserIDClosure = { [weak self] userID in .success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user) } powerLevelsProxyMock.canUserBanUserIDClosure = { [weak self] userID in .success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user) } - powerLevelsProxyMock.canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification) - powerLevelsProxyMock.canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall) - powerLevelsProxyMock.canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin) powerLevelsReturnValue = .success(powerLevelsProxyMock) diff --git a/ElementX/Sources/Mocks/RoomPowerLevelsProxyMock.swift b/ElementX/Sources/Mocks/RoomPowerLevelsProxyMock.swift index 0b05e13da..f9a3cdd50 100644 --- a/ElementX/Sources/Mocks/RoomPowerLevelsProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomPowerLevelsProxyMock.swift @@ -7,24 +7,35 @@ import MatrixRustSDK +struct RoomPowerLevelsProxyMockConfiguration { + var canUserSendMessage = true + var canUserSendState = false + var canUserInvite = true + var canUserRedactOther = false + var canUserRedactOwn = true + var canUserKick = false + var canUserBan = false + var canUserTriggerRoomNotification = false + var canUserPin = true + var canUserJoinCall = true +} + extension RoomPowerLevelsProxyMock { - struct Configuration { } - - convenience init(configuration: Configuration) { + convenience init(configuration: RoomPowerLevelsProxyMockConfiguration) { self.init() underlyingValues = RoomPowerLevelsValues.mock - canUserUserIDSendMessageReturnValue = .success(true) - canUserUserIDSendStateEventReturnValue = .success(true) - canUserInviteUserIDReturnValue = .success(true) - canUserRedactOtherUserIDReturnValue = .success(true) - canUserRedactOwnUserIDReturnValue = .success(true) - canUserKickUserIDReturnValue = .success(true) - canUserBanUserIDReturnValue = .success(true) - canUserTriggerRoomNotificationUserIDReturnValue = .success(true) - canUserPinOrUnpinUserIDReturnValue = .success(true) - canUserJoinCallUserIDReturnValue = .success(true) + canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage) + canUserUserIDSendStateEventReturnValue = .success(configuration.canUserSendState) + canUserInviteUserIDReturnValue = .success(configuration.canUserInvite) + canUserRedactOtherUserIDReturnValue = .success(configuration.canUserRedactOther) + canUserRedactOwnUserIDReturnValue = .success(configuration.canUserRedactOwn) + canUserKickUserIDReturnValue = .success(configuration.canUserKick) + canUserBanUserIDReturnValue = .success(configuration.canUserBan) + canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification) + canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin) + canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall) } } diff --git a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift index 308df1b64..456263116 100644 --- a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift @@ -198,7 +198,7 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview { roomProxy: JoinedRoomProxyMock(.init(name: "Some room", members: members, ownUserID: ownUserID, - canUserInvite: false)), + powerLevelsConfiguration: .init(canUserInvite: false))), mediaProvider: MediaProviderMock(configuration: .init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) diff --git a/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift b/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift index 00a2105d5..98b6009ed 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift @@ -240,8 +240,8 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview { let roomProxyMock = JoinedRoomProxyMock(.init(id: "stable_id", name: "Preview room", hasOngoingCall: true, - canUserSendMessage: canSendMessage, - successor: hasSuccessor ? .init(roomId: UUID().uuidString, reason: nil) : nil)) + successor: hasSuccessor ? .init(roomId: UUID().uuidString, reason: nil) : nil, + powerLevelsConfiguration: .init(canUserSendMessage: canSendMessage))) let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock) let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock, timelineController: MockTimelineController(), diff --git a/UnitTests/Sources/CompletionSuggestionServiceTests.swift b/UnitTests/Sources/CompletionSuggestionServiceTests.swift index 2e7ed4451..3bc23c855 100644 --- a/UnitTests/Sources/CompletionSuggestionServiceTests.swift +++ b/UnitTests/Sources/CompletionSuggestionServiceTests.swift @@ -60,7 +60,11 @@ final class CompletionSuggestionServiceTests: XCTestCase { func testUserSuggestionsIncludingAllUsers() async throws { let alice: RoomMemberProxyMock = .mockAlice let members: [RoomMemberProxyMock] = [alice, .mockBob, .mockCharlie, .mockMe] - let roomProxyMock = JoinedRoomProxyMock(.init(id: "roomID", name: "test", members: members, canUserTriggerRoomNotification: true)) + let roomProxyMock = JoinedRoomProxyMock(.init(id: "roomID", + name: "test", + members: members, + powerLevelsConfiguration: .init(canUserTriggerRoomNotification: true))) + let roomSummaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))) let service = CompletionSuggestionService(roomProxy: roomProxyMock, roomListPublisher: roomSummaryProvider.roomListPublisher.eraseToAnyPublisher()) @@ -88,7 +92,10 @@ final class CompletionSuggestionServiceTests: XCTestCase { let alice: RoomMemberProxyMock = .mockAlice let bob: RoomMemberProxyMock = .mockBob let members: [RoomMemberProxyMock] = [alice, bob, .mockMe] - let roomProxyMock = JoinedRoomProxyMock(.init(id: "roomID", name: "test", members: members, canUserTriggerRoomNotification: true)) + let roomProxyMock = JoinedRoomProxyMock(.init(id: "roomID", + name: "test", + members: members, + powerLevelsConfiguration: .init(canUserTriggerRoomNotification: true))) let roomSummaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))) let service = CompletionSuggestionService(roomProxy: roomProxyMock, roomListPublisher: roomSummaryProvider.roomListPublisher.eraseToAnyPublisher()) diff --git a/UnitTests/Sources/KnockRequestsListScreenViewModelTests.swift b/UnitTests/Sources/KnockRequestsListScreenViewModelTests.swift index af5484aa9..1aedacc49 100644 --- a/UnitTests/Sources/KnockRequestsListScreenViewModelTests.swift +++ b/UnitTests/Sources/KnockRequestsListScreenViewModelTests.swift @@ -207,8 +207,8 @@ class KnockRequestsListScreenViewModelTests: XCTestCase { KnockRequestProxyMock(.init(eventID: "2", userID: "@bob:matrix.org")), KnockRequestProxyMock(.init(eventID: "3", userID: "@charlie:matrix.org")), KnockRequestProxyMock(.init(eventID: "4", userID: "@dan:matrix.org"))]), - canUserInvite: false, - joinRule: .knock)) + joinRule: .knock, + powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MediaProviderMock(), userIndicatorController: UserIndicatorControllerMock()) diff --git a/UnitTests/Sources/RoomDetailsViewModelTests.swift b/UnitTests/Sources/RoomDetailsViewModelTests.swift index 86040e8b4..85025d1aa 100644 --- a/UnitTests/Sources/RoomDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsViewModelTests.swift @@ -303,7 +303,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isPublic: true, members: mockedMembers, - canUserInvite: false)) + powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, clientProxy: ClientProxyMock(.init()), mediaProvider: MediaProviderMock(configuration: .init()), @@ -733,7 +733,12 @@ class RoomDetailsScreenViewModelTests: XCTestCase { func testKnockRequestsCounterIsNotShownIfNoPermissions() async throws { ServiceLocator.shared.settings.knockingEnabled = true let mockedRequests: [KnockRequestProxyMock] = [.init(), .init()] - roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, knockRequestsState: .loaded(mockedRequests), canUserInvite: false, joinRule: .knock)) + roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", + isDirect: false, + isPublic: false, + knockRequestsState: .loaded(mockedRequests), + joinRule: .knock, + powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, clientProxy: ClientProxyMock(.init()), mediaProvider: MediaProviderMock(configuration: .init()), diff --git a/UnitTests/Sources/RoomScreenViewModelTests.swift b/UnitTests/Sources/RoomScreenViewModelTests.swift index efc50324b..ae0804e5b 100644 --- a/UnitTests/Sources/RoomScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomScreenViewModelTests.swift @@ -370,8 +370,8 @@ class RoomScreenViewModelTests: XCTestCase { func testKnockRequestsBannerDoesNotAppearIfUserHasNoPermission() async throws { ServiceLocator.shared.settings.knockingEnabled = true let roomProxyMock = JoinedRoomProxyMock(.init(knockRequestsState: .loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", reason: "Hello World!"))]), - canUserInvite: false, - joinRule: .knock)) + joinRule: .knock, + powerLevelsConfiguration: .init(canUserInvite: false))) let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, diff --git a/UnitTests/Sources/TimelineViewModelTests.swift b/UnitTests/Sources/TimelineViewModelTests.swift index c15f66592..00bda843a 100644 --- a/UnitTests/Sources/TimelineViewModelTests.swift +++ b/UnitTests/Sources/TimelineViewModelTests.swift @@ -494,7 +494,8 @@ class TimelineViewModelTests: XCTestCase { } func testCanUserPinEvents() async throws { - let configuration = JoinedRoomProxyMockConfiguration(name: "", canUserPin: true) + let configuration = JoinedRoomProxyMockConfiguration(name: "", + powerLevelsConfiguration: .init(canUserPin: true)) let roomProxyMock = JoinedRoomProxyMock(configuration) let infoSubject = CurrentValueSubject(.init(roomInfo: RoomInfo(configuration))) roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()