diff --git a/ElementX/Sources/Screens/SearchScreen/SearchScreenViewModel.swift b/ElementX/Sources/Screens/SearchScreen/SearchScreenViewModel.swift index e6c9852d4..2da0fe720 100644 --- a/ElementX/Sources/Screens/SearchScreen/SearchScreenViewModel.swift +++ b/ElementX/Sources/Screens/SearchScreen/SearchScreenViewModel.swift @@ -183,7 +183,7 @@ class SearchScreenViewModel: SearchScreenViewModelType, SearchScreenViewModelPro switch mode { case .rooms: searchedQueries[mode] = searchQuery - roomSummaryProvider.setFilter(.search(query: searchQuery)) + roomSummaryProvider.setFilter(.search(query: searchQuery, joinedOnly: true)) case .messages: setQueryTask = Task { [weak self] in // Debounce message queries; superseded keystrokes cancel this before it commits. diff --git a/UnitTests/Sources/SearchScreenViewModelTests.swift b/UnitTests/Sources/SearchScreenViewModelTests.swift index 4bee0469f..3b288d7cf 100644 --- a/UnitTests/Sources/SearchScreenViewModelTests.swift +++ b/UnitTests/Sources/SearchScreenViewModelTests.swift @@ -68,6 +68,25 @@ struct SearchScreenViewModelTests { #expect(!searchService.setQueryCalled) } + @Test + func searchingExcludesRoomsThatAreNotJoined() async throws { + let roomSummaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms + .mockInvites))) + let clientProxy = ClientProxyMock(.init()) + clientProxy.searchService = searchService + let viewModel = SearchScreenViewModel(roomSummaryProvider: roomSummaryProvider, + clientProxy: clientProxy, + mediaProvider: MediaProviderMock(.init()), + userIndicatorController: userIndicatorController, + appSettings: appSettings) + + let deferred = deferFulfillment(viewModel.context.observe(\.viewState.rooms)) { !$0.isEmpty } + viewModel.context.searchQuery = "room" + try await deferred.fulfill() + + #expect(roomSummaryProvider.setFilterReceivedFilter == .search(query: "room", joinedOnly: true)) + #expect(!viewModel.context.viewState.rooms.contains { $0.title == "First room" }) + } + @Test func messageSearch() async throws { let deferred = deferFulfillment(setQuerySubject) { $0 == "Foundation" }