LocalData/Tests/LocalDataTests/LocalDataTests.swift
2026-01-13 21:13:17 -06:00

102 lines
3.0 KiB
Swift

import Foundation
import XCTest
@testable import LocalData
private struct TestUserDefaultsKey: StorageKey {
typealias Value = String
let name: String
let domain: StorageDomain
let security: SecurityPolicy = .none
let serializer: Serializer<String> = .json
let owner: String = "LocalDataTests"
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .never
init(name: String, suiteName: String) {
self.name = name
self.domain = .userDefaults(suite: suiteName)
}
}
private struct TestFileKey: StorageKey {
typealias Value = String
let name: String
let domain: StorageDomain
let security: SecurityPolicy = .none
let serializer: Serializer<String> = .json
let owner: String = "LocalDataTests"
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .never
init(name: String, directory: URL) {
self.name = name
self.domain = .fileSystem(directory: .custom(directory))
}
}
final class LocalDataTests: XCTestCase {
private var suiteName: String = ""
private var tempDirectory: URL = .temporaryDirectory
override func setUp() {
super.setUp()
suiteName = "LocalDataTests.\(UUID().uuidString)"
tempDirectory = FileManager.default.temporaryDirectory
.appending(path: "LocalDataTests")
.appending(path: UUID().uuidString)
}
override func tearDown() {
if let defaults = UserDefaults(suiteName: suiteName) {
defaults.removePersistentDomain(forName: suiteName)
}
try? FileManager.default.removeItem(at: tempDirectory)
super.tearDown()
}
func testUserDefaultsRoundTrip() async throws {
let key = TestUserDefaultsKey(name: "test.string", suiteName: suiteName)
let storedValue = "1.0.0"
try await StorageRouter.shared.set(storedValue, for: key)
let fetched = try await StorageRouter.shared.get(key)
XCTAssertEqual(fetched, storedValue)
try await StorageRouter.shared.remove(key)
do {
_ = try await StorageRouter.shared.get(key)
XCTFail("Expected notFound error after removal")
} catch StorageError.notFound {
return
} catch {
XCTFail("Unexpected error: \(error)")
}
}
func testFileSystemRoundTrip() async throws {
let key = TestFileKey(name: "test.json", directory: tempDirectory)
let storedValue = "payload"
try await StorageRouter.shared.set(storedValue, for: key)
let fetched = try await StorageRouter.shared.get(key)
XCTAssertEqual(fetched, storedValue)
try await StorageRouter.shared.remove(key)
do {
_ = try await StorageRouter.shared.get(key)
XCTFail("Expected notFound error after removal")
} catch StorageError.notFound {
return
} catch {
XCTFail("Unexpected error: \(error)")
}
}
}