Summary: - Sources: Configuration, Helpers, Models, Services - Tests: AppGroupTests.swift, FileStorageHelperExpansionTests.swift, FileStorageHelperTests.swift, MigrationTests.swift, RouterConfigurationTests.swift (+5 more) - Added symbols: func resolveDirectoryURL, func handleReceivedContext, enum KeychainAccessControl, enum KeychainAccessibility, enum SecurityPolicy, enum EncryptionPolicy (+5 more) - Removed symbols: func resolveDirectoryURL, func handleReceivedContext, enum KeychainAccessControl, enum KeychainAccessibility, enum SecurityPolicy, enum EncryptionPolicy (+1 more) Stats: - 18 files changed, 306 insertions(+), 58 deletions(-)
57 lines
2.4 KiB
Swift
57 lines
2.4 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import LocalData
|
|
|
|
@Suite struct AppGroupTests {
|
|
private let userDefaultsHelper: UserDefaultsHelper
|
|
private let fileStorageHelper: FileStorageHelper
|
|
|
|
init() {
|
|
let suiteName = "AppGroupTests-\(UUID().uuidString)"
|
|
userDefaultsHelper = UserDefaultsHelper(defaults: UserDefaults(suiteName: suiteName)!)
|
|
|
|
let testBaseURL = FileManager.default.temporaryDirectory.appending(path: "AppGroupTests-\(UUID().uuidString)")
|
|
fileStorageHelper = FileStorageHelper(configuration: FileStorageConfiguration(baseURL: testBaseURL))
|
|
}
|
|
|
|
// Note: These tests might fail to find real containers in a unit test environment,
|
|
// but they will exercise the routing logic.
|
|
|
|
@Test func userDefaultsAppGroupRoundTrip() async throws {
|
|
let identifier = "group.com.test.localdata"
|
|
let key = "test.appgroup.key"
|
|
let data = Data("appgroup-value".utf8)
|
|
|
|
// This usually works in simulators even without real entitlements
|
|
try await userDefaultsHelper.set(data, forKey: key, appGroupIdentifier: identifier)
|
|
let retrieved = try await userDefaultsHelper.get(forKey: key, appGroupIdentifier: identifier)
|
|
#expect(retrieved == data)
|
|
|
|
let exists = try await userDefaultsHelper.exists(forKey: key, appGroupIdentifier: identifier)
|
|
#expect(exists == true)
|
|
|
|
let allKeys = try await userDefaultsHelper.allKeys(appGroupIdentifier: identifier)
|
|
#expect(allKeys.contains(key))
|
|
|
|
try await userDefaultsHelper.remove(forKey: key, appGroupIdentifier: identifier)
|
|
}
|
|
|
|
@Test func fileStorageAppGroupError() async throws {
|
|
let identifier = "invalid.group.id"
|
|
let data = Data("data".utf8)
|
|
|
|
// Simulators often return a URL even for invalid group IDs.
|
|
// On real devices/authorized environments, it returns nil if not matched.
|
|
if FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: identifier) == nil {
|
|
await #expect(throws: StorageError.invalidAppGroupIdentifier(identifier)) {
|
|
try await fileStorageHelper.write(
|
|
data,
|
|
to: .documents,
|
|
fileName: "test.txt",
|
|
appGroupIdentifier: identifier
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|