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:
Mauro
2026-02-19 16:20:47 +01:00
committed by GitHub
parent fc03e05697
commit 7982aef855
118 changed files with 4630 additions and 4129 deletions
@@ -7,50 +7,50 @@
//
@testable import ElementX
import XCTest
import Testing
@MainActor
class UserProfileScreenViewModelTests: XCTestCase {
var viewModel: UserProfileScreenViewModel!
var context: UserProfileScreenViewModelType.Context {
viewModel.context
}
func testInitialState() async throws {
@Suite
struct UserProfileScreenViewModelTests {
@Test
func initialState() async throws {
let profile = UserProfileProxy(userID: "@alice:matrix.org", displayName: "Alice", avatarURL: .mockMXCAvatar)
let clientProxy = ClientProxyMock(.init())
clientProxy.profileForReturnValue = .success(profile)
viewModel = UserProfileScreenViewModel(userID: profile.userID,
isPresentedModally: false,
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
userIndicatorController: ServiceLocator.shared.userIndicatorController,
analytics: ServiceLocator.shared.analytics)
let viewModel = UserProfileScreenViewModel(userID: profile.userID,
isPresentedModally: false,
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
userIndicatorController: ServiceLocator.shared.userIndicatorController,
analytics: ServiceLocator.shared.analytics)
let context = viewModel.context
let waitForMemberToLoad = deferFulfillment(context.observe(\.viewState.userProfile)) { $0 != nil }
try await waitForMemberToLoad.fulfill()
XCTAssertFalse(context.viewState.isOwnUser)
XCTAssertEqual(context.viewState.userProfile, profile)
XCTAssertNotNil(context.viewState.permalink)
#expect(!context.viewState.isOwnUser)
#expect(context.viewState.userProfile == profile)
#expect(context.viewState.permalink != nil)
}
func testInitialStateAccountOwner() async throws {
@Test
func initialStateAccountOwner() async throws {
let profile = UserProfileProxy(userID: RoomMemberProxyMock.mockMe.userID, displayName: "Me", avatarURL: .mockMXCAvatar)
let clientProxy = ClientProxyMock(.init())
clientProxy.profileForReturnValue = .success(profile)
viewModel = UserProfileScreenViewModel(userID: profile.userID,
isPresentedModally: false,
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
userIndicatorController: ServiceLocator.shared.userIndicatorController,
analytics: ServiceLocator.shared.analytics)
let viewModel = UserProfileScreenViewModel(userID: profile.userID,
isPresentedModally: false,
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
userIndicatorController: ServiceLocator.shared.userIndicatorController,
analytics: ServiceLocator.shared.analytics)
let context = viewModel.context
let waitForMemberToLoad = deferFulfillment(context.observe(\.viewState.userProfile)) { $0 != nil }
try await waitForMemberToLoad.fulfill()
XCTAssertTrue(context.viewState.isOwnUser)
XCTAssertEqual(context.viewState.userProfile, profile)
XCTAssertNotNil(context.viewState.permalink)
#expect(context.viewState.isOwnUser)
#expect(context.viewState.userProfile == profile)
#expect(context.viewState.permalink != nil)
}
}