// // StabilityTests.swift // Tests iOS // // Full navigation stability tests -- visit every screen without crash. // import XCTest final class StabilityTests: BaseUITestCase { override var seedFixture: String? { "week_of_moods" } /// TC-152a: Open entry detail sheet and dismiss without crash. func testStability_EntryDetail() { let firstEntry = app.firstEntryRow firstEntry.waitForExistenceOrFail(timeout: navigationTimeout, message: "Entry row should exist from seeded data") firstEntry.forceTap() let detailScreen = EntryDetailScreen(app: app) detailScreen.assertVisible() detailScreen.dismiss() detailScreen.assertDismissed() } /// TC-152b: Navigate to Month tab without crash. func testStability_MonthTab() { let tabBar = TabBarScreen(app: app) tabBar.tapMonth() let monthGrid = app.element(UITestID.Month.grid) monthGrid.waitForExistenceOrFail(timeout: navigationTimeout, message: "Month grid should be visible") } /// TC-152c: Navigate to Year tab without crash. func testStability_YearTab() { let tabBar = TabBarScreen(app: app) tabBar.tapYear() let heatmap = app.element(UITestID.Year.heatmap) heatmap.waitForExistenceOrFail(timeout: navigationTimeout, message: "Year heatmap should be visible") } /// TC-152d: Navigate to Insights tab without crash. func testStability_InsightsTab() { let tabBar = TabBarScreen(app: app) tabBar.tapInsights() let insightsHeader = app.element(UITestID.Insights.header) insightsHeader.waitForExistenceOrFail(timeout: navigationTimeout, message: "Insights header should be visible") } /// TC-152e: Navigate to Settings and switch sub-tabs without crash. func testStability_SettingsTabs() { let tabBar = TabBarScreen(app: app) let settingsScreen = tabBar.tapSettings() settingsScreen.assertVisible() settingsScreen.tapSettingsTab() settingsScreen.tapCustomizeTab() } /// TC-152f: Full round-trip back to Day tab without crash. func testStability_ReturnToDay() { let tabBar = TabBarScreen(app: app) tabBar.tapSettings() let dayScreen = tabBar.tapDay() dayScreen.assertAnyEntryExists() } }