160 lines
7.4 KiB
Swift
160 lines
7.4 KiB
Swift
//
|
|
// Copyright 2025 Element Creations Ltd.
|
|
// Copyright 2025 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
import Foundation
|
|
import MatrixRustSDK
|
|
import MatrixRustSDKMocks
|
|
|
|
extension LeaveSpaceHandleSDKMock {
|
|
struct Configuration {
|
|
var rooms: [LeaveSpaceRoom] = .mockRooms
|
|
}
|
|
|
|
convenience init(_ configuration: Configuration) {
|
|
self.init()
|
|
|
|
roomsClosure = { configuration.rooms }
|
|
}
|
|
}
|
|
|
|
extension [LeaveSpaceRoom] {
|
|
static func mockRoomsWithSpace(spaceRoomProxy: SpaceRoomProxyProtocol, isLastAdmin: Bool) -> [LeaveSpaceRoom] {
|
|
mockRooms + mockSingleSpace(spaceRoomProxy: spaceRoomProxy, isLastAdmin: isLastAdmin)
|
|
}
|
|
|
|
static func mockSingleSpace(spaceRoomProxy: SpaceRoomProxyProtocol, isLastAdmin: Bool) -> [LeaveSpaceRoom] {
|
|
[LeaveSpaceRoom(spaceRoom: SpaceRoom(id: spaceRoomProxy.id,
|
|
name: spaceRoomProxy.name,
|
|
avatarURL: spaceRoomProxy.avatarURL,
|
|
isSpace: true,
|
|
memberCount: UInt64(spaceRoomProxy.joinedMembersCount),
|
|
joinRule: spaceRoomProxy.joinRule),
|
|
isLastAdmin: isLastAdmin)]
|
|
}
|
|
|
|
static var mockAdminRooms: [LeaveSpaceRoom] {
|
|
mockRooms.filter(\.isLastAdmin)
|
|
}
|
|
|
|
static var mockRooms: [LeaveSpaceRoom] {
|
|
[
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "1",
|
|
name: "Lighting",
|
|
avatarURL: .mockMXCAvatar,
|
|
isSpace: false,
|
|
memberCount: 10,
|
|
joinRule: .public),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "2",
|
|
name: "Sound",
|
|
isSpace: false,
|
|
memberCount: 20,
|
|
joinRule: .private),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "3",
|
|
name: "Set & Costume",
|
|
isSpace: false,
|
|
memberCount: 25,
|
|
joinRule: .restricted(rules: [])),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "4",
|
|
name: "The Theatre",
|
|
isSpace: true,
|
|
memberCount: 100,
|
|
joinRule: .private,
|
|
childrenCount: 20),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "5",
|
|
name: "Bookings",
|
|
isSpace: false,
|
|
memberCount: 200,
|
|
joinRule: .private,
|
|
childrenCount: 0),
|
|
isLastAdmin: true),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "6",
|
|
name: "Events",
|
|
isSpace: false,
|
|
memberCount: 65,
|
|
joinRule: .restricted(rules: []),
|
|
childrenCount: 0),
|
|
isLastAdmin: true),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "7",
|
|
name: "Mario Kart",
|
|
isSpace: false,
|
|
memberCount: 123,
|
|
joinRule: .public),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "8",
|
|
name: "Tetris",
|
|
isSpace: false,
|
|
memberCount: 95,
|
|
joinRule: .public),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "9",
|
|
name: "Minecraft",
|
|
isSpace: false,
|
|
memberCount: 39,
|
|
joinRule: .public),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "10",
|
|
name: "Lemmings",
|
|
isSpace: false,
|
|
memberCount: 67,
|
|
joinRule: .public),
|
|
isLastAdmin: true),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "11",
|
|
name: "Rayman",
|
|
isSpace: false,
|
|
memberCount: 23,
|
|
joinRule: .public),
|
|
isLastAdmin: false),
|
|
LeaveSpaceRoom(spaceRoom: SpaceRoom(id: "12",
|
|
name: "Gaming",
|
|
avatarURL: .mockMXCAvatar,
|
|
isSpace: true,
|
|
memberCount: 835,
|
|
joinRule: .public,
|
|
childrenCount: 15),
|
|
isLastAdmin: true)
|
|
]
|
|
}
|
|
}
|
|
|
|
private extension SpaceRoom {
|
|
init(id: String,
|
|
canonicalAlias: String? = nil,
|
|
name: String,
|
|
topic: String? = nil,
|
|
avatarURL: URL? = nil,
|
|
isSpace: Bool,
|
|
memberCount: UInt64,
|
|
joinRule: JoinRule? = .public,
|
|
isDirect: Bool? = false,
|
|
childrenCount: UInt64 = 0,
|
|
membership: Membership? = .joined,
|
|
heroes: [RoomHero]? = [],
|
|
via: [String] = []) {
|
|
self.init(roomId: id,
|
|
canonicalAlias: canonicalAlias,
|
|
displayName: name,
|
|
rawName: name,
|
|
topic: topic,
|
|
avatarUrl: avatarURL?.absoluteString,
|
|
roomType: isSpace ? .space : .room,
|
|
numJoinedMembers: memberCount,
|
|
joinRule: joinRule,
|
|
worldReadable: true,
|
|
guestCanJoin: false,
|
|
isDirect: isDirect,
|
|
childrenCount: childrenCount,
|
|
state: membership,
|
|
heroes: heroes,
|
|
via: via)
|
|
}
|
|
}
|