mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user