mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Better integrate RoomPowerLevelsProxyMock's own Configuration struct.
This commit is contained in:
committed by
Stefan Ceriu
parent
f522e15dac
commit
cbf405a67e
@@ -36,12 +36,6 @@ struct JoinedRoomProxyMockConfiguration {
|
|||||||
var ownUserID = RoomMemberProxyMock.mockMe.userID
|
var ownUserID = RoomMemberProxyMock.mockMe.userID
|
||||||
var inviter: RoomMemberProxyProtocol?
|
var inviter: RoomMemberProxyProtocol?
|
||||||
|
|
||||||
var canUserSendMessage = true
|
|
||||||
var canUserInvite = true
|
|
||||||
var canUserTriggerRoomNotification = false
|
|
||||||
var canUserJoinCall = true
|
|
||||||
var canUserPin = true
|
|
||||||
|
|
||||||
var shouldUseAutoUpdatingTimeline = false
|
var shouldUseAutoUpdatingTimeline = false
|
||||||
|
|
||||||
var joinRule: JoinRule?
|
var joinRule: JoinRule?
|
||||||
@@ -50,6 +44,8 @@ struct JoinedRoomProxyMockConfiguration {
|
|||||||
var isVisibleInPublicDirectory = false
|
var isVisibleInPublicDirectory = false
|
||||||
var predecessor: PredecessorRoom?
|
var predecessor: PredecessorRoom?
|
||||||
var successor: SuccessorRoom?
|
var successor: SuccessorRoom?
|
||||||
|
|
||||||
|
var powerLevelsConfiguration = RoomPowerLevelsProxyMockConfiguration()
|
||||||
}
|
}
|
||||||
|
|
||||||
extension JoinedRoomProxyMock {
|
extension JoinedRoomProxyMock {
|
||||||
@@ -99,24 +95,17 @@ extension JoinedRoomProxyMock {
|
|||||||
}
|
}
|
||||||
updatePowerLevelsForUsersReturnValue = .success(())
|
updatePowerLevelsForUsersReturnValue = .success(())
|
||||||
|
|
||||||
let powerLevelsProxyMock = RoomPowerLevelsProxyMock(configuration: .init())
|
let powerLevelsProxyMock = RoomPowerLevelsProxyMock(configuration: configuration.powerLevelsConfiguration)
|
||||||
|
|
||||||
powerLevelsProxyMock.canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
|
|
||||||
powerLevelsProxyMock.canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
|
powerLevelsProxyMock.canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
|
||||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
.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
|
powerLevelsProxyMock.canUserKickUserIDClosure = { [weak self] userID in
|
||||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
||||||
}
|
}
|
||||||
powerLevelsProxyMock.canUserBanUserIDClosure = { [weak self] userID in
|
powerLevelsProxyMock.canUserBanUserIDClosure = { [weak self] userID in
|
||||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
.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)
|
powerLevelsReturnValue = .success(powerLevelsProxyMock)
|
||||||
|
|
||||||
|
|||||||
@@ -7,24 +7,35 @@
|
|||||||
|
|
||||||
import MatrixRustSDK
|
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 {
|
extension RoomPowerLevelsProxyMock {
|
||||||
struct Configuration { }
|
convenience init(configuration: RoomPowerLevelsProxyMockConfiguration) {
|
||||||
|
|
||||||
convenience init(configuration: Configuration) {
|
|
||||||
self.init()
|
self.init()
|
||||||
|
|
||||||
underlyingValues = RoomPowerLevelsValues.mock
|
underlyingValues = RoomPowerLevelsValues.mock
|
||||||
|
|
||||||
canUserUserIDSendMessageReturnValue = .success(true)
|
canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
|
||||||
canUserUserIDSendStateEventReturnValue = .success(true)
|
canUserUserIDSendStateEventReturnValue = .success(configuration.canUserSendState)
|
||||||
canUserInviteUserIDReturnValue = .success(true)
|
canUserInviteUserIDReturnValue = .success(configuration.canUserInvite)
|
||||||
canUserRedactOtherUserIDReturnValue = .success(true)
|
canUserRedactOtherUserIDReturnValue = .success(configuration.canUserRedactOther)
|
||||||
canUserRedactOwnUserIDReturnValue = .success(true)
|
canUserRedactOwnUserIDReturnValue = .success(configuration.canUserRedactOwn)
|
||||||
canUserKickUserIDReturnValue = .success(true)
|
canUserKickUserIDReturnValue = .success(configuration.canUserKick)
|
||||||
canUserBanUserIDReturnValue = .success(true)
|
canUserBanUserIDReturnValue = .success(configuration.canUserBan)
|
||||||
canUserTriggerRoomNotificationUserIDReturnValue = .success(true)
|
canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification)
|
||||||
canUserPinOrUnpinUserIDReturnValue = .success(true)
|
canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin)
|
||||||
canUserJoinCallUserIDReturnValue = .success(true)
|
canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
roomProxy: JoinedRoomProxyMock(.init(name: "Some room",
|
roomProxy: JoinedRoomProxyMock(.init(name: "Some room",
|
||||||
members: members,
|
members: members,
|
||||||
ownUserID: ownUserID,
|
ownUserID: ownUserID,
|
||||||
canUserInvite: false)),
|
powerLevelsConfiguration: .init(canUserInvite: false))),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init()),
|
mediaProvider: MediaProviderMock(configuration: .init()),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
|
|||||||
@@ -240,8 +240,8 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
let roomProxyMock = JoinedRoomProxyMock(.init(id: "stable_id",
|
let roomProxyMock = JoinedRoomProxyMock(.init(id: "stable_id",
|
||||||
name: "Preview room",
|
name: "Preview room",
|
||||||
hasOngoingCall: true,
|
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 roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
||||||
let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
timelineController: MockTimelineController(),
|
timelineController: MockTimelineController(),
|
||||||
|
|||||||
@@ -60,7 +60,11 @@ final class CompletionSuggestionServiceTests: XCTestCase {
|
|||||||
func testUserSuggestionsIncludingAllUsers() async throws {
|
func testUserSuggestionsIncludingAllUsers() async throws {
|
||||||
let alice: RoomMemberProxyMock = .mockAlice
|
let alice: RoomMemberProxyMock = .mockAlice
|
||||||
let members: [RoomMemberProxyMock] = [alice, .mockBob, .mockCharlie, .mockMe]
|
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 roomSummaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))
|
||||||
let service = CompletionSuggestionService(roomProxy: roomProxyMock,
|
let service = CompletionSuggestionService(roomProxy: roomProxyMock,
|
||||||
roomListPublisher: roomSummaryProvider.roomListPublisher.eraseToAnyPublisher())
|
roomListPublisher: roomSummaryProvider.roomListPublisher.eraseToAnyPublisher())
|
||||||
@@ -88,7 +92,10 @@ final class CompletionSuggestionServiceTests: XCTestCase {
|
|||||||
let alice: RoomMemberProxyMock = .mockAlice
|
let alice: RoomMemberProxyMock = .mockAlice
|
||||||
let bob: RoomMemberProxyMock = .mockBob
|
let bob: RoomMemberProxyMock = .mockBob
|
||||||
let members: [RoomMemberProxyMock] = [alice, bob, .mockMe]
|
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 roomSummaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))
|
||||||
let service = CompletionSuggestionService(roomProxy: roomProxyMock,
|
let service = CompletionSuggestionService(roomProxy: roomProxyMock,
|
||||||
roomListPublisher: roomSummaryProvider.roomListPublisher.eraseToAnyPublisher())
|
roomListPublisher: roomSummaryProvider.roomListPublisher.eraseToAnyPublisher())
|
||||||
|
|||||||
@@ -207,8 +207,8 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
|
|||||||
KnockRequestProxyMock(.init(eventID: "2", userID: "@bob:matrix.org")),
|
KnockRequestProxyMock(.init(eventID: "2", userID: "@bob:matrix.org")),
|
||||||
KnockRequestProxyMock(.init(eventID: "3", userID: "@charlie:matrix.org")),
|
KnockRequestProxyMock(.init(eventID: "3", userID: "@charlie:matrix.org")),
|
||||||
KnockRequestProxyMock(.init(eventID: "4", userID: "@dan:matrix.org"))]),
|
KnockRequestProxyMock(.init(eventID: "4", userID: "@dan:matrix.org"))]),
|
||||||
canUserInvite: false,
|
joinRule: .knock,
|
||||||
joinRule: .knock))
|
powerLevelsConfiguration: .init(canUserInvite: false)))
|
||||||
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
|
||||||
mediaProvider: MediaProviderMock(),
|
mediaProvider: MediaProviderMock(),
|
||||||
userIndicatorController: UserIndicatorControllerMock())
|
userIndicatorController: UserIndicatorControllerMock())
|
||||||
|
|||||||
@@ -303,7 +303,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test",
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test",
|
||||||
isPublic: true,
|
isPublic: true,
|
||||||
members: mockedMembers,
|
members: mockedMembers,
|
||||||
canUserInvite: false))
|
powerLevelsConfiguration: .init(canUserInvite: false)))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init()),
|
mediaProvider: MediaProviderMock(configuration: .init()),
|
||||||
@@ -733,7 +733,12 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
func testKnockRequestsCounterIsNotShownIfNoPermissions() async throws {
|
func testKnockRequestsCounterIsNotShownIfNoPermissions() async throws {
|
||||||
ServiceLocator.shared.settings.knockingEnabled = true
|
ServiceLocator.shared.settings.knockingEnabled = true
|
||||||
let mockedRequests: [KnockRequestProxyMock] = [.init(), .init()]
|
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,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init()),
|
mediaProvider: MediaProviderMock(configuration: .init()),
|
||||||
|
|||||||
@@ -370,8 +370,8 @@ class RoomScreenViewModelTests: XCTestCase {
|
|||||||
func testKnockRequestsBannerDoesNotAppearIfUserHasNoPermission() async throws {
|
func testKnockRequestsBannerDoesNotAppearIfUserHasNoPermission() async throws {
|
||||||
ServiceLocator.shared.settings.knockingEnabled = true
|
ServiceLocator.shared.settings.knockingEnabled = true
|
||||||
let roomProxyMock = JoinedRoomProxyMock(.init(knockRequestsState: .loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", reason: "Hello World!"))]),
|
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(),
|
let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(),
|
||||||
roomProxy: roomProxyMock,
|
roomProxy: roomProxyMock,
|
||||||
initialSelectedPinnedEventID: nil,
|
initialSelectedPinnedEventID: nil,
|
||||||
|
|||||||
@@ -494,7 +494,8 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testCanUserPinEvents() async throws {
|
func testCanUserPinEvents() async throws {
|
||||||
let configuration = JoinedRoomProxyMockConfiguration(name: "", canUserPin: true)
|
let configuration = JoinedRoomProxyMockConfiguration(name: "",
|
||||||
|
powerLevelsConfiguration: .init(canUserPin: true))
|
||||||
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
||||||
let infoSubject = CurrentValueSubject<RoomInfoProxy, Never>(.init(roomInfo: RoomInfo(configuration)))
|
let infoSubject = CurrentValueSubject<RoomInfoProxy, Never>(.init(roomInfo: RoomInfo(configuration)))
|
||||||
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
|
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
|
||||||
|
|||||||
Reference in New Issue
Block a user