Files
element-x-ios/UnitTests/Sources/SearchScreenViewModelTests.swift
Stefan Ceriu 02d9ed1f0e Address search PR review comments
- Drop the redundant searchService coordinator/view model parameter; derive it from the client proxy.
- Rename the globalSearch avatar size to search.
- Lift the query observation streams out of their tasks.
- Restore the appeared and updateVisibleRange comments.
- Use CompoundIcon defaults and a scaledFrame for media previews.
- Simplify the result mapping with compactMap(makeResult) and drop unsupported events by returning nil.
- Move the preview helpers beneath the previews.
2026-07-03 13:39:45 +03:00

72 lines
2.2 KiB
Swift

//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//
import Combine
@testable import ElementX
import Testing
@MainActor
struct SearchScreenViewModelTests {
let viewModel: SearchScreenViewModelProtocol
var context: SearchScreenViewModelType.Context {
viewModel.context
}
init() {
let searchService = SearchServiceProxyMock()
searchService.underlyingResultsPublisher = CurrentValueSubject<[SearchServiceResult], Never>([]).asCurrentValuePublisher()
searchService.underlyingPaginationStatePublisher = CurrentValueSubject(.idle(endReached: true)).asCurrentValuePublisher()
searchService.setQueryReturnValue = .success(())
let clientProxy = ClientProxyMock(.init())
clientProxy.searchService = searchService
viewModel = SearchScreenViewModel(roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
clientProxy: clientProxy,
mediaProvider: MediaProviderMock(.init()))
}
@Test
func searching() async throws {
let deferred = deferFulfillment(context.observe(\.viewState.rooms)) { $0.count == 1 }
context.searchQuery = "Second"
try await deferred.fulfill()
}
@Test
func roomSelection() async throws {
let deferred = deferFulfillment(viewModel.actionsPublisher) { action in
switch action {
case .presentRoom(let roomID, _):
roomID == "2"
case .cancel:
false
}
}
context.send(viewAction: .selectRoom(roomID: "2"))
try await deferred.fulfill()
}
@Test
func cancel() async throws {
let deferred = deferFulfillment(viewModel.actionsPublisher) { action in
switch action {
case .cancel:
true
default:
false
}
}
context.send(viewAction: .cancel)
try await deferred.fulfill()
}
}