mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
implemented a way to filter out roles that can't be assigned to permission, and disable permissions that are above the current power level of the user.
This commit is contained in:
@@ -26,18 +26,44 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
|
||||
XCTFail("There should be a setting for the room avatar.")
|
||||
return
|
||||
}
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].value, .moderator)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].roleValue, .moderator)
|
||||
XCTAssertFalse(context.viewState.hasChanges)
|
||||
|
||||
// When updating a setting.
|
||||
let setting = RoomPermissionsSetting(title: "", value: .user, keyPath: \.roomAvatar)
|
||||
let setting = RoomPermissionsSetting(title: "",
|
||||
value: RoomRole.user.powerLevelValue,
|
||||
ownPowerLevel: RoomRole.creator.powerLevel,
|
||||
keyPath: \.roomAvatar)
|
||||
XCTAssertFalse(setting.isDisabled)
|
||||
XCTAssertEqual(setting.availableValues.map(\.tag), RoomPermissionsSetting.allValues.map(\.tag))
|
||||
context.settings[.roomDetails]?[index] = setting
|
||||
|
||||
// Then the setting should update and the changes should be flagged.
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].value, .user)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].roleValue, .user)
|
||||
XCTAssertTrue(context.viewState.hasChanges)
|
||||
}
|
||||
|
||||
func testSettingsCantBeChanged() {
|
||||
setUp(isSpace: false, ownPowerLevel: .value(25))
|
||||
// Given a screen with no changes.
|
||||
guard let index = context.settings[.roomDetails]?.firstIndex(where: { $0.keyPath == \.roomAvatar }) else {
|
||||
XCTFail("There should be a setting for the room avatar.")
|
||||
return
|
||||
}
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].roleValue, .moderator)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].isDisabled, true)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].availableValues.count, 1)
|
||||
XCTAssertFalse(context.viewState.hasChanges)
|
||||
|
||||
guard let index = context.settings[.messagesAndContent]?.firstIndex(where: { $0.keyPath == \.eventsDefault }) else {
|
||||
XCTFail("There should be a setting for the events.")
|
||||
return
|
||||
}
|
||||
XCTAssertEqual(context.settings[.messagesAndContent]?[index].roleValue, .user)
|
||||
XCTAssertEqual(context.settings[.messagesAndContent]?[index].isDisabled, false)
|
||||
XCTAssertEqual(context.settings[.messagesAndContent]?[index].availableValues.count, 1)
|
||||
}
|
||||
|
||||
func testSave() async throws {
|
||||
setUp(isSpace: false)
|
||||
// Given a screen with changes.
|
||||
@@ -45,8 +71,13 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
|
||||
XCTFail("There should be a setting for the room avatar.")
|
||||
return
|
||||
}
|
||||
context.settings[.roomDetails]?[index] = RoomPermissionsSetting(title: "", value: .user, keyPath: \.roomAvatar)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].value, .user)
|
||||
context.settings[.roomDetails]?[index] = RoomPermissionsSetting(title: "",
|
||||
value: RoomRole.user.powerLevelValue,
|
||||
ownPowerLevel: RoomRole.creator.powerLevel,
|
||||
keyPath: \.roomAvatar)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].roleValue, .user)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].isDisabled, false)
|
||||
XCTAssertEqual(context.settings[.roomDetails]?[index].availableValues.map(\.tag), RoomPermissionsSetting.allValues.map(\.tag))
|
||||
XCTAssertTrue(context.viewState.hasChanges)
|
||||
XCTAssertEqual(context.settings.count, 3)
|
||||
|
||||
@@ -89,9 +120,10 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
|
||||
XCTAssertNotNil(context.settings[.manageSpace])
|
||||
}
|
||||
|
||||
private func setUp(isSpace: Bool) {
|
||||
private func setUp(isSpace: Bool, ownPowerLevel: RoomPowerLevel = RoomRole.creator.powerLevel) {
|
||||
roomProxy = JoinedRoomProxyMock(.init(isSpace: isSpace))
|
||||
viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
|
||||
ownPowerLevel: ownPowerLevel,
|
||||
roomProxy: roomProxy,
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
analytics: ServiceLocator.shared.analytics)
|
||||
|
||||
@@ -30,16 +30,16 @@ class RoomPermissionsTests: XCTestCase {
|
||||
let permissions = RoomPermissions(powerLevels: powerLevels)
|
||||
|
||||
// Then the permissions should be created with values mapped to the correct role.
|
||||
XCTAssertEqual(permissions.ban, .administrator)
|
||||
XCTAssertEqual(permissions.invite, .administrator)
|
||||
XCTAssertEqual(permissions.kick, .administrator)
|
||||
XCTAssertEqual(permissions.redact, .moderator)
|
||||
XCTAssertEqual(permissions.eventsDefault, .moderator)
|
||||
XCTAssertEqual(permissions.stateDefault, .moderator)
|
||||
XCTAssertEqual(permissions.usersDefault, .user)
|
||||
XCTAssertEqual(permissions.roomName, .user)
|
||||
XCTAssertEqual(permissions.roomAvatar, .user)
|
||||
XCTAssertEqual(permissions.roomTopic, .user)
|
||||
XCTAssertEqual(permissions.spaceChild, .administrator)
|
||||
XCTAssertEqual(permissions.ban, RoomRole.administrator.powerLevelValue)
|
||||
XCTAssertEqual(permissions.invite, RoomRole.administrator.powerLevelValue)
|
||||
XCTAssertEqual(permissions.kick, RoomRole.administrator.powerLevelValue)
|
||||
XCTAssertEqual(permissions.redact, RoomRole.moderator.powerLevelValue)
|
||||
XCTAssertEqual(permissions.eventsDefault, RoomRole.moderator.powerLevelValue)
|
||||
XCTAssertEqual(permissions.stateDefault, RoomRole.moderator.powerLevelValue)
|
||||
XCTAssertEqual(permissions.usersDefault, RoomRole.user.powerLevelValue)
|
||||
XCTAssertEqual(permissions.roomName, RoomRole.user.powerLevelValue)
|
||||
XCTAssertEqual(permissions.roomAvatar, RoomRole.user.powerLevelValue)
|
||||
XCTAssertEqual(permissions.roomTopic, RoomRole.user.powerLevelValue)
|
||||
XCTAssertEqual(permissions.spaceChild, RoomRole.administrator.powerLevelValue)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user