# LocalData Testing Strategy ## Goal To ensure high reliability for data persistence, security, and migration across all supported platforms (iOS and watchOS). ## Test Suites ### Unit Tests (`Tests/LocalDataTests/`) - **LocalDataTests.swift**: Core round-trip tests for each storage domain (UserDefaults, FileSystem). - **KeychainHelperTests.swift**: Verification of Keychain API interactions (add, update, delete, exists). - **EncryptionHelperTests.swift**: Round-trip tests for AES and ChaCha20 encryption/decryption with various key derivation methods. - **StorageCatalogTests.swift**: Validation of catalog registration, duplicate detection, and missing description checks. ## Key Testing Patterns ### 1. Domain Round-Trips Always test the full cycle: `set` -> `get` (compare) -> `remove` -> `get` (expect `notFound`). ### 2. Migration Tests Simulate legacy data by writing to a "legacy" key first, then verifying that the "modern" key can retrieve and consolidate that data. ### 3. Error Handling Verify that the correct `StorageError` is thrown for: - `notFound` - `unregisteredKey` - `dataTooLargeForSync` - Domain-specific failures (e.g., Keychain errors) ## Running Tests Run all tests from the package root: ```bash swift test ```