Summary: - Tests: update tests for AnyStorageKeyTests.swift, AuditTests.swift, LocalDataTests.swift (+13 more) Stats: - 16 files changed, 329 insertions(+), 386 deletions(-)
117 lines
4.5 KiB
Swift
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)
|
|
}
|
|
}
|
|
}
|