Add unit test for the in-timeline space permalink handling

This commit is contained in:
Stefan Ceriu
2025-10-08 11:26:36 +03:00
committed by Stefan Ceriu
parent 182b48b42b
commit 334746edb3
3 changed files with 21 additions and 6 deletions

View File

@@ -14,7 +14,7 @@ struct ClientProxyMockConfiguration {
var userID: String = RoomMemberProxyMock.mockMe.userID
var deviceID: String?
var roomSummaryProvider: RoomSummaryProviderProtocol = RoomSummaryProviderMock(.init())
var joinedSpaceRooms: [SpaceRoomProxyProtocol] = []
var spaceServiceConfiguration: SpaceServiceProxyMock.Configuration = .init()
var roomPreviews: [RoomPreviewProxyProtocol]?
var roomDirectorySearchProxy: RoomDirectorySearchProxyProtocol?
@@ -92,15 +92,15 @@ extension ClientProxyMock {
secureBackupController = SecureBackupControllerMock(.init(recoveryState: configuration.recoveryState))
resetIdentityReturnValue = .success(IdentityResetHandleSDKMock(.init()))
spaceService = SpaceServiceProxyMock(.init())
spaceService = SpaceServiceProxyMock(configuration.spaceServiceConfiguration)
roomForIdentifierClosure = { [weak self] identifier in
if let room = self?.roomSummaryProvider.roomListPublisher.value.first(where: { $0.id == identifier }) {
let roomProxy = await JoinedRoomProxyMock(.init(id: room.id, name: room.name))
roomProxy.loadOrFetchEventDetailsForReturnValue = .success(TimelineEventSDKMock())
return .joined(roomProxy)
} else if let spaceRoomProxy = configuration.joinedSpaceRooms.first(where: { $0.id == identifier }) {
let roomProxy = await JoinedRoomProxyMock(.init(id: spaceRoomProxy.id, name: spaceRoomProxy.name))
} else if let spaceRoomProxy = configuration.spaceServiceConfiguration.joinedSpaces.first(where: { $0.id == identifier }) {
let roomProxy = await JoinedRoomProxyMock(.init(id: spaceRoomProxy.id, name: spaceRoomProxy.name, isSpace: spaceRoomProxy.isSpace))
roomProxy.loadOrFetchEventDetailsForReturnValue = .success(TimelineEventSDKMock())
return .joined(roomProxy)
} else {

View File

@@ -589,7 +589,7 @@ class MockScreen: Identifiable {
let clientProxy = ClientProxyMock(.init(userID: "@mock:client.com",
deviceID: "MOCKCLIENT",
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
joinedSpaceRooms: .mockSingleRoom,
spaceServiceConfiguration: .init(joinedSpaces: .mockSingleRoom),
roomPreviews: [SpaceRoomProxyProtocol].mockSpaceList.map(RoomPreviewProxyMock.init)))
// The tab bar remains hidden for the non-spaces tests as we don't supply any mock spaces.

View File

@@ -378,6 +378,19 @@ class RoomFlowCoordinatorTests: XCTestCase {
try await fulfillment.fulfill()
}
// MARK: - Spaces
func testSpacePermalink() async throws {
setupRoomFlowCoordinator()
try await process(route: .room(roomID: "1", via: []))
XCTAssert(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
try await process(route: .childRoom(roomID: "space1", via: []))
XCTAssert(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
XCTAssert(navigationStackCoordinator.stackCoordinators.first is SpaceScreenCoordinator)
}
// MARK: - Private
private func process(route: AppRoute) async throws {
@@ -420,7 +433,9 @@ class RoomFlowCoordinatorTests: XCTestCase {
private func setupRoomFlowCoordinator(asChildFlow: Bool = false, roomType: RoomType? = nil) {
cancellables.removeAll()
clientProxy = ClientProxyMock(.init(userID: "hi@bob", roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))
clientProxy = ClientProxyMock(.init(userID: "hi@bob",
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
spaceServiceConfiguration: .populated))
timelineControllerFactory = TimelineControllerFactoryMock(.init())
clientProxy.roomPreviewForIdentifierViaClosure = { [roomType] roomID, _ in