import Foundation import Testing @testable import LocalData private struct TestUserDefaultsKey: StorageKey { typealias Value = String let name: String let domain: StorageDomain let security: SecurityPolicy = .none let serializer: Serializer = .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 = .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)) } } struct LocalDataTests { @Test func userDefaultsRoundTrip() async throws { let suiteName = "LocalDataTests.\(UUID().uuidString)" defer { if let defaults = UserDefaults(suiteName: suiteName) { defaults.removePersistentDomain(forName: suiteName) } } 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) #expect(fetched == storedValue) try await StorageRouter.shared.remove(key) await #expect(throws: StorageError.notFound) { _ = try await StorageRouter.shared.get(key) } } @Test func fileSystemRoundTrip() async throws { let tempDirectory = FileManager.default.temporaryDirectory .appending(path: "LocalDataTests") .appending(path: UUID().uuidString) defer { try? FileManager.default.removeItem(at: tempDirectory) } 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) #expect(fetched == storedValue) try await StorageRouter.shared.remove(key) await #expect(throws: StorageError.notFound) { _ = try await StorageRouter.shared.get(key) } } }