51 lines
1.7 KiB
Swift
51 lines
1.7 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import LocalData
|
|
|
|
@Suite(.serialized)
|
|
struct SyncIntegrationTests {
|
|
private let router = StorageRouter(keychain: MockKeychainHelper())
|
|
|
|
private struct SyncKey: StorageKey {
|
|
typealias Value = String
|
|
let name: String
|
|
let domain: StorageDomain = .userDefaults(suite: nil)
|
|
let security: SecurityPolicy = .none
|
|
let serializer: Serializer<String> = .json
|
|
let owner: String = "SyncTests"
|
|
let description: String = "Sync key"
|
|
let availability: PlatformAvailability = .all
|
|
let syncPolicy: SyncPolicy = .automaticSmall
|
|
}
|
|
|
|
private struct SyncCatalog: StorageKeyCatalog {
|
|
static var allKeys: [AnyStorageKey] {
|
|
[.key(SyncKey(name: "sync.test.key"))]
|
|
}
|
|
}
|
|
|
|
@Test func updateFromSyncStoresDataLocally() async throws {
|
|
// 1. Register catalog so router knows about the key
|
|
try await router.registerCatalog(SyncCatalog.self)
|
|
|
|
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(SyncKey(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)
|
|
}
|
|
}
|