LocalData/Tests/LocalDataTests/SyncIntegrationTests.swift
Matt Bruce 8e3e754e43 Tests: update tests for AnyStorageKeyTests.swift, AuditTests.swift, LocalDataTests.swift (+13 more)
Summary:
- Tests: update tests for AnyStorageKeyTests.swift, AuditTests.swift, LocalDataTests.swift (+13 more)

Stats:
- 16 files changed, 329 insertions(+), 386 deletions(-)
2026-01-18 13:43:11 -06:00

60 lines
2.1 KiB
Swift

import Foundation
import Testing
@testable import LocalData
@Suite(.serialized)
struct SyncIntegrationTests {
private let router: StorageRouter
init() {
let testBaseURL = FileManager.default.temporaryDirectory.appending(path: "SyncIntegrationTests-\(UUID().uuidString)")
router = StorageRouter(
keychain: MockKeychainHelper(),
encryption: EncryptionHelper(keychain: MockKeychainHelper()),
file: FileStorageHelper(configuration: FileStorageConfiguration(baseURL: testBaseURL)),
defaults: UserDefaultsHelper(defaults: UserDefaults(suiteName: "SyncIntegrationTests-\(UUID().uuidString)")!)
)
}
private static func makeSyncKey(name: String) -> StorageKey<String> {
StorageKey(
name: name,
domain: .userDefaults(suite: nil),
security: .none,
owner: "SyncTests",
description: "Sync key",
syncPolicy: .automaticSmall
)
}
private struct SyncCatalog: StorageKeyCatalog {
var allKeys: [AnyStorageKey] {
[.key(SyncIntegrationTests.makeSyncKey(name: "sync.test.key"))]
}
}
@Test func updateFromSyncStoresDataLocally() async throws {
// 1. Register catalog so router knows about the key
try await router.registerCatalog(SyncCatalog())
let keyName = "sync.test.key"
let expectedValue = "Updated from Watch"
let data = try JSONEncoder().encode(expectedValue)
// 2. Simulate incoming sync
try await router.updateFromSync(keyName: keyName, data: data)
// 3. Verify it was stored in the local domain
let retrieved: String? = try await router.get(Self.makeSyncKey(name: keyName))
#expect(retrieved == expectedValue)
}
@Test func updateFromSyncIgnoresUnregisteredKeys() async throws {
let keyName = "unregistered.sync.key"
let data = Data("some data".utf8)
// This should not throw, just log/ignore
try await router.updateFromSync(keyName: keyName, data: data)
}
}