mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Swift Testing for Unit Tests PART 1 (#5119)
* migrated a lot of unit tests to Swift Testing and added a new implementation for deferred fulfillment more tests migration Cleaned the code manually to establish some good patterns more code improvements some more code improvements removed empty tests update project * more pr suggestions and cleanups * removed the TestSetup pattern * fixing claude not reusing tests * pr suggestion + added indent rule to swiftformat so that we can prevent AIs to change that
This commit is contained in:
@@ -8,48 +8,44 @@
|
||||
|
||||
import Combine
|
||||
@testable import ElementX
|
||||
import XCTest
|
||||
import Testing
|
||||
|
||||
@MainActor
|
||||
class GlobalSearchScreenViewModelTests: XCTestCase {
|
||||
@Suite
|
||||
struct GlobalSearchScreenViewModelTests {
|
||||
var viewModel: GlobalSearchScreenViewModelProtocol!
|
||||
var context: GlobalSearchScreenViewModelType.Context!
|
||||
var cancellables = Set<AnyCancellable>()
|
||||
|
||||
override func setUpWithError() throws {
|
||||
cancellables.removeAll()
|
||||
init() {
|
||||
viewModel = GlobalSearchScreenViewModel(roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
|
||||
mediaProvider: MediaProviderMock(configuration: .init()))
|
||||
context = viewModel.context
|
||||
}
|
||||
|
||||
func testSearching() async throws {
|
||||
let defered = deferFulfillment(context.$viewState) { state in
|
||||
|
||||
@Test
|
||||
mutating func searching() async throws {
|
||||
let deferred = deferFulfillment(context.$viewState) { state in
|
||||
state.rooms.count == 1
|
||||
}
|
||||
|
||||
context.searchQuery = "Second"
|
||||
|
||||
try await defered.fulfill()
|
||||
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
func testRoomSelection() {
|
||||
let expectation = expectation(description: "Wait for confirmation")
|
||||
|
||||
viewModel.actions
|
||||
.sink { action in
|
||||
switch action {
|
||||
case .select(let roomID):
|
||||
XCTAssertEqual(roomID, "2")
|
||||
expectation.fulfill()
|
||||
default:
|
||||
break
|
||||
}
|
||||
@Test
|
||||
func roomSelection() async throws {
|
||||
let deferred = deferFulfillment(viewModel.actions) { action in
|
||||
switch action {
|
||||
case .select(let roomID):
|
||||
return roomID == "2"
|
||||
default:
|
||||
return false
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
context.send(viewAction: .select(roomID: "2"))
|
||||
|
||||
waitForExpectations(timeout: 5.0)
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user