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>
This commit is contained in:
@@ -36,6 +36,15 @@ enum SharedModelContainer {
|
||||
/// - Returns: Configured ModelContainer
|
||||
/// - Throws: SharedModelContainerError if creation fails
|
||||
static func create(useCloudKit: Bool = true) throws -> ModelContainer {
|
||||
// When UI testing, use in-memory storage for parallel test isolation.
|
||||
// Each test process gets its own empty container — no shared on-disk state.
|
||||
// Check ProcessInfo directly to avoid depending on UITestMode (not in widget targets).
|
||||
if ProcessInfo.processInfo.arguments.contains("--ui-testing") {
|
||||
let schema = Schema([MoodEntryModel.self])
|
||||
let config = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true, cloudKitDatabase: .none)
|
||||
return try ModelContainer(for: schema, configurations: [config])
|
||||
}
|
||||
|
||||
let schema = Schema([MoodEntryModel.self])
|
||||
let storeURL = try Self.storeURL
|
||||
|
||||
|
||||
Reference in New Issue
Block a user