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 c92e847ed7
commit 173b39a07f
118 changed files with 4630 additions and 4129 deletions

View File

@@ -8,11 +8,14 @@
import Combine
@testable import ElementX
import XCTest
import Foundation
import Testing
@MainActor
class PillContextTests: XCTestCase {
func testUser() async {
@Suite
struct PillContextTests {
@Test
func user() async {
let id = "@test:matrix.org"
let proxyMock = JoinedRoomProxyMock(.init(name: "Test"))
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
@@ -30,19 +33,20 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertEqual(context.viewState.displayText, id)
#expect(!context.viewState.isOwnMention)
#expect(context.viewState.displayText == id)
let name = "Mr. Test"
let avatarURL = URL(string: "https://test.jpg")
subject.send([RoomMemberProxyMock(with: .init(userID: id, displayName: name, avatarURL: avatarURL, membership: .join))])
await Task.yield()
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertEqual(context.viewState.displayText, "@\(name)")
#expect(!context.viewState.isOwnMention)
#expect(context.viewState.displayText == "@\(name)")
}
func testOwnUser() {
@Test
func ownUser() {
let id = "@test:matrix.org"
let proxyMock = JoinedRoomProxyMock(.init(name: "Test", ownUserID: id))
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
@@ -60,10 +64,11 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body)))
XCTAssertTrue(context.viewState.isOwnMention)
#expect(context.viewState.isOwnMention)
}
func testAllUsers() {
@Test
func allUsers() {
let avatarURL = URL(string: "https://matrix.jpg")
let id = "test_room"
let displayName = "Test"
@@ -83,11 +88,12 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .allUsers, font: .preferredFont(forTextStyle: .body)))
XCTAssertTrue(context.viewState.isOwnMention)
XCTAssertEqual(context.viewState.displayText, PillUtilities.atRoom)
#expect(context.viewState.isOwnMention)
#expect(context.viewState.displayText == PillUtilities.atRoom)
}
func testRoomIDMention() {
@Test
func roomIDMention() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
let clientMock = ClientProxyMock(.init())
@@ -106,12 +112,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomID("1"), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "#Foundation 🔭🪐🌌")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "#Foundation 🔭🪐🌌")
}
func testRoomIDMentionMissingRoom() {
@Test
func roomIDMentionMissingRoom() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -128,12 +135,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomID("1"), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "1")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "1")
}
func testRoomAliasMention() {
@Test
func roomAliasMention() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -154,12 +162,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomAlias("#foundation-and-empire:matrix.org"), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "#Foundation and Empire")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "#Foundation and Empire")
}
func testRoomAliasMentionMissingRoom() {
@Test
func roomAliasMentionMissingRoom() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -176,12 +185,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomAlias("#foundation-and-empire:matrix.org"), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "#foundation-and-empire:matrix.org")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "#foundation-and-empire:matrix.org")
}
func testEventOnRoomIDMention() {
@Test
func eventOnRoomIDMention() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -200,12 +210,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomID("1")), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "💬 > #Foundation 🔭🪐🌌")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "💬 > #Foundation 🔭🪐🌌")
}
func testEventOnRoomIDMentionMissingRoom() {
@Test
func eventOnRoomIDMentionMissingRoom() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -222,12 +233,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomID("1")), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "💬 > 1")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "💬 > 1")
}
func testEventOnRoomAliasMention() {
@Test
func eventOnRoomAliasMention() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -248,12 +260,13 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomAlias("#foundation-and-empire:matrix.org")), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "💬 > #Foundation and Empire")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "💬 > #Foundation and Empire")
}
func testEventOnRoomAliasMentionMissingRoom() {
@Test
func eventOnRoomAliasMentionMissingRoom() {
let proxyMock = JoinedRoomProxyMock(.init())
let mockController = MockTimelineController()
mockController.roomProxy = proxyMock
@@ -270,8 +283,8 @@ class PillContextTests: XCTestCase {
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomAlias("#foundation-and-empire:matrix.org")), font: .preferredFont(forTextStyle: .body)))
XCTAssertFalse(context.viewState.isOwnMention)
XCTAssertFalse(context.viewState.isUndefined)
XCTAssertEqual(context.viewState.displayText, "💬 > #foundation-and-empire:matrix.org")
#expect(!context.viewState.isOwnMention)
#expect(!context.viewState.isUndefined)
#expect(context.viewState.displayText == "💬 > #foundation-and-empire:matrix.org")
}
}