Files
letro-ios/UnitTests/Sources/StartChatViewModelTests.swift
Alfonso Grillo 8aca9ba85b Add user search for dm chats (#739)
* Add searchUsers in ClientProxy

* Add UserSearchProtocol

* Delete UserSearch file

* Add search

* Refine StartChatScreen

* Improve StartChatViewModel

* Add localizations

* Fix no result style

* Update localizations

* Add UTs

* Add UI tests

* Cleanup

* Refine tests

* Add changelog.d file

* Naming refactor

* Refactor ClientProxyProtocol api

* Fix typo

* Add mark

* Rename tests

* Update Dangerfile

* Improve UI test code

* Refactor search api

* Improve style

* Improve combine chain

* Add comment

* Improve StartChatScreen

* Improve updateState

* Add extension Published.Publisher

* Improve UI tests

* Remove Combine import

* Cleanup

* Remove “proxy” wording

* Delete extra extensions

* Refactor Publisher api
2023-03-29 14:29:25 +02:00

59 lines
2.1 KiB
Swift

//
// Copyright 2022 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import XCTest
@testable import ElementX
@MainActor
class StartChatScreenViewModelTests: XCTestCase {
var viewModel: StartChatViewModelProtocol!
var clientProxy: MockClientProxy!
var context: StartChatViewModel.Context {
viewModel.context
}
override func setUpWithError() throws {
clientProxy = .init(userID: "")
let userSession = MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())
viewModel = StartChatViewModel(userSession: userSession, userIndicatorController: nil)
}
func test_queryShowingNoResults() async throws {
viewModel.context.searchQuery = "A"
XCTAssertEqual(context.viewState.usersSection.type, .suggestions)
viewModel.context.searchQuery = "AA"
XCTAssertEqual(context.viewState.usersSection.type, .suggestions)
viewModel.context.searchQuery = "AAA"
_ = await context.$viewState.nextValue
XCTAssertEqual(context.viewState.usersSection.type, .searchResult)
XCTAssert(context.viewState.hasEmptySearchResults)
}
func test_queryShowingResults() async throws {
clientProxy.searchUsersResult = .success(.init(results: [UserProfile.mockAlice], limited: true))
viewModel.context.searchQuery = "AAA"
_ = await context.$viewState.nextValue
XCTAssertEqual(context.viewState.usersSection.type, .searchResult)
XCTAssertEqual(context.viewState.usersSection.users.count, 1)
XCTAssertFalse(context.viewState.hasEmptySearchResults)
}
}