Files
Reflect/Tests iOS
Trey T 2ef1c1ec51 Enable parallel UI test execution via per-session data isolation
Each test class now gets a unique session ID (UUID) passed to the app
via UI_TEST_SESSION_ID environment variable. The app uses this to:

- Route GroupUserDefaults to a session-specific UserDefaults suite,
  preventing tests from clobbering each other's AppStorage state
- Create an in-memory SwiftData container instead of the shared
  on-disk App Group store, eliminating SQLite contention

Refactored 8 test classes that bypassed BaseUITestCase.setUp() with
custom launch args — they now use overridable `localeArguments` and
`extraLaunchArguments` properties, keeping session ID injection
centralized. Added `relaunchApp(resetState:bypassSubscription:)` to
BaseUITestCase for tests that need mid-test relaunch with different
subscription state.

Includes a ParallelUITests.xctestplan with class-level parallelism
enabled and random execution ordering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 15:04:55 -05:00
..

Tests iOS README

Purpose

Tests iOS/ contains XCTest-based UI tests for the iOS app.

Start Here Before Adding Tests

  1. Read /Users/treyt/Desktop/code/Feels/docs/XCUITest-Authoring.md.
  2. Reuse BaseUITestCase and helpers in Helpers/.
  3. Reuse screen objects in Screens/ before writing inline query logic.

Required Pattern

  • Test class inherits BaseUITestCase.
  • Selectors use UITestID / accessibility identifiers first.
  • Waiting/tapping uses helper methods (tapWhenReady, waitForDisappearance, etc).
  • New app interactions get IDs in /Users/treyt/Desktop/code/Feels/Shared/AccessibilityIdentifiers.swift.

Anti-Patterns

  • sleep(...)
  • Selector logic based only on localized labels
  • Duplicating navigation logic instead of using Screens/*

Useful Paths

  • /Users/treyt/Desktop/code/Feels/Tests iOS/Helpers/BaseUITestCase.swift
  • /Users/treyt/Desktop/code/Feels/Tests iOS/Helpers/WaitHelpers.swift
  • /Users/treyt/Desktop/code/Feels/docs/templates/XCUITestSuiteTemplate.swift