LocalData/Tests/LocalDataTests/LocalDataTests.swift
Matt Bruce 9415edf758 Update Helpers, Models + tests + config
Summary:
- Sources: Helpers, Models
- Tests: LocalDataTests.swift
- Config: Package
- Added symbols: enum StorageError
- Removed symbols: enum StorageError

Stats:
- 6 files changed, 35 insertions(+), 33 deletions(-)
2026-01-18 14:53:29 -06:00

86 lines
2.7 KiB
Swift

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<String> = .json
let owner: String = "LocalDataTests"
let description: String = "Test-only key for user defaults round-trip."
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 description: String = "Test-only key for file system round-trip."
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)
#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)
}
}
}