2023-03-14 10:50:09 +01:00
|
|
|
//
|
2024-09-06 16:34:30 +03:00
|
|
|
// Copyright 2022-2024 New Vector Ltd.
|
2023-03-14 10:50:09 +01:00
|
|
|
//
|
2025-01-06 11:27:37 +01:00
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
|
|
// Please see LICENSE files in the repository root for full details.
|
2023-03-14 10:50:09 +01:00
|
|
|
//
|
|
|
|
|
|
|
|
import XCTest
|
|
|
|
|
|
|
|
@testable import ElementX
|
|
|
|
|
|
|
|
@MainActor
|
|
|
|
class StartChatScreenViewModelTests: XCTestCase {
|
2023-04-25 12:13:03 +03:00
|
|
|
var viewModel: StartChatScreenViewModelProtocol!
|
2024-02-27 16:22:47 +02:00
|
|
|
var clientProxy: ClientProxyMock!
|
2023-04-21 10:11:15 +02:00
|
|
|
var userDiscoveryService: UserDiscoveryServiceMock!
|
2023-03-14 10:50:09 +01:00
|
|
|
|
2023-04-25 12:13:03 +03:00
|
|
|
var context: StartChatScreenViewModel.Context {
|
2023-03-29 14:29:25 +02:00
|
|
|
viewModel.context
|
|
|
|
}
|
|
|
|
|
|
|
|
override func setUpWithError() throws {
|
2024-02-27 16:22:47 +02:00
|
|
|
clientProxy = .init(.init(userID: ""))
|
2023-04-21 10:11:15 +02:00
|
|
|
userDiscoveryService = UserDiscoveryServiceMock()
|
|
|
|
userDiscoveryService.searchProfilesWithReturnValue = .success([])
|
2024-05-27 14:44:15 +03:00
|
|
|
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
2023-06-23 09:56:22 +03:00
|
|
|
viewModel = StartChatScreenViewModel(userSession: userSession,
|
|
|
|
analytics: ServiceLocator.shared.analytics,
|
2023-11-09 15:10:50 +02:00
|
|
|
userIndicatorController: UserIndicatorControllerMock(),
|
2023-06-23 09:56:22 +03:00
|
|
|
userDiscoveryService: userDiscoveryService)
|
2023-03-29 14:29:25 +02:00
|
|
|
}
|
|
|
|
|
2023-04-04 10:47:41 +02:00
|
|
|
func testQueryShowingNoResults() async throws {
|
|
|
|
await search(query: "A")
|
2023-04-21 10:11:15 +02:00
|
|
|
XCTAssertEqual(context.viewState.usersSection.type, .suggestions)
|
2023-03-29 14:29:25 +02:00
|
|
|
|
2023-04-04 10:47:41 +02:00
|
|
|
await search(query: "AA")
|
2023-04-21 10:11:15 +02:00
|
|
|
XCTAssertEqual(context.viewState.usersSection.type, .suggestions)
|
|
|
|
XCTAssertFalse(userDiscoveryService.searchProfilesWithCalled)
|
2023-03-29 14:29:25 +02:00
|
|
|
|
2023-04-04 10:47:41 +02:00
|
|
|
await search(query: "AAA")
|
|
|
|
assertSearchResults(toBe: 0)
|
|
|
|
|
2023-04-21 10:11:15 +02:00
|
|
|
XCTAssertTrue(userDiscoveryService.searchProfilesWithCalled)
|
2023-04-04 10:47:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - Private
|
|
|
|
|
|
|
|
private func assertSearchResults(toBe count: Int) {
|
|
|
|
XCTAssertTrue(count >= 0)
|
2023-03-29 14:29:25 +02:00
|
|
|
XCTAssertEqual(context.viewState.usersSection.type, .searchResult)
|
2023-04-04 10:47:41 +02:00
|
|
|
XCTAssertEqual(context.viewState.usersSection.users.count, count)
|
|
|
|
XCTAssertEqual(context.viewState.hasEmptySearchResults, count == 0)
|
|
|
|
}
|
|
|
|
|
|
|
|
@discardableResult
|
2023-04-25 12:13:03 +03:00
|
|
|
private func search(query: String) async -> StartChatScreenViewState? {
|
2023-04-04 10:47:41 +02:00
|
|
|
viewModel.context.searchQuery = query
|
|
|
|
return await context.$viewState.nextValue
|
|
|
|
}
|
2023-03-14 10:50:09 +01:00
|
|
|
}
|