Make the SpaceRoomListProxy publish its SpaceRoomProxy updates. (#4607)

Also removes an unused `parent` parameter that was missed when removing the parent name and includes some regenerated snapshots that were missed in the last PR.
This commit is contained in:
Doug
2025-10-09 17:22:43 +01:00
committed by GitHub
parent c588ace336
commit f01f31954d
24 changed files with 91 additions and 63 deletions
@@ -260,7 +260,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
switch room { switch room {
case .joined(let roomProxy): case .joined(let roomProxy):
if roomProxy.infoPublisher.value.isSpace { if roomProxy.infoPublisher.value.isSpace {
switch await userSession.clientProxy.spaceService.spaceRoomList(spaceID: roomProxy.id, parent: nil) { switch await userSession.clientProxy.spaceService.spaceRoomList(spaceID: roomProxy.id) {
case .success(let spaceRoomListProxy): case .success(let spaceRoomListProxy):
actionsSubject.send(.continueWithSpaceFlow(spaceRoomListProxy)) actionsSubject.send(.continueWithSpaceFlow(spaceRoomListProxy))
case .failure: case .failure:
@@ -93,7 +93,7 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol {
stateMachine.addRouteMapping { event, fromState, userInfo in stateMachine.addRouteMapping { event, fromState, userInfo in
guard event == .selectSpace, case .spaceList = fromState else { return nil } guard event == .selectSpace, case .spaceList = fromState else { return nil }
guard let spaceRoomListProxy = userInfo as? SpaceRoomListProxyProtocol else { fatalError("A space proxy must be provided.") } guard let spaceRoomListProxy = userInfo as? SpaceRoomListProxyProtocol else { fatalError("A space proxy must be provided.") }
return .spaceList(selectedSpaceID: spaceRoomListProxy.spaceRoomProxy.id) return .spaceList(selectedSpaceID: spaceRoomListProxy.id)
} handler: { [weak self] context in } handler: { [weak self] context in
guard let self, let spaceRoomListProxy = context.userInfo as? SpaceRoomListProxyProtocol else { return } guard let self, let spaceRoomListProxy = context.userInfo as? SpaceRoomListProxyProtocol else { return }
startSpaceFlow(spaceRoomListProxy: spaceRoomListProxy) startSpaceFlow(spaceRoomListProxy: spaceRoomListProxy)
@@ -164,6 +164,6 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol {
} }
coordinator.start() coordinator.start()
selectedSpaceSubject.send(spaceRoomListProxy.spaceRoomProxy.id) selectedSpaceSubject.send(spaceRoomListProxy.id)
} }
} }
@@ -21,7 +21,7 @@ enum SpaceFlowCoordinatorEntryPoint {
var spaceID: String { var spaceID: String {
switch self { switch self {
case .space(let spaceRoomListProxy): spaceRoomListProxy.spaceRoomProxy.id case .space(let spaceRoomListProxy): spaceRoomListProxy.id
case .joinSpace(let spaceRoomProxy): spaceRoomProxy.id case .joinSpace(let spaceRoomProxy): spaceRoomProxy.id
} }
} }
@@ -15943,11 +15943,16 @@ class SessionVerificationControllerProxyMock: SessionVerificationControllerProxy
} }
} }
class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable { class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable {
var spaceRoomProxy: SpaceRoomProxyProtocol { var id: String {
get { return underlyingSpaceRoomProxy } get { return underlyingId }
set(value) { underlyingSpaceRoomProxy = value } set(value) { underlyingId = value }
} }
var underlyingSpaceRoomProxy: SpaceRoomProxyProtocol! var underlyingId: String!
var spaceRoomProxyPublisher: CurrentValuePublisher<SpaceRoomProxyProtocol, Never> {
get { return underlyingSpaceRoomProxyPublisher }
set(value) { underlyingSpaceRoomProxyPublisher = value }
}
var underlyingSpaceRoomProxyPublisher: CurrentValuePublisher<SpaceRoomProxyProtocol, Never>!
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { var spaceRoomsPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> {
get { return underlyingSpaceRoomsPublisher } get { return underlyingSpaceRoomsPublisher }
set(value) { underlyingSpaceRoomsPublisher = value } set(value) { underlyingSpaceRoomsPublisher = value }
@@ -16047,15 +16052,15 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
//MARK: - spaceRoomList //MARK: - spaceRoomList
var spaceRoomListSpaceIDParentUnderlyingCallsCount = 0 var spaceRoomListSpaceIDUnderlyingCallsCount = 0
var spaceRoomListSpaceIDParentCallsCount: Int { var spaceRoomListSpaceIDCallsCount: Int {
get { get {
if Thread.isMainThread { if Thread.isMainThread {
return spaceRoomListSpaceIDParentUnderlyingCallsCount return spaceRoomListSpaceIDUnderlyingCallsCount
} else { } else {
var returnValue: Int? = nil var returnValue: Int? = nil
DispatchQueue.main.sync { DispatchQueue.main.sync {
returnValue = spaceRoomListSpaceIDParentUnderlyingCallsCount returnValue = spaceRoomListSpaceIDUnderlyingCallsCount
} }
return returnValue! return returnValue!
@@ -16063,29 +16068,29 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
} }
set { set {
if Thread.isMainThread { if Thread.isMainThread {
spaceRoomListSpaceIDParentUnderlyingCallsCount = newValue spaceRoomListSpaceIDUnderlyingCallsCount = newValue
} else { } else {
DispatchQueue.main.sync { DispatchQueue.main.sync {
spaceRoomListSpaceIDParentUnderlyingCallsCount = newValue spaceRoomListSpaceIDUnderlyingCallsCount = newValue
} }
} }
} }
} }
var spaceRoomListSpaceIDParentCalled: Bool { var spaceRoomListSpaceIDCalled: Bool {
return spaceRoomListSpaceIDParentCallsCount > 0 return spaceRoomListSpaceIDCallsCount > 0
} }
var spaceRoomListSpaceIDParentReceivedArguments: (spaceID: String, parent: SpaceRoomProxyProtocol?)? var spaceRoomListSpaceIDReceivedSpaceID: String?
var spaceRoomListSpaceIDParentReceivedInvocations: [(spaceID: String, parent: SpaceRoomProxyProtocol?)] = [] var spaceRoomListSpaceIDReceivedInvocations: [String] = []
var spaceRoomListSpaceIDParentUnderlyingReturnValue: Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>! var spaceRoomListSpaceIDUnderlyingReturnValue: Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>!
var spaceRoomListSpaceIDParentReturnValue: Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>! { var spaceRoomListSpaceIDReturnValue: Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>! {
get { get {
if Thread.isMainThread { if Thread.isMainThread {
return spaceRoomListSpaceIDParentUnderlyingReturnValue return spaceRoomListSpaceIDUnderlyingReturnValue
} else { } else {
var returnValue: Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>? = nil var returnValue: Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>? = nil
DispatchQueue.main.sync { DispatchQueue.main.sync {
returnValue = spaceRoomListSpaceIDParentUnderlyingReturnValue returnValue = spaceRoomListSpaceIDUnderlyingReturnValue
} }
return returnValue! return returnValue!
@@ -16093,26 +16098,26 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
} }
set { set {
if Thread.isMainThread { if Thread.isMainThread {
spaceRoomListSpaceIDParentUnderlyingReturnValue = newValue spaceRoomListSpaceIDUnderlyingReturnValue = newValue
} else { } else {
DispatchQueue.main.sync { DispatchQueue.main.sync {
spaceRoomListSpaceIDParentUnderlyingReturnValue = newValue spaceRoomListSpaceIDUnderlyingReturnValue = newValue
} }
} }
} }
} }
var spaceRoomListSpaceIDParentClosure: ((String, SpaceRoomProxyProtocol?) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>)? var spaceRoomListSpaceIDClosure: ((String) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>)?
func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError> { func spaceRoomList(spaceID: String) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError> {
spaceRoomListSpaceIDParentCallsCount += 1 spaceRoomListSpaceIDCallsCount += 1
spaceRoomListSpaceIDParentReceivedArguments = (spaceID: spaceID, parent: parent) spaceRoomListSpaceIDReceivedSpaceID = spaceID
DispatchQueue.main.async { DispatchQueue.main.async {
self.spaceRoomListSpaceIDParentReceivedInvocations.append((spaceID: spaceID, parent: parent)) self.spaceRoomListSpaceIDReceivedInvocations.append(spaceID)
} }
if let spaceRoomListSpaceIDParentClosure = spaceRoomListSpaceIDParentClosure { if let spaceRoomListSpaceIDClosure = spaceRoomListSpaceIDClosure {
return await spaceRoomListSpaceIDParentClosure(spaceID, parent) return await spaceRoomListSpaceIDClosure(spaceID)
} else { } else {
return spaceRoomListSpaceIDParentReturnValue return spaceRoomListSpaceIDReturnValue
} }
} }
//MARK: - leaveSpace //MARK: - leaveSpace
@@ -32,7 +32,8 @@ extension SpaceRoomListProxyMock {
let spaceRoomsSubject: CurrentValueSubject<[SpaceRoomProxyProtocol], Never> = .init(configuration.initialSpaceRooms) let spaceRoomsSubject: CurrentValueSubject<[SpaceRoomProxyProtocol], Never> = .init(configuration.initialSpaceRooms)
spaceRoomProxy = configuration.spaceRoomProxy id = configuration.spaceRoomProxy.id
spaceRoomProxyPublisher = .init(configuration.spaceRoomProxy)
spaceRoomsPublisher = spaceRoomsSubject.asCurrentValuePublisher() spaceRoomsPublisher = spaceRoomsSubject.asCurrentValuePublisher()
paginationStatePublisher = configuration.paginationStateSubject.asCurrentValuePublisher() paginationStatePublisher = configuration.paginationStateSubject.asCurrentValuePublisher()
@@ -20,7 +20,7 @@ extension SpaceServiceProxyMock {
self.init() self.init()
joinedSpacesPublisher = .init(configuration.joinedSpaces) joinedSpacesPublisher = .init(configuration.joinedSpaces)
spaceRoomListSpaceIDParentClosure = { spaceID, _ in spaceRoomListSpaceIDClosure = { spaceID in
if let spaceRoomList = configuration.spaceRoomLists[spaceID] { if let spaceRoomList = configuration.spaceRoomLists[spaceID] {
.success(spaceRoomList) .success(spaceRoomList)
} else { } else {
+4
View File
@@ -92,6 +92,10 @@ extension SDKListener: SpaceRoomListPaginationStateListener where T == SpaceRoom
func onUpdate(paginationState: SpaceRoomListPaginationState) { onUpdateClosure(paginationState) } func onUpdate(paginationState: SpaceRoomListPaginationState) { onUpdateClosure(paginationState) }
} }
extension SDKListener: SpaceRoomListSpaceListener where T == SpaceRoom? {
func onUpdate(space: SpaceRoom?) { onUpdateClosure(space) }
}
// MARK: Room // MARK: Room
extension SDKListener: RoomInfoListener where T == RoomInfo { extension SDKListener: RoomInfoListener where T == RoomInfo {
@@ -437,7 +437,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
if roomProxy.info.isSpace { if roomProxy.info.isSpace {
let spaceService = userSession.clientProxy.spaceService let spaceService = userSession.clientProxy.spaceService
switch await spaceService.spaceRoomList(spaceID: roomProxy.id, parent: nil) { switch await spaceService.spaceRoomList(spaceID: roomProxy.id) {
case .success(let spaceRoomListProxy): case .success(let spaceRoomListProxy):
actionsSubject.send(.presentSpace(spaceRoomListProxy)) actionsSubject.send(.presentSpace(spaceRoomListProxy))
case .failure(let error): case .failure(let error):
@@ -336,7 +336,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
return return
} }
switch await clientProxy.spaceService.spaceRoomList(spaceID: roomID, parent: nil) { switch await clientProxy.spaceService.spaceRoomList(spaceID: roomID) {
case .success(let spaceRoomListProxy): case .success(let spaceRoomListProxy):
actionsSubject.send(.joined(.space(spaceRoomListProxy))) actionsSubject.send(.joined(.space(spaceRoomListProxy)))
case .failure(let error): case .failure(let error):
@@ -78,7 +78,7 @@ class SpaceListScreenViewModel: SpaceListScreenViewModelType, SpaceListScreenVie
// MARK: - Private // MARK: - Private
private func selectSpace(_ spaceRoomProxy: SpaceRoomProxyProtocol) async { private func selectSpace(_ spaceRoomProxy: SpaceRoomProxyProtocol) async {
switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id, parent: nil) { switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id) {
case .success(let spaceRoomListProxy): case .success(let spaceRoomListProxy):
actionsSubject.send(.selectSpace(spaceRoomListProxy)) actionsSubject.send(.selectSpace(spaceRoomListProxy))
case .failure(let error): case .failure(let error):
@@ -15,7 +15,7 @@ enum SpaceScreenViewModelAction {
} }
struct SpaceScreenViewState: BindableState { struct SpaceScreenViewState: BindableState {
let space: SpaceRoomProxyProtocol var space: SpaceRoomProxyProtocol
var permalink: URL? var permalink: URL?
@@ -31,11 +31,16 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
clientProxy = userSession.clientProxy clientProxy = userSession.clientProxy
self.userIndicatorController = userIndicatorController self.userIndicatorController = userIndicatorController
super.init(initialViewState: SpaceScreenViewState(space: spaceRoomListProxy.spaceRoomProxy, super.init(initialViewState: SpaceScreenViewState(space: spaceRoomListProxy.spaceRoomProxyPublisher.value,
rooms: spaceRoomListProxy.spaceRoomsPublisher.value, rooms: spaceRoomListProxy.spaceRoomsPublisher.value,
selectedSpaceRoomID: selectedSpaceRoomPublisher.value), selectedSpaceRoomID: selectedSpaceRoomPublisher.value),
mediaProvider: userSession.mediaProvider) mediaProvider: userSession.mediaProvider)
spaceRoomListProxy.spaceRoomProxyPublisher
.receive(on: DispatchQueue.main)
.weakAssign(to: \.state.space, on: self)
.store(in: &cancellables)
spaceRoomListProxy.spaceRoomsPublisher spaceRoomListProxy.spaceRoomsPublisher
.receive(on: DispatchQueue.main) .receive(on: DispatchQueue.main)
.weakAssign(to: \.state.rooms, on: self) .weakAssign(to: \.state.rooms, on: self)
@@ -62,7 +67,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
.store(in: &cancellables) .store(in: &cancellables)
Task { Task {
if case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(spaceRoomListProxy.spaceRoomProxy.id), if case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(spaceRoomListProxy.id),
case let .success(permalinkURL) = await roomProxy.matrixToPermalink() { case let .success(permalinkURL) = await roomProxy.matrixToPermalink() {
state.permalink = permalinkURL state.permalink = permalinkURL
} }
@@ -134,7 +139,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
} }
private func selectSpace(_ spaceRoomProxy: SpaceRoomProxyProtocol) async { private func selectSpace(_ spaceRoomProxy: SpaceRoomProxyProtocol) async {
switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id, parent: spaceRoomListProxy.spaceRoomProxy) { switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id) {
case .success(let spaceRoomListProxy): case .success(let spaceRoomListProxy):
actionsSubject.send(.selectSpace(spaceRoomListProxy)) actionsSubject.send(.selectSpace(spaceRoomListProxy))
case .failure(let error): case .failure(let error):
@@ -144,7 +149,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
} }
private func showLeaveSpaceConfirmation() async { private func showLeaveSpaceConfirmation() async {
guard case let .success(leaveHandle) = await spaceServiceProxy.leaveSpace(spaceID: spaceRoomListProxy.spaceRoomProxy.id) else { guard case let .success(leaveHandle) = await spaceServiceProxy.leaveSpace(spaceID: spaceRoomListProxy.id) else {
showFailureIndicator() showFailureIndicator()
return return
} }
@@ -9,8 +9,15 @@ import Combine
import MatrixRustSDK import MatrixRustSDK
class SpaceRoomListProxy: SpaceRoomListProxyProtocol { class SpaceRoomListProxy: SpaceRoomListProxyProtocol {
var id: String { spaceRoomProxyPublisher.value.id }
private let spaceRoomList: SpaceRoomListProtocol private let spaceRoomList: SpaceRoomListProtocol
let spaceRoomProxy: SpaceRoomProxyProtocol
private var spaceRoomProxyHandle: TaskHandle?
private let spaceRoomProxySubject: CurrentValueSubject<SpaceRoomProxyProtocol, Never>
var spaceRoomProxyPublisher: CurrentValuePublisher<SpaceRoomProxyProtocol, Never> {
spaceRoomProxySubject.asCurrentValuePublisher()
}
private var spaceRoomsHandle: TaskHandle? private var spaceRoomsHandle: TaskHandle?
private let spaceRoomsSubject = CurrentValueSubject<[SpaceRoomProxyProtocol], Never>([]) private let spaceRoomsSubject = CurrentValueSubject<[SpaceRoomProxyProtocol], Never>([])
@@ -25,7 +32,7 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol {
guard let spaceRoom = spaceRoomList.space() else { throw SpaceRoomListProxyError.missingSpace } guard let spaceRoom = spaceRoomList.space() else { throw SpaceRoomListProxyError.missingSpace }
self.spaceRoomList = spaceRoomList self.spaceRoomList = spaceRoomList
spaceRoomProxy = SpaceRoomProxy(spaceRoom: spaceRoom) spaceRoomProxySubject = .init(SpaceRoomProxy(spaceRoom: spaceRoom))
let paginationStateSubject = CurrentValueSubject<SpaceRoomListPaginationState, Never>(spaceRoomList.paginationState()) let paginationStateSubject = CurrentValueSubject<SpaceRoomListPaginationState, Never>(spaceRoomList.paginationState())
paginationStatePublisher = paginationStateSubject.asCurrentValuePublisher() paginationStatePublisher = paginationStateSubject.asCurrentValuePublisher()
@@ -37,6 +44,11 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol {
spaceRoomsHandle = spaceRoomList.subscribeToRoomUpdate(listener: SDKListener { [weak self] updates in spaceRoomsHandle = spaceRoomList.subscribeToRoomUpdate(listener: SDKListener { [weak self] updates in
self?.handleUpdates(updates) self?.handleUpdates(updates)
}) })
spaceRoomProxyHandle = spaceRoomList.subscribeToSpaceUpdates(listener: SDKListener { [weak self] spaceRoom in
guard let spaceRoom else { return }
self?.spaceRoomProxySubject.send(SpaceRoomProxy(spaceRoom: spaceRoom))
})
} }
func paginate() async { func paginate() async {
@@ -14,8 +14,9 @@ enum SpaceRoomListProxyError: Error {
// sourcery: AutoMockable // sourcery: AutoMockable
protocol SpaceRoomListProxyProtocol { protocol SpaceRoomListProxyProtocol {
var spaceRoomProxy: SpaceRoomProxyProtocol { get } var id: String { get }
var spaceRoomProxyPublisher: CurrentValuePublisher<SpaceRoomProxyProtocol, Never> { get }
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get } var spaceRoomsPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get }
var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> { get } var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> { get }
@@ -30,7 +30,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol {
}) })
} }
func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError> { func spaceRoomList(spaceID: String) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError> {
do { do {
return try await .success(SpaceRoomListProxy(spaceService.spaceRoomList(spaceId: spaceID))) return try await .success(SpaceRoomListProxy(spaceService.spaceRoomList(spaceId: spaceID)))
} catch { } catch {
@@ -16,6 +16,6 @@ enum SpaceServiceProxyError: Error {
protocol SpaceServiceProxyProtocol { protocol SpaceServiceProxyProtocol {
var joinedSpacesPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get } var joinedSpacesPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get }
func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError> func spaceRoomList(spaceID: String) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>
func leaveSpace(spaceID: String) async -> Result<LeaveSpaceHandleProxy, SpaceServiceProxyError> func leaveSpace(spaceID: String) async -> Result<LeaveSpaceHandleProxy, SpaceServiceProxyError>
} }
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:88a74173a12b71340404e5e7ddf643e5b423225dd7e7341ff7999395e85ab29b oid sha256:5851e5b7b8556d5a72e4d5d7557957547a1a7f2d9ec80f324522e67599365362
size 96983 size 111868
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:04b87616c651ec510de4518fd8257b63e50668e3e0b3a95e3ca32e64d5aa25b0 oid sha256:a2a32f990080fa0445e3cc0e83b8ea109dd3101f4a12fe804b3d5a325df516ad
size 106567 size 126584
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:265b0cd6386b88ca25348afa117b8e3ba62b6d60c27858481706f62d952f06cf oid sha256:3b4c93ea3a20e890eee10c47d100a77cdf0f6ead386055e0e11a59c2287742b1
size 54134 size 66152
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:32e0d83b9289cc3d0f0ae904fd3bcd5c0e7694f5417aa3ceb8ef0722aa7c3dbe oid sha256:8187cd536e01a3a940c683fd1d9e8636ff0cb8f973f8f5a2ce0e0e1d83dd32e6
size 59145 size 75159
@@ -406,7 +406,7 @@ class HomeScreenViewModelTests: XCTestCase {
clientProxy.roomForIdentifierClosure = { spaceID in .invited(InvitedRoomProxyMock(.init(id: spaceID, isSpace: true))) } clientProxy.roomForIdentifierClosure = { spaceID in .invited(InvitedRoomProxyMock(.init(id: spaceID, isSpace: true))) }
let spaceServiceProxy = SpaceServiceProxyMock(.init()) let spaceServiceProxy = SpaceServiceProxyMock(.init())
spaceServiceProxy.spaceRoomListSpaceIDParentClosure = { spaceID, _ in spaceServiceProxy.spaceRoomListSpaceIDClosure = { spaceID in
.success(SpaceRoomListProxyMock(.init(spaceRoomProxy: SpaceRoomProxyMock(.init(id: spaceID, isSpace: true))))) .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: SpaceRoomProxyMock(.init(id: spaceID, isSpace: true)))))
} }
clientProxy.underlyingSpaceService = spaceServiceProxy clientProxy.underlyingSpaceService = spaceServiceProxy
@@ -454,7 +454,7 @@ extension HomeScreenViewModelAction: @retroactive Equatable {
case (.presentDeclineAndBlock(let lhsUserID, let lhsRoomID), .presentDeclineAndBlock(let rhsUserID, let rhsRoomID)): case (.presentDeclineAndBlock(let lhsUserID, let lhsRoomID), .presentDeclineAndBlock(let rhsUserID, let rhsRoomID)):
lhsUserID == rhsUserID && lhsRoomID == rhsRoomID lhsUserID == rhsUserID && lhsRoomID == rhsRoomID
case (.presentSpace(let lhsSpaceRoomListProxy), .presentSpace(let rhsSpaceRoomListProxy)): case (.presentSpace(let lhsSpaceRoomListProxy), .presentSpace(let rhsSpaceRoomListProxy)):
lhsSpaceRoomListProxy.spaceRoomProxy.id == rhsSpaceRoomListProxy.spaceRoomProxy.id lhsSpaceRoomListProxy.id == rhsSpaceRoomListProxy.id
case (.roomLeft(let lhsID), .roomLeft(let rhsID)): case (.roomLeft(let lhsID), .roomLeft(let rhsID)):
lhsID == rhsID lhsID == rhsID
case (.transferOwnership(let lhsID), .transferOwnership(let rhsID)): case (.transferOwnership(let lhsID), .transferOwnership(let rhsID)):
@@ -208,7 +208,7 @@ extension JoinRoomScreenViewModelAction: @retroactive Equatable {
case (.joined(.roomID(let lhsRoomID)), .joined(.roomID(let rhsRoomID))): case (.joined(.roomID(let lhsRoomID)), .joined(.roomID(let rhsRoomID))):
lhsRoomID == rhsRoomID lhsRoomID == rhsRoomID
case (.joined(.space(let lhsSpace)), .joined(.space(let rhsSpace))): case (.joined(.space(let lhsSpace)), .joined(.space(let rhsSpace))):
lhsSpace.spaceRoomProxy.id == rhsSpace.spaceRoomProxy.id lhsSpace.id == rhsSpace.id
case (.dismiss, .dismiss): case (.dismiss, .dismiss):
true true
case (.presentDeclineAndBlock(let lhsUserID), .presentDeclineAndBlock(let rhsUserID)): case (.presentDeclineAndBlock(let lhsUserID), .presentDeclineAndBlock(let rhsUserID)):
@@ -61,7 +61,7 @@ class SpaceListScreenViewModelTests: XCTestCase {
let action = try await deferred.fulfill() let action = try await deferred.fulfill()
switch action { switch action {
case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.spaceRoomProxy.id == selectedSpace.id: case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.id == selectedSpace.id:
break break
default: default:
XCTFail("The action should select the space.") XCTFail("The action should select the space.")
@@ -102,7 +102,7 @@ class SpaceListScreenViewModelTests: XCTestCase {
]) ])
spaceServiceProxy = SpaceServiceProxyMock(.init()) spaceServiceProxy = SpaceServiceProxyMock(.init())
spaceServiceProxy.joinedSpacesPublisher = joinedSpacesSubject.asCurrentValuePublisher() spaceServiceProxy.joinedSpacesPublisher = joinedSpacesSubject.asCurrentValuePublisher()
spaceServiceProxy.spaceRoomListSpaceIDParentClosure = { [joinedSpacesSubject] spaceID, _ in spaceServiceProxy.spaceRoomListSpaceIDClosure = { [joinedSpacesSubject] spaceID in
guard let spaceRoomProxy = joinedSpacesSubject?.value.first(where: { $0.id == spaceID }) else { return .failure(.missingSpace) } guard let spaceRoomProxy = joinedSpacesSubject?.value.first(where: { $0.id == spaceID }) else { return .failure(.missingSpace) }
return .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy))) return .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy)))
} }
@@ -100,7 +100,7 @@ class SpaceScreenViewModelTests: XCTestCase {
let action = try await deferred.fulfill() let action = try await deferred.fulfill()
switch action { switch action {
case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.spaceRoomProxy.id == selectedSpace.id: case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.id == selectedSpace.id:
break break
default: default:
XCTFail("The action should select the space.") XCTFail("The action should select the space.")
@@ -202,7 +202,7 @@ class SpaceScreenViewModelTests: XCTestCase {
XCTAssertNil(context.leaveHandle) XCTAssertNil(context.leaveHandle)
XCTAssertTrue(rustLeaveHandle.leaveRoomIdsCalled) XCTAssertTrue(rustLeaveHandle.leaveRoomIdsCalled)
XCTAssertEqual(rustLeaveHandle.leaveRoomIdsReceivedRoomIds, XCTAssertEqual(rustLeaveHandle.leaveRoomIdsReceivedRoomIds,
[firstSelectedRoom.spaceRoomProxy.id, spaceRoomListProxy.spaceRoomProxy.id], [firstSelectedRoom.spaceRoomProxy.id, spaceRoomListProxy.id],
"Confirming the leave should first leave the selected room and then the space.") "Confirming the leave should first leave the selected room and then the space.")
} }
@@ -214,7 +214,7 @@ class SpaceScreenViewModelTests: XCTestCase {
paginationResponses: paginationResponses)) paginationResponses: paginationResponses))
let spaceServiceProxy = SpaceServiceProxyMock(.init()) let spaceServiceProxy = SpaceServiceProxyMock(.init())
spaceServiceProxy.spaceRoomListSpaceIDParentClosure = { [mockSpaceRooms] spaceID, _ in spaceServiceProxy.spaceRoomListSpaceIDClosure = { [mockSpaceRooms] spaceID in
guard let spaceRoomProxy = mockSpaceRooms.first(where: { $0.id == spaceID }) else { return .failure(.missingSpace) } guard let spaceRoomProxy = mockSpaceRooms.first(where: { $0.id == spaceID }) else { return .failure(.missingSpace) }
return .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy))) return .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy)))
} }