Last Owner should edit admins, and not leave when is last (#4372)

This commit is contained in:
Mauro
2025-08-07 10:40:14 +02:00
committed by GitHub
parent be525e6a60
commit 5ab6f90863
67 changed files with 691 additions and 363 deletions
@@ -13334,11 +13334,6 @@ class RoomMemberProxyMock: RoomMemberProxyProtocol, @unchecked Sendable {
set(value) { underlyingPowerLevel = value }
}
var underlyingPowerLevel: RoomPowerLevel!
var role: RoomMemberRole {
get { return underlyingRole }
set(value) { underlyingRole = value }
}
var underlyingRole: RoomMemberRole!
}
class RoomMembershipDetailsProxyMock: RoomMembershipDetailsProxyProtocol, @unchecked Sendable {
@@ -82,7 +82,7 @@ private extension RoomMember {
powerLevel: proxy.powerLevel.rustPowerLevel,
normalizedPowerLevel: proxy.powerLevel.rustPowerLevel,
isIgnored: proxy.isIgnored,
suggestedRoleForPowerLevel: proxy.role,
suggestedRoleForPowerLevel: proxy.role.rustRole,
membershipChangeReason: proxy.membershipChangeReason)
}
}
@@ -89,7 +89,7 @@ extension JoinedRoomProxyMock {
guard case .success(let member) = await self?.getMember(userID: userID) else {
return .failure(.sdkError(RoomProxyMockError.generic))
}
return .success(member.role)
return .success(member.role.rustRole)
}
updatePowerLevelsForUsersReturnValue = .success(())
@@ -17,7 +17,6 @@ struct RoomMemberProxyMockConfiguration {
var isIgnored = false
var powerLevel = RoomPowerLevel(value: 0)
var role = RoomMemberRole.user
}
extension RoomMemberProxyMock {
@@ -36,7 +35,6 @@ extension RoomMemberProxyMock {
isIgnored = configuration.isIgnored
powerLevel = configuration.powerLevel
role = configuration.role
}
// Mocks
@@ -52,8 +50,15 @@ extension RoomMemberProxyMock {
displayName: "Me",
avatarURL: .mockMXCUserAvatar,
membership: .join,
powerLevel: .init(value: 100),
role: .administrator))
powerLevel: .init(value: 100)))
}
static var mockMeCreator: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@me:matrix.org",
displayName: "Me",
avatarURL: .mockMXCUserAvatar,
membership: .join,
powerLevel: .infinite))
}
static var mockAlice: RoomMemberProxyMock {
@@ -116,32 +121,28 @@ extension RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@admin:matrix.org",
displayName: "Arthur",
membership: .join,
powerLevel: .init(value: 100),
role: .administrator))
powerLevel: .init(value: 100)))
}
static var mockCreator: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@creator:matrix.org",
displayName: "God",
membership: .join,
powerLevel: .infinite,
role: .creator))
powerLevel: .infinite))
}
static var mockOwner: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@owner:matrix.org",
displayName: "Guinevere",
membership: .join,
powerLevel: .value(150),
role: .administrator))
powerLevel: .value(150)))
}
static var mockModerator: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@mod:matrix.org",
displayName: "Merlin",
membership: .join,
powerLevel: .init(value: 50),
role: .moderator))
powerLevel: .init(value: 50)))
}
static var mockBanned: [RoomMemberProxyMock] {
@@ -181,4 +182,33 @@ extension Array where Element == RoomMemberProxyMock {
.mockAdmin,
.mockModerator
]
/// This also includes the creator and the owner role.
static let allMembersAsAdminV2: [RoomMemberProxyMock] = [
.mockMeAdmin,
.mockAlice,
.mockBob,
.mockCharlie,
.mockDan,
.mockInvited,
.mockIgnored,
.mockAdmin,
.mockModerator,
.mockOwner,
.mockCreator
]
static let allMembersAsCreator: [RoomMemberProxyMock] = [
.mockAdmin,
.mockAlice,
.mockBob,
.mockCharlie,
.mockDan,
.mockInvited,
.mockIgnored,
.mockModerator,
.mockCreator,
.mockMeCreator,
.mockOwner
]
}