LocalData/Tests/LocalDataTests/RouterDomainTests.swift
Matt Bruce 0afaf34c78 Tests AnyStorageKeyTests.swift, AuditTests.swift, LocalDataTests.swift (+13 more)
Summary:
- Tests: AnyStorageKeyTests.swift, AuditTests.swift, LocalDataTests.swift, MigrationAdditionalTests.swift, MigrationIntegrationTests.swift (+11 more)
- Added symbols: func makeStringKey, func makeUserDefaultsKey, func makeFileKey, func makeLegacyStringKey, func makeModernStringKey, func makePhoneOnlyKey (+14 more)
- Removed symbols: struct StringKey, typealias Value, struct TestKey, struct TestUserDefaultsKey, struct TestFileKey, struct LegacyStringKey (+19 more)

Stats:
- 16 files changed, 329 insertions(+), 386 deletions(-)
2026-01-18 14:53:30 -06:00

117 lines
4.5 KiB
Swift

import Foundation
import Testing
@testable import LocalData
@Suite struct RouterDomainTests {
private let router: StorageRouter
private let mockKeychain = MockKeychainHelper()
init() {
let testBaseURL = FileManager.default.temporaryDirectory.appending(path: "RouterDomainTests-\(UUID().uuidString)")
router = StorageRouter(
keychain: mockKeychain,
encryption: EncryptionHelper(keychain: mockKeychain),
file: FileStorageHelper(configuration: FileStorageConfiguration(baseURL: testBaseURL)),
defaults: UserDefaultsHelper(defaults: UserDefaults(suiteName: "RouterDomainTests-\(UUID().uuidString)")!)
)
}
private func makeDomainKey(
name: String,
domain: StorageDomain,
security: SecurityPolicy = .none
) -> StorageKey<String> {
StorageKey(
name: name,
domain: domain,
security: security,
owner: "DomainTests",
description: "Domain test key"
)
}
@Test func domainUserDefaults() async throws {
let key = makeDomainKey(name: "defaults.key", domain: .userDefaults(suite: nil))
try await router.set("value", for: key)
#expect(try await router.get(key) == "value")
try await router.remove(key)
#expect(await (try? router.exists(key)) == false)
}
@Test func domainAppGroupUserDefaults() async throws {
// We use a mock configuration to avoid requiring a real app group
await router.updateStorageConfiguration(StorageConfiguration(defaultAppGroupIdentifier: "group.test"))
let key = makeDomainKey(name: "appgroup.defaults.key", domain: .appGroupUserDefaults(identifier: "group.test"))
try await router.set("value", for: key)
#expect(try await router.get(key) == "value")
try await router.remove(key)
}
@Test func domainKeychain() async throws {
let key = makeDomainKey(
name: "keychain.key",
domain: .keychain(service: "test"),
security: .keychain(accessibility: .afterFirstUnlock, accessControl: .none)
)
try await router.set("value", for: key)
#expect(try await router.get(key) == "value")
try await router.remove(key)
}
@Test func domainFileSystem() async throws {
let key = makeDomainKey(name: "file.key", domain: .fileSystem(directory: .documents))
try await router.set("value", for: key)
#expect(try await router.get(key) == "value")
try await router.remove(key)
}
@Test func domainEncryptedFileSystem() async throws {
let key = makeDomainKey(name: "encfile.key", domain: .encryptedFileSystem(directory: .documents))
try await router.set("value", for: key)
#expect(try await router.get(key) == "value")
try await router.remove(key)
}
@Test func domainAppGroupFileSystem() async throws {
// App blocks usually fail or return nil in tests, but we exercise the path
await router.updateStorageConfiguration(StorageConfiguration(defaultAppGroupIdentifier: "group.test"))
let key = makeDomainKey(
name: "appgroup.file.key",
domain: .appGroupFileSystem(identifier: "group.test", directory: .documents)
)
do {
try await router.set("value", for: key)
#expect(try await router.get(key) == "value")
try await router.remove(key)
} catch StorageError.invalidAppGroupIdentifier {
// Path covered
}
}
@Test func resolutionFailureService() async throws {
// Clear default service
await router.updateStorageConfiguration(StorageConfiguration(defaultKeychainService: nil))
let key = makeDomainKey(
name: "bad.service.key",
domain: .keychain(service: nil),
security: .keychain(accessibility: .afterFirstUnlock, accessControl: .none)
)
await #expect(throws: StorageError.keychainError(errSecBadReq)) {
try await router.set("value", for: key)
}
}
@Test func resolutionFailureIdentifier() async throws {
// Clear default identifier
await router.updateStorageConfiguration(StorageConfiguration(defaultAppGroupIdentifier: nil))
let key = makeDomainKey(name: "bad.id.key", domain: .appGroupUserDefaults(identifier: nil))
await #expect(throws: StorageError.invalidAppGroupIdentifier("none")) {
try await router.set("value", for: key)
}
}
}