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
+34 -28
View File
@@ -7,12 +7,15 @@
//
@testable import ElementX
import XCTest
import Foundation
import Testing
class SessionDirectoriesTests: XCTestCase {
@Suite
struct SessionDirectoriesTests {
let fileManager = FileManager.default
func testInitWithDataDirectory() {
@Test
func initWithDataDirectory() {
// Given only a session directory without a caches directory.
let sessionDirectoryName = UUID().uuidString
let sessionDirectory = URL.applicationSupportBaseDirectory.appending(component: sessionDirectoryName)
@@ -21,11 +24,12 @@ class SessionDirectoriesTests: XCTestCase {
let sessionDirectories = SessionDirectories(dataDirectory: sessionDirectory)
// Then the data directory should remain unchanged and the caches directory should be generated.
XCTAssertEqual(sessionDirectories.dataDirectory, sessionDirectory)
XCTAssertEqual(sessionDirectories.cacheDirectory, .sessionCachesBaseDirectory.appending(component: sessionDirectoryName))
#expect(sessionDirectories.dataDirectory == sessionDirectory)
#expect(sessionDirectories.cacheDirectory == .sessionCachesBaseDirectory.appending(component: sessionDirectoryName))
}
func testPathOutput() {
@Test
func pathOutput() {
// Given session directories created from paths with spaces in them.
let originalDataPath = "/Users/John Smith/Data"
let originalCachePath = "/Users/John Smith/Caches"
@@ -38,53 +42,55 @@ class SessionDirectoriesTests: XCTestCase {
let returnedCachePath = sessionDirectories.cachePath
// Then the paths should not be escaped.
XCTAssertEqual(returnedDataPath, originalDataPath)
XCTAssertEqual(returnedCachePath, originalCachePath)
#expect(returnedDataPath == originalDataPath)
#expect(returnedCachePath == originalCachePath)
}
func testDeleteDirectories() throws {
@Test
func deleteDirectories() throws {
// Given a new set of session directories.
let sessionDirectories = SessionDirectories()
try fileManager.createDirectory(at: sessionDirectories.dataDirectory, withIntermediateDirectories: true)
try fileManager.createDirectory(at: sessionDirectories.cacheDirectory, withIntermediateDirectories: true)
XCTAssertTrue(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
XCTAssertTrue(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
#expect(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
#expect(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
// When deleting the directories.
sessionDirectories.delete()
// Then neither directory should exist on disk.
XCTAssertFalse(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
XCTAssertFalse(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
#expect(!fileManager.directoryExists(at: sessionDirectories.dataDirectory))
#expect(!fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
}
func testDeleteTransientUserData() throws {
@Test
func deleteTransientUserData() throws {
// Given a set of session directories with some databases.
let sessionDirectories = SessionDirectories()
try fileManager.createDirectory(at: sessionDirectories.dataDirectory, withIntermediateDirectories: true)
try fileManager.createDirectory(at: sessionDirectories.cacheDirectory, withIntermediateDirectories: true)
XCTAssertTrue(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
XCTAssertTrue(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
#expect(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
#expect(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
sessionDirectories.generateMockData()
XCTAssertTrue(fileManager.fileExists(atPath: sessionDirectories.mockStateStorePath))
XCTAssertTrue(fileManager.fileExists(atPath: sessionDirectories.mockCryptoStorePath))
XCTAssertTrue(fileManager.fileExists(atPath: sessionDirectories.mockEventCachePath))
XCTAssertEqual(try fileManager.numberOfItems(at: sessionDirectories.dataDirectory), 6)
XCTAssertEqual(try fileManager.numberOfItems(at: sessionDirectories.cacheDirectory), 3)
#expect(fileManager.fileExists(atPath: sessionDirectories.mockStateStorePath))
#expect(fileManager.fileExists(atPath: sessionDirectories.mockCryptoStorePath))
#expect(fileManager.fileExists(atPath: sessionDirectories.mockEventCachePath))
#expect(try fileManager.numberOfItems(at: sessionDirectories.dataDirectory) == 6)
#expect(try fileManager.numberOfItems(at: sessionDirectories.cacheDirectory) == 3)
// When deleting transient user data.
sessionDirectories.deleteTransientUserData()
// Then the data directory should only contain the crypto store and the cache directory should remain but be empty.
XCTAssertTrue(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
XCTAssertEqual(try fileManager.numberOfItems(at: sessionDirectories.dataDirectory), 3)
XCTAssertFalse(fileManager.fileExists(atPath: sessionDirectories.mockStateStorePath))
XCTAssertTrue(fileManager.fileExists(atPath: sessionDirectories.mockCryptoStorePath))
#expect(fileManager.directoryExists(at: sessionDirectories.dataDirectory))
#expect(try fileManager.numberOfItems(at: sessionDirectories.dataDirectory) == 3)
#expect(!fileManager.fileExists(atPath: sessionDirectories.mockStateStorePath))
#expect(fileManager.fileExists(atPath: sessionDirectories.mockCryptoStorePath))
XCTAssertTrue(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
XCTAssertEqual(try fileManager.numberOfItems(at: sessionDirectories.cacheDirectory), 0)
XCTAssertFalse(fileManager.fileExists(atPath: sessionDirectories.mockEventCachePath))
#expect(fileManager.directoryExists(at: sessionDirectories.cacheDirectory))
#expect(try fileManager.numberOfItems(at: sessionDirectories.cacheDirectory) == 0)
#expect(!fileManager.fileExists(atPath: sessionDirectories.mockEventCachePath))
// The tests are done, tidy up these useless directories 🧹
sessionDirectories.delete()