Use our own JoinRule type which doesn't include the reserved .private case. (#5056)

* Stop using Rust's JoinRule.private in mocks.

It isn't used anywhere else (see MSC4413 for more context).

* Use our own JoinRule (and AllowRule) types.

* Update ElementX/Sources/Services/Room/JoinRule.swift

Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>

---------

Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
This commit is contained in:
Doug
2026-02-06 13:54:53 +00:00
committed by GitHub
parent 61763d9893
commit bff328554a
18 changed files with 119 additions and 41 deletions
@@ -379,7 +379,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space",
isSpace: true,
joinRule: .private)))
joinRule: .invite)))
static let selectedSpaceWithListViewModel = {
let viewModel = makeViewModel()
@@ -391,7 +391,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
let viewModel = makeViewModel(isKnockingEnabled: true,
selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space",
isSpace: true,
joinRule: .private)))
joinRule: .invite)))
viewModel.context.selectedAccessType = .askToJoinWithSpaceMembers
return viewModel
}()
@@ -235,7 +235,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
state.mode = .banned(sender: nil, reason: nil)
default:
switch spaceServiceRoom.joinRule {
case .private, .invite:
case .invite:
state.mode = .inviteRequired
case .knock, .knockRestricted:
state.mode = appSettings.knockingEnabled ? .knockable : .joinable
@@ -258,7 +258,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
reason: membershipDetails?.ownRoomMember.membershipChangeReason)
default:
switch roomPreview.info.joinRule {
case .private, .invite:
case .invite:
state.mode = .inviteRequired
case .knock, .knockRestricted:
state.mode = appSettings.knockingEnabled ? .knockable : .joinable
@@ -350,9 +350,9 @@ private extension SecurityAndPrivacyRoomAccessType {
case .anyone:
.public
case .spaceMembers(let spaceIDs):
.restricted(rules: spaceIDs.map { .roomMembership(roomId: $0) })
.restricted(rules: spaceIDs.map { .roomMembership(roomID: $0) })
case .askToJoinWithSpaceMembers(let spaceIDs):
.knockRestricted(rules: spaceIDs.map { .roomMembership(roomId: $0) })
.knockRestricted(rules: spaceIDs.map { .roomMembership(roomID: $0) })
}
}
}
@@ -269,7 +269,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
canonicalAlias: "#room:matrix.org",
members: .allMembersAsCreator,
joinRule: .restricted(rules: [.roomMembership(roomId: space.id)]),
joinRule: .restricted(rules: [.roomMembership(roomID: space.id)]),
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org",
spaceServiceConfiguration: .init(joinedParentSpaces: [space]))),
@@ -286,7 +286,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
canonicalAlias: "#room:matrix.org",
members: .allMembersAsCreator,
joinRule: .restricted(rules: spaces.map { .roomMembership(roomId: $0.id) }),
joinRule: .restricted(rules: spaces.map { .roomMembership(roomID: $0.id) }),
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org",
spaceServiceConfiguration: .init(joinedParentSpaces: spaces))),
@@ -319,7 +319,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
canonicalAlias: "#room:matrix.org",
members: .allMembersAsCreator,
joinRule: .knockRestricted(rules: [.roomMembership(roomId: space.id)]),
joinRule: .knockRestricted(rules: [.roomMembership(roomID: space.id)]),
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org",
spaceServiceConfiguration: .init(joinedParentSpaces: [space]))),
@@ -337,7 +337,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
canonicalAlias: "#room:matrix.org",
members: .allMembersAsCreator,
joinRule: .knockRestricted(rules: spaces.map { .roomMembership(roomId: $0.id) }),
joinRule: .knockRestricted(rules: spaces.map { .roomMembership(roomID: $0.id) }),
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org",
spaceServiceConfiguration: .init(joinedParentSpaces: spaces))),
@@ -141,7 +141,7 @@ struct SpaceHeaderView_Previews: PreviewProvider, TestablePreview {
"Interdum mauris ultrices tincidunt proin morbi erat aenean risus nibh.",
"Diam amet sit fermentum vulputate faucibus."].joined(separator: " "),
canonicalAlias: "#subspace:matrix.org",
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))
joinRule: .knockRestricted(rules: [.roomMembership(roomID: "")]))
]
}
}
@@ -156,7 +156,7 @@ struct LeaveSpaceView_Previews: PreviewProvider, TestablePreview {
joinedMembersCount: 76,
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))
joinRule: .knockRestricted(rules: [.roomMembership(roomID: "")]))
static func makeViewModel(mode: LeaveSpaceHandleProxy.Mode) -> LeaveSpaceViewModel {
let rooms: [LeaveSpaceRoom] = switch mode {
@@ -220,7 +220,7 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview {
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
canonicalAlias: "#engineering-team:element.io",
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))
joinRule: .knockRestricted(rules: [.roomMembership(roomID: "")]))
let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: spaceServiceRoom,
initialSpaceRooms: isNewSpace ? [] : .mockSpaceList))