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(-)
60 lines
2.1 KiB
Swift
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)
|
|
}
|
|
}
|