diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index 2839fad60..923bcafea 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -7120,7 +7120,7 @@ repositoryURL = "https://github.com/matrix-org/matrix-rust-components-swift"; requirement = { kind = exactVersion; - version = 1.1.46; + version = 1.1.47; }; }; 821C67C9A7F8CC3FD41B28B4 /* XCRemoteSwiftPackageReference "emojibase-bindings" */ = { diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5ae7c810b..7cc7c9a11 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -130,8 +130,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/matrix-org/matrix-rust-components-swift", "state" : { - "revision" : "f0b060274251263c6470d90d5877af2856c0da14", - "version" : "1.1.46" + "revision" : "57931f2aca93dab50cb86352081a6cdd6cdcf61b", + "version" : "1.1.47" } }, { diff --git a/ElementX/Sources/FlowCoordinators/RoomRolesAndPermissionsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/RoomRolesAndPermissionsFlowCoordinator.swift index f52d105dc..d37deaa81 100644 --- a/ElementX/Sources/FlowCoordinators/RoomRolesAndPermissionsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/RoomRolesAndPermissionsFlowCoordinator.swift @@ -131,7 +131,7 @@ class RoomRolesAndPermissionsFlowCoordinator: FlowCoordinatorProtocol { case .editRoles(let role): stateMachine.tryEvent(.changeRoles, userInfo: role) case .editPermissions(let group): - stateMachine.tryEvent(.changePermissions, userInfo: (group, RoomPermissions.default)) + stateMachine.tryEvent(.changePermissions, userInfo: (group, RoomPermissions(powerLevels: .mock))) } } .store(in: &cancellables) diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index 604f9389d..c6c854bce 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -2712,21 +2712,21 @@ class RoomProxyMock: RoomProxyProtocol { return flagAsFavouriteReturnValue } } - //MARK: - currentPowerLevelChanges + //MARK: - powerLevels - var currentPowerLevelChangesCallsCount = 0 - var currentPowerLevelChangesCalled: Bool { - return currentPowerLevelChangesCallsCount > 0 + var powerLevelsCallsCount = 0 + var powerLevelsCalled: Bool { + return powerLevelsCallsCount > 0 } - var currentPowerLevelChangesReturnValue: Result! - var currentPowerLevelChangesClosure: (() async -> Result)? + var powerLevelsReturnValue: Result! + var powerLevelsClosure: (() async -> Result)? - func currentPowerLevelChanges() async -> Result { - currentPowerLevelChangesCallsCount += 1 - if let currentPowerLevelChangesClosure = currentPowerLevelChangesClosure { - return await currentPowerLevelChangesClosure() + func powerLevels() async -> Result { + powerLevelsCallsCount += 1 + if let powerLevelsClosure = powerLevelsClosure { + return await powerLevelsClosure() } else { - return currentPowerLevelChangesReturnValue + return powerLevelsReturnValue } } //MARK: - applyPowerLevelChanges diff --git a/ElementX/Sources/Mocks/RoomProxyMock.swift b/ElementX/Sources/Mocks/RoomProxyMock.swift index 7fa79f5c0..d4923a575 100644 --- a/ElementX/Sources/Mocks/RoomProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomProxyMock.swift @@ -88,7 +88,7 @@ extension RoomProxyMock { underlyingIsFavourite = false flagAsFavouriteReturnValue = .success(()) - currentPowerLevelChangesReturnValue = .success(.init()) + powerLevelsReturnValue = .success(.mock) applyPowerLevelChangesReturnValue = .success(()) updatePowerLevelsForUsersReturnValue = .success(()) canUserUserIDSendStateEventClosure = { [weak self] userID, _ in diff --git a/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenModels.swift b/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenModels.swift index dbcc54666..83254b2f4 100644 --- a/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenModels.swift +++ b/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenModels.swift @@ -31,7 +31,7 @@ struct RoomChangePermissionsScreenViewState: BindableState { /// Whether or not there are and changes to be saved. var hasChanges: Bool { - bindings.settings.contains { currentPermissions[keyPath: $0.keyPath] ?? RoomPermissions.defaultValue(for: $0.keyPath) != $0.value } + bindings.settings.contains { currentPermissions[keyPath: $0.keyPath] != $0.value } } } @@ -61,42 +61,42 @@ extension RoomChangePermissionsScreenViewState { switch group { case .roomDetails: let settings = [ - RoomPermissionsSetting(keyPath: \.roomName, - value: currentPermissions.roomName ?? RoomPermissions.defaultValue(for: \.roomName), - title: L10n.screenRoomChangePermissionsRoomName), - RoomPermissionsSetting(keyPath: \.roomAvatar, - value: currentPermissions.roomAvatar ?? RoomPermissions.defaultValue(for: \.roomAvatar), - title: L10n.screenRoomChangePermissionsRoomAvatar), - RoomPermissionsSetting(keyPath: \.roomTopic, - value: currentPermissions.roomTopic ?? RoomPermissions.defaultValue(for: \.roomTopic), - title: L10n.screenRoomChangePermissionsRoomTopic) + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsRoomName, + value: currentPermissions.roomName, + keyPath: \.roomName), + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsRoomAvatar, + value: currentPermissions.roomAvatar, + keyPath: \.roomAvatar), + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsRoomTopic, + value: currentPermissions.roomTopic, + keyPath: \.roomTopic) ] self.init(title: L10n.screenRoomChangePermissionsRoomDetails, currentPermissions: currentPermissions, bindings: .init(settings: settings)) case .messagesAndContent: let settings = [ - RoomPermissionsSetting(keyPath: \.eventsDefault, - value: currentPermissions.eventsDefault ?? RoomPermissions.defaultValue(for: \.eventsDefault), - title: L10n.screenRoomChangePermissionsSendMessages), - RoomPermissionsSetting(keyPath: \.redact, - value: currentPermissions.redact ?? RoomPermissions.defaultValue(for: \.redact), - title: L10n.screenRoomChangePermissionsDeleteMessages) + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsSendMessages, + value: currentPermissions.eventsDefault, + keyPath: \.eventsDefault), + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsDeleteMessages, + value: currentPermissions.redact, + keyPath: \.redact) ] self.init(title: L10n.screenRoomChangePermissionsMessagesAndContent, currentPermissions: currentPermissions, bindings: .init(settings: settings)) case .memberModeration: let settings = [ - RoomPermissionsSetting(keyPath: \.invite, - value: currentPermissions.invite ?? RoomPermissions.defaultValue(for: \.invite), - title: L10n.screenRoomChangePermissionsInvitePeople), - RoomPermissionsSetting(keyPath: \.kick, - value: currentPermissions.kick ?? RoomPermissions.defaultValue(for: \.kick), - title: L10n.screenRoomChangePermissionsRemovePeople), - RoomPermissionsSetting(keyPath: \.ban, - value: currentPermissions.ban ?? RoomPermissions.defaultValue(for: \.ban), - title: L10n.screenRoomChangePermissionsBanPeople) + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsInvitePeople, + value: currentPermissions.invite, + keyPath: \.invite), + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsRemovePeople, + value: currentPermissions.kick, + keyPath: \.kick), + RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsBanPeople, + value: currentPermissions.ban, + keyPath: \.ban) ] self.init(title: L10n.screenRoomChangePermissionsMemberModeration, currentPermissions: currentPermissions, bindings: .init(settings: settings)) diff --git a/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenViewModel.swift b/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenViewModel.swift index 1469bf7ec..48ecdf03a 100644 --- a/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomChangePermissionsScreen/RoomChangePermissionsScreenViewModel.swift @@ -15,6 +15,7 @@ // import Combine +import MatrixRustSDK import SwiftUI typealias RoomChangePermissionsScreenViewModelType = StateStoreViewModel @@ -62,12 +63,12 @@ class RoomChangePermissionsScreenViewModel: RoomChangePermissionsScreenViewModel hideLoadingIndicator() } - var updatedPermissions = RoomPermissions() + var changes = RoomPowerLevelChanges() for setting in state.bindings.settings { - updatedPermissions[keyPath: setting.keyPath] = setting.value + changes[keyPath: setting.rustKeyPath] = setting.value.rustPowerLevel } - switch await roomProxy.applyPowerLevelChanges(updatedPermissions.makePowerLevelChanges()) { + switch await roomProxy.applyPowerLevelChanges(changes) { case .success: MXLog.info("Success") case .failure: @@ -75,9 +76,9 @@ class RoomChangePermissionsScreenViewModel: RoomChangePermissionsScreenViewModel return } - switch await roomProxy.currentPowerLevelChanges() { - case .success(let powerLevelChanges): - state.currentPermissions = .init(powerLevelChanges: powerLevelChanges) + switch await roomProxy.powerLevels() { + case .success(let powerLevels): + state.currentPermissions = .init(powerLevels: powerLevels) case .failure: context.alertInfo = AlertInfo(id: .generic) return diff --git a/ElementX/Sources/Screens/RoomChangePermissionsScreen/View/RoomChangePermissionsScreen.swift b/ElementX/Sources/Screens/RoomChangePermissionsScreen/View/RoomChangePermissionsScreen.swift index ca970f6af..11222d740 100644 --- a/ElementX/Sources/Screens/RoomChangePermissionsScreen/View/RoomChangePermissionsScreen.swift +++ b/ElementX/Sources/Screens/RoomChangePermissionsScreen/View/RoomChangePermissionsScreen.swift @@ -75,7 +75,7 @@ struct RoomChangePermissionsScreen_Previews: PreviewProvider, TestablePreview { } static func makeViewModel(group: RoomRolesAndPermissionsScreenPermissionsGroup) -> RoomChangePermissionsScreenViewModel { - RoomChangePermissionsScreenViewModel(currentPermissions: .default, + RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock), group: group, roomProxy: RoomProxyMock(with: .init()), userIndicatorController: UserIndicatorControllerMock()) diff --git a/ElementX/Sources/Services/Room/RoomPermissions.swift b/ElementX/Sources/Services/Room/RoomPermissions.swift index 92a4333c1..d466a14b7 100644 --- a/ElementX/Sources/Services/Room/RoomPermissions.swift +++ b/ElementX/Sources/Services/Room/RoomPermissions.swift @@ -18,12 +18,14 @@ import Foundation import MatrixRustSDK struct RoomPermissionsSetting: Identifiable { - var id: KeyPath { keyPath } + var id: KeyPath { keyPath } - let keyPath: WritableKeyPath - var value: RoomMemberDetails.Role + /// The title of this setting. let title: String + /// The selected role of this setting. + var value: RoomMemberDetails.Role + /// All of the available roles that this setting can be configured with. var allValues: [(title: String, tag: RoomMemberDetails.Role)] { [ (title: L10n.screenRoomChangePermissionsAdministrators, tag: .administrator), @@ -31,87 +33,63 @@ struct RoomPermissionsSetting: Identifiable { (title: L10n.screenRoomChangePermissionsEveryone, tag: .user) ] } + + /// The `RoomPermissions` property that this setting is for. + let keyPath: KeyPath + /// The `RoomPowerLevelChanges` property that this setting is saved into. + var rustKeyPath: WritableKeyPath { + switch keyPath { + case \.ban: \.ban + case \.invite: \.invite + case \.kick: \.kick + case \.redact: \.redact + case \.eventsDefault: \.eventsDefault + case \.stateDefault: \.stateDefault + case \.usersDefault: \.usersDefault + case \.roomName: \.roomName + case \.roomAvatar: \.roomAvatar + case \.roomTopic: \.roomTopic + default: fatalError("Unexpected key path: \(keyPath)") + } + } } struct RoomPermissions { /// The level required to ban a user. - var ban: RoomMemberDetails.Role? + var ban: RoomMemberDetails.Role /// The level required to invite a user. - var invite: RoomMemberDetails.Role? + var invite: RoomMemberDetails.Role /// The level required to kick a user. - var kick: RoomMemberDetails.Role? + var kick: RoomMemberDetails.Role /// The level required to redact an event. - var redact: RoomMemberDetails.Role? + var redact: RoomMemberDetails.Role /// The default level required to send message events. - var eventsDefault: RoomMemberDetails.Role? + var eventsDefault: RoomMemberDetails.Role /// The default level required to send state events. - var stateDefault: RoomMemberDetails.Role? + var stateDefault: RoomMemberDetails.Role /// The default power level for every user in the room. - var usersDefault: RoomMemberDetails.Role? + var usersDefault: RoomMemberDetails.Role /// The level required to change the room's name. - var roomName: RoomMemberDetails.Role? + var roomName: RoomMemberDetails.Role /// The level required to change the room's avatar. - var roomAvatar: RoomMemberDetails.Role? + var roomAvatar: RoomMemberDetails.Role /// The level required to change the room's topic. - var roomTopic: RoomMemberDetails.Role? + var roomTopic: RoomMemberDetails.Role } extension RoomPermissions { - /// Returns the default value for a particular permission. - static func defaultValue(for keyPath: KeyPath) -> RoomMemberDetails.Role { - switch keyPath { - case \.ban: .moderator - case \.invite: .user - case \.kick: .moderator - case \.redact: .moderator - case \.eventsDefault: .user - case \.stateDefault: .moderator - case \.usersDefault: .user - case \.roomName: .moderator - case \.roomAvatar: .moderator - case \.roomTopic: .moderator - default: fatalError("Unexpected key path: \(keyPath)") - } - } - - /// Constructs a set of permissions using the default values. - static var `default`: RoomPermissions { - RoomPermissions(ban: defaultValue(for: \.ban), - invite: defaultValue(for: \.invite), - kick: defaultValue(for: \.kick), - redact: defaultValue(for: \.redact), - eventsDefault: defaultValue(for: \.eventsDefault), - stateDefault: defaultValue(for: \.stateDefault), - usersDefault: defaultValue(for: \.usersDefault), - roomName: defaultValue(for: \.roomName), - roomAvatar: defaultValue(for: \.roomAvatar), - roomTopic: defaultValue(for: \.roomTopic)) - } - - init(powerLevelChanges: RoomPowerLevelChanges) { - ban = powerLevelChanges.ban.map(RoomMemberDetails.Role.init) - invite = powerLevelChanges.invite.map(RoomMemberDetails.Role.init) - kick = powerLevelChanges.kick.map(RoomMemberDetails.Role.init) - redact = powerLevelChanges.redact.map(RoomMemberDetails.Role.init) - eventsDefault = powerLevelChanges.eventsDefault.map(RoomMemberDetails.Role.init) - stateDefault = powerLevelChanges.stateDefault.map(RoomMemberDetails.Role.init) - usersDefault = powerLevelChanges.usersDefault.map(RoomMemberDetails.Role.init) - roomName = powerLevelChanges.roomName.map(RoomMemberDetails.Role.init) - roomAvatar = powerLevelChanges.roomAvatar.map(RoomMemberDetails.Role.init) - roomTopic = powerLevelChanges.roomTopic.map(RoomMemberDetails.Role.init) - } - - func makePowerLevelChanges() -> RoomPowerLevelChanges { - RoomPowerLevelChanges(ban: ban?.rustPowerLevel, - invite: invite?.rustPowerLevel, - kick: kick?.rustPowerLevel, - redact: redact?.rustPowerLevel, - eventsDefault: eventsDefault?.rustPowerLevel, - stateDefault: stateDefault?.rustPowerLevel, - usersDefault: usersDefault?.rustPowerLevel, - roomName: roomName?.rustPowerLevel, - roomAvatar: roomAvatar?.rustPowerLevel, - roomTopic: roomTopic?.rustPowerLevel) + /// Create permissions from the room's power levels. + init(powerLevels: RoomPowerLevels) { + ban = RoomMemberDetails.Role(rustPowerLevel: powerLevels.ban) + invite = RoomMemberDetails.Role(rustPowerLevel: powerLevels.invite) + kick = RoomMemberDetails.Role(rustPowerLevel: powerLevels.kick) + redact = RoomMemberDetails.Role(rustPowerLevel: powerLevels.redact) + eventsDefault = RoomMemberDetails.Role(rustPowerLevel: powerLevels.eventsDefault) + stateDefault = RoomMemberDetails.Role(rustPowerLevel: powerLevels.stateDefault) + usersDefault = RoomMemberDetails.Role(rustPowerLevel: powerLevels.usersDefault) + roomName = RoomMemberDetails.Role(rustPowerLevel: powerLevels.roomName) + roomAvatar = RoomMemberDetails.Role(rustPowerLevel: powerLevels.roomAvatar) + roomTopic = RoomMemberDetails.Role(rustPowerLevel: powerLevels.roomTopic) } } @@ -135,3 +113,18 @@ extension RoomMemberDetails.Role { suggestedPowerLevelForRole(role: rustRole) } } + +extension RoomPowerLevels { + static var mock: RoomPowerLevels { + RoomPowerLevels(ban: 50, + invite: 0, + kick: 50, + redact: 50, + eventsDefault: 0, + stateDefault: 50, + usersDefault: 0, + roomName: 50, + roomAvatar: 50, + roomTopic: 50) + } +} diff --git a/ElementX/Sources/Services/Room/RoomProxy.swift b/ElementX/Sources/Services/Room/RoomProxy.swift index 98d10c6c3..2499de6c4 100644 --- a/ElementX/Sources/Services/Room/RoomProxy.swift +++ b/ElementX/Sources/Services/Room/RoomProxy.swift @@ -373,9 +373,9 @@ class RoomProxy: RoomProxyProtocol { // MARK: - Power Levels - func currentPowerLevelChanges() async -> Result { + func powerLevels() async -> Result { do { - return try await .success(room.buildPowerLevelChangesFromCurrent()) + return try await .success(room.getPowerLevels()) } catch { MXLog.error("Failed building the current power level settings: \(error)") return .failure(.failedCheckingPermission) diff --git a/ElementX/Sources/Services/Room/RoomProxyProtocol.swift b/ElementX/Sources/Services/Room/RoomProxyProtocol.swift index 6549ecb2f..aa319db2b 100644 --- a/ElementX/Sources/Services/Room/RoomProxyProtocol.swift +++ b/ElementX/Sources/Services/Room/RoomProxyProtocol.swift @@ -115,7 +115,7 @@ protocol RoomProxyProtocol { // MARK: - Power Levels - func currentPowerLevelChanges() async -> Result + func powerLevels() async -> Result func applyPowerLevelChanges(_ changes: RoomPowerLevelChanges) async -> Result func updatePowerLevelsForUsers(_ updates: [(userID: String, powerLevel: Int64)]) async -> Result func canUser(userID: String, sendStateEvent event: StateEventType) async -> Result diff --git a/UnitTests/Sources/RoomChangePermissionsScreenViewModelTests.swift b/UnitTests/Sources/RoomChangePermissionsScreenViewModelTests.swift index 486bd3bb4..5f833fb18 100644 --- a/UnitTests/Sources/RoomChangePermissionsScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomChangePermissionsScreenViewModelTests.swift @@ -29,7 +29,7 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase { override func setUp() { roomProxy = RoomProxyMock(with: .init()) - viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(), + viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock), group: .roomDetails, roomProxy: roomProxy, userIndicatorController: UserIndicatorControllerMock()) @@ -45,7 +45,7 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase { XCTAssertFalse(context.viewState.hasChanges) // When updating a setting. - let setting = RoomPermissionsSetting(keyPath: \.roomAvatar, value: .user, title: "") + let setting = RoomPermissionsSetting(title: "", value: .user, keyPath: \.roomAvatar) context.settings[index] = setting // Then the setting should update and the changes should be flagged. @@ -59,7 +59,7 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase { XCTFail("There should be a setting for the room avatar.") return } - context.settings[index] = RoomPermissionsSetting(keyPath: \.roomAvatar, value: .user, title: "") + context.settings[index] = RoomPermissionsSetting(title: "", value: .user, keyPath: \.roomAvatar) XCTAssertEqual(context.settings[index].value, .user) XCTAssertTrue(context.viewState.hasChanges) diff --git a/UnitTests/Sources/RoomPermissionsTests.swift b/UnitTests/Sources/RoomPermissionsTests.swift index 14936c525..6fbc74a72 100644 --- a/UnitTests/Sources/RoomPermissionsTests.swift +++ b/UnitTests/Sources/RoomPermissionsTests.swift @@ -20,72 +20,32 @@ import XCTest @testable import ElementX class RoomPermissionsTests: XCTestCase { - func testEmptyFromRust() { - // Given an empty set of power level changes. - let powerLevelChanges = RoomPowerLevelChanges() + 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) // When creating room permissions from them. - let permissions = RoomPermissions(powerLevelChanges: powerLevelChanges) + let permissions = RoomPermissions(powerLevels: powerLevels) - // Then none of the permissions should be set. - XCTAssertNil(permissions.ban) - XCTAssertNil(permissions.invite) - XCTAssertNil(permissions.kick) - XCTAssertNil(permissions.redact) - XCTAssertNil(permissions.eventsDefault) - XCTAssertNil(permissions.stateDefault) - XCTAssertNil(permissions.usersDefault) - XCTAssertNil(permissions.roomName) - XCTAssertNil(permissions.roomAvatar) - XCTAssertNil(permissions.roomTopic) - } - - func testCompleteFromRust() { - // Given a set of power level changes with all the values set to 100. - let powerLevelChanges = RoomPowerLevelChanges(ban: 100, - invite: 100, - kick: 100, - redact: 100, - eventsDefault: 100, - stateDefault: 100, - usersDefault: 100, - roomName: 100, - roomAvatar: 100, - roomTopic: 100) - - // When creating room permissions from them. - let permissions = RoomPermissions(powerLevelChanges: powerLevelChanges) - - // Then all of the permissions should be for an administrator. + // 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, .administrator) - XCTAssertEqual(permissions.eventsDefault, .administrator) - XCTAssertEqual(permissions.stateDefault, .administrator) - XCTAssertEqual(permissions.usersDefault, .administrator) - XCTAssertEqual(permissions.roomName, .administrator) - XCTAssertEqual(permissions.roomAvatar, .administrator) - XCTAssertEqual(permissions.roomTopic, .administrator) - } - - func testToRust() { - // Given a set of permissions where on some of the values have been set. - let permissions = RoomPermissions(roomName: .administrator, roomAvatar: .administrator, roomTopic: .administrator) - - // When creating power level changes from them. - let powerLevelChanges = permissions.makePowerLevelChanges() - - // Then only the permissions that were set should be included. - XCTAssertNil(powerLevelChanges.ban, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertNil(powerLevelChanges.invite, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertNil(powerLevelChanges.kick, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertNil(powerLevelChanges.redact, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertNil(powerLevelChanges.eventsDefault, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertNil(powerLevelChanges.stateDefault, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertNil(powerLevelChanges.usersDefault, "Unset values should be nil for Rust to merge with the current value.") - XCTAssertEqual(powerLevelChanges.roomName, 100) - XCTAssertEqual(powerLevelChanges.roomAvatar, 100) - XCTAssertEqual(powerLevelChanges.roomTopic, 100) + 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) } } diff --git a/project.yml b/project.yml index e4a740f15..f27146191 100644 --- a/project.yml +++ b/project.yml @@ -48,7 +48,7 @@ packages: # Element/Matrix dependencies MatrixRustSDK: url: https://github.com/matrix-org/matrix-rust-components-swift - exactVersion: 1.1.46 + exactVersion: 1.1.47 # path: ../matrix-rust-sdk Compound: url: https://github.com/element-hq/compound-ios