Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 42 additions & 25 deletions ElementX.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -623,6 +623,7 @@
"screen_room_single_knock_request_title" = "%1$@ wants to join this room";
"screen_room_change_permissions_change_settings" = "Change settings";
"screen_room_change_permissions_manage_space" = "Manage space";
"screen_room_change_permissions_manage_space_rooms" = "Manage rooms";
"screen_room_change_permissions_title" = "Permissions";
"screen_room_change_role_administrators_or_owners_title" = "Edit Admins or Owners";
"screen_room_details_pinned_events_row_title" = "Pinned messages";
Expand Down
2 changes: 2 additions & 0 deletions ElementX/Sources/Generated/Strings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2306,6 +2306,8 @@ internal enum L10n {
internal static var screenRoomChangePermissionsInvitePeople: String { return L10n.tr("Localizable", "screen_room_change_permissions_invite_people") }
/// Manage space
internal static var screenRoomChangePermissionsManageSpace: String { return L10n.tr("Localizable", "screen_room_change_permissions_manage_space") }
/// Manage rooms
internal static var screenRoomChangePermissionsManageSpaceRooms: String { return L10n.tr("Localizable", "screen_room_change_permissions_manage_space_rooms") }
/// Manage members
internal static var screenRoomChangePermissionsMemberModeration: String { return L10n.tr("Localizable", "screen_room_change_permissions_member_moderation") }
/// Messages and content
Expand Down
3 changes: 2 additions & 1 deletion ElementX/Sources/Mocks/RoomPowerLevelsProxyMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ extension RoomPowerLevelsValues {
usersDefault: 0,
roomName: 50,
roomAvatar: 50,
roomTopic: 50)
roomTopic: 50,
spaceChild: 50)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ extension RoomChangePermissionsScreenViewState {
case .manageSpace:
if isSpace {
settings[group] = [
RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsManageSpaceRooms,
value: currentPermissions.spaceChild,
keyPath: \.spaceChild),
RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsChangeSettings,
value: currentPermissions.stateDefault,
keyPath: \.stateDefault)
Expand Down
4 changes: 4 additions & 0 deletions ElementX/Sources/Services/Room/RoomPermissions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ struct RoomPermissionsSetting: Identifiable {
case \.roomName: \.roomName
case \.roomAvatar: \.roomAvatar
case \.roomTopic: \.roomTopic
case \.spaceChild: \.spaceChild
default: fatalError("Unexpected key path: \(keyPath)")
}
}
Expand All @@ -67,6 +68,8 @@ struct RoomPermissions {
var roomAvatar: RoomRole
/// The level required to change the room's topic.
var roomTopic: RoomRole
/// The level required to add/remove childrens from a space.
var spaceChild: RoomRole
}

extension RoomPermissions {
Expand All @@ -82,5 +85,6 @@ extension RoomPermissions {
roomName = RoomRole(powerLevelValue: powerLevels.roomName)
roomAvatar = RoomRole(powerLevelValue: powerLevels.roomAvatar)
roomTopic = RoomRole(powerLevelValue: powerLevels.roomTopic)
spaceChild = RoomRole(powerLevelValue: powerLevels.spaceChild)
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,9 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
var context: RoomChangePermissionsScreenViewModelType.Context {
viewModel.context
}

override func setUp() {
roomProxy = JoinedRoomProxyMock(.init())
viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
roomProxy: roomProxy,
userIndicatorController: UserIndicatorControllerMock(),
analytics: ServiceLocator.shared.analytics)
}

func testChangeSetting() {
setUp(isSpace: false)
// 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.")
Expand All @@ -46,6 +39,7 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
}

func testSave() async throws {
setUp(isSpace: false)
// Given a screen with changes.
guard let index = context.settings[.roomDetails]?.firstIndex(where: { $0.keyPath == \.roomAvatar }) else {
XCTFail("There should be a setting for the room avatar.")
Expand All @@ -68,6 +62,7 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
}

func testSaveNoChanges() async throws {
setUp(isSpace: false)
// Given a screen with no changes.
XCTAssertFalse(context.viewState.hasChanges)

Expand All @@ -77,4 +72,28 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
// Then nothing should happen.
XCTAssertFalse(roomProxy.applyPowerLevelChangesCalled)
}

func testDefaultStateRoom() async throws {
setUp(isSpace: false)
XCTAssertNotNil(context.settings[.roomDetails])
XCTAssertNotNil(context.settings[.memberModeration])
XCTAssertNotNil(context.settings[.messagesAndContent])
XCTAssertNil(context.settings[.manageSpace])
}

func testDefaultStateSpace() async throws {
setUp(isSpace: true)
XCTAssertNotNil(context.settings[.roomDetails])
XCTAssertNotNil(context.settings[.memberModeration])
XCTAssertNil(context.settings[.messagesAndContent])
XCTAssertNotNil(context.settings[.manageSpace])
}

private func setUp(isSpace: Bool) {
roomProxy = JoinedRoomProxyMock(.init(isSpace: isSpace))
viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
roomProxy: roomProxy,
userIndicatorController: UserIndicatorControllerMock(),
analytics: ServiceLocator.shared.analytics)
}
}
4 changes: 3 additions & 1 deletion UnitTests/Sources/RoomPermissionsTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ class RoomPermissionsTests: XCTestCase {
usersDefault: 0,
roomName: 0,
roomAvatar: 0,
roomTopic: 0)
roomTopic: 0,
spaceChild: 100)

// When creating room permissions from them.
let permissions = RoomPermissions(powerLevels: powerLevels)
Expand All @@ -39,5 +40,6 @@ class RoomPermissionsTests: XCTestCase {
XCTAssertEqual(permissions.roomName, .user)
XCTAssertEqual(permissions.roomAvatar, .user)
XCTAssertEqual(permissions.roomTopic, .user)
XCTAssertEqual(permissions.spaceChild, .administrator)
}
}
2 changes: 1 addition & 1 deletion project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ packages:
# Element/Matrix dependencies
MatrixRustSDK:
url: https://github.com/element-hq/matrix-rust-components-swift
exactVersion: 25.11.11
exactVersion: 25.11.13
# path: ../matrix-rust-sdk
Compound:
path: compound-ios
Expand Down
Loading