import Foundation import Testing @testable import LocalData private func makeUserDefaultsKey(name: String, suiteName: String) -> StorageKey { StorageKey( name: name, domain: .userDefaults(suite: suiteName), security: .none, owner: "LocalDataTests", description: "Test-only key for user defaults round-trip." ) } private func makeFileKey(name: String, directory: URL) -> StorageKey { StorageKey( name: name, domain: .fileSystem(directory: .custom(directory)), security: .none, owner: "LocalDataTests", description: "Test-only key for file system round-trip." ) } @Suite(.serialized) struct LocalDataTests { private let router = StorageRouter(keychain: MockKeychainHelper()) @Test func userDefaultsRoundTrip() async throws { let suiteName = "LocalDataTests.\(UUID().uuidString)" defer { if let defaults = UserDefaults(suiteName: suiteName) { defaults.removePersistentDomain(forName: suiteName) } } let key = makeUserDefaultsKey(name: "test.string", suiteName: suiteName) let storedValue = "1.0.0" try await router.set(storedValue, for: key) let fetched = try await router.get(key) #expect(fetched == storedValue) try await router.remove(key) await #expect(throws: StorageError.notFound) { _ = try await router.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 = makeFileKey(name: "test.json", directory: tempDirectory) let storedValue = "payload" try await router.set(storedValue, for: key) let fetched = try await router.get(key) #expect(fetched == storedValue) try await router.remove(key) await #expect(throws: StorageError.notFound) { _ = try await router.get(key) } } }