mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Adopt the lastest SDK APIs and refactor how we deal with user permissions.
This patch introduces a new RoomPowerLevelsProxy and its associated mock and adopts newer Rust APIs to make working with user power levels and permissions easier.
This commit is contained in:
committed by
Stefan Ceriu
parent
96e5ed06f5
commit
f522e15dac
@@ -356,7 +356,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
func testCanEditAvatar() async {
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||
|
||||
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||
|
||||
powerLevelsMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||
.success(event == .roomAvatar)
|
||||
}
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
@@ -380,7 +384,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
func testCanEditName() async {
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||
|
||||
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||
|
||||
powerLevelsMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||
.success(event == .roomName)
|
||||
}
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
@@ -404,7 +412,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
func testCanEditTopic() async {
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||
|
||||
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||
|
||||
powerLevelsMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||
.success(event == .roomTopic)
|
||||
}
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
|
||||
@@ -13,16 +13,16 @@ import XCTest
|
||||
class RoomPermissionsTests: XCTestCase {
|
||||
func testFromRust() {
|
||||
// Given a set of power level changes with various values.
|
||||
let powerLevels = RoomPowerLevels(ban: 100,
|
||||
invite: 100,
|
||||
kick: 100,
|
||||
redact: 50,
|
||||
eventsDefault: 50,
|
||||
stateDefault: 50,
|
||||
usersDefault: 0,
|
||||
roomName: 0,
|
||||
roomAvatar: 0,
|
||||
roomTopic: 0)
|
||||
let powerLevels = RoomPowerLevelsValues(ban: 100,
|
||||
invite: 100,
|
||||
kick: 100,
|
||||
redact: 50,
|
||||
eventsDefault: 50,
|
||||
stateDefault: 50,
|
||||
usersDefault: 0,
|
||||
roomName: 0,
|
||||
roomAvatar: 0,
|
||||
roomTopic: 0)
|
||||
|
||||
// When creating room permissions from them.
|
||||
let permissions = RoomPermissions(powerLevels: powerLevels)
|
||||
|
||||
@@ -167,8 +167,12 @@ class RoomScreenViewModelTests: XCTestCase {
|
||||
var configuration = JoinedRoomProxyMockConfiguration(id: "TestID", name: "StartingName", avatarURL: nil, hasOngoingCall: false)
|
||||
let infoSubject = CurrentValueSubject<RoomInfoProxy, Never>(.init(roomInfo: RoomInfo(configuration)))
|
||||
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
||||
|
||||
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||
|
||||
// setup the room proxy actions publisher
|
||||
roomProxyMock.canUserJoinCallUserIDReturnValue = .success(false)
|
||||
powerLevelsMock.canUserJoinCallUserIDReturnValue = .success(false)
|
||||
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
|
||||
let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(),
|
||||
roomProxy: roomProxyMock,
|
||||
@@ -193,7 +197,7 @@ class RoomScreenViewModelTests: XCTestCase {
|
||||
configuration.name = "NewName"
|
||||
configuration.avatarURL = .mockMXCAvatar
|
||||
configuration.hasOngoingCall = true
|
||||
roomProxyMock.canUserJoinCallUserIDReturnValue = .success(true)
|
||||
powerLevelsMock.canUserJoinCallUserIDReturnValue = .success(true)
|
||||
|
||||
deferred = deferFulfillment(viewModel.context.$viewState) { viewState in
|
||||
viewState.roomTitle == "NewName" &&
|
||||
|
||||
@@ -517,7 +517,10 @@ class TimelineViewModelTests: XCTestCase {
|
||||
}
|
||||
try await deferred.fulfill()
|
||||
|
||||
roomProxyMock.canUserPinOrUnpinUserIDReturnValue = .success(false)
|
||||
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||
powerLevelsMock.canUserPinOrUnpinUserIDReturnValue = .success(false)
|
||||
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||
|
||||
deferred = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
!value.canCurrentUserPin
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user