Files
PlantGuide/PlantGuideUITests/Helpers/XCUIApplication+Launch.swift
Trey t 1ae9c884c8 Rebuild UI test foundation with page objects, wait helpers, and screen objects
Replace brittle localized-string selectors and broken wait helpers with a
robust, identifier-first UI test infrastructure. All 41 UI tests pass on
iOS 26.2 simulator (iPhone 17).

Foundation:
- BaseUITestCase with deterministic launch helpers (launchClean, launchOffline)
- WaitHelpers (waitUntilHittable, waitUntilGone, tapWhenReady) replacing sleep()
- UITestID enum mirroring AccessibilityIdentifiers from the app target
- Screen objects: TabBarScreen, CameraScreen, CollectionScreen, TodayScreen,
  SettingsScreen, PlantDetailScreen

Key fixes:
- Tab navigation uses waitForExistence+tap instead of isHittable (unreliable
  in iOS 26 simulator)
- Tests handle real app state (empty collection, no camera permission)
- Increased timeouts for parallel clone execution
- Added NetworkMonitorProtocol and protocol-typed DI for testability
- Fixed actor-isolation issues in unit test mocks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 10:36:54 -06:00

28 lines
872 B
Swift

//
// XCUIApplication+Launch.swift
// PlantGuideUITests
//
// Launch configuration keys shared between BaseUITestCase and direct XCUIApplication usage.
//
import XCTest
// MARK: - Launch Configuration Keys
/// Keys for launch arguments and environment variables.
/// Consumed by the app's bootstrap code to set up test fixtures.
enum LaunchConfigKey {
// Launch arguments
static let uiTesting = "-UITesting"
static let cleanState = "-CleanState"
static let mockData = "-MockData"
static let offlineMode = "-OfflineMode"
static let skipOnboarding = "-SkipOnboarding"
// Environment variable keys
static let isUITesting = "IS_UI_TESTING"
static let useMockData = "USE_MOCK_DATA"
static let isOfflineMode = "IS_OFFLINE_MODE"
static let mockAPIResponseDelay = "MOCK_API_RESPONSE_DELAY"
}