LocalData/Documentation/Testing.md
Matt Bruce 50be09a906 Add tests for TestPlan.xctestplan and docs
Summary:
- Tests: add tests for TestPlan.xctestplan
- Docs: update docs for Testing

Stats:
- 2 files changed, 41 insertions(+)
2026-01-18 13:43:10 -06:00

2.1 KiB

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:

swift test

Xcode Test Plans

For granular control (enabling/disabling specific tests or trying different configurations), use Xcode Test Plans:

  1. Create a Test Plan:
    • Go to Product > Test Plan > New Test Plan...
    • Save it in your Tests/ directory as LocalData.xctestplan.
  2. Configure Tests:
    • Open the .xctestplan file.
    • You will see a list of all test targets, classes, and individual test methods.
    • Use the check/uncheck boxes to include or exclude specific tests.
  3. Run the Plan:
    • Hold down the Play button for the test action or go to Product > Test > [Plan Name].
    • You can also run it via terminal: xcodebuild test -plan LocalData.

Tip

Test plans are excellent for CI/CD environments where you might want to run a "Smoke Test" plan (subset of tests) or a "Full Integration" plan.