Add 22 new UI tests across 8 test files covering Home, Schedule, Progress, Settings, TabNavigation, TripSaving, and TripOptions. Add accessibility identifiers to 11 view files for test element discovery. Fix sport chip assertion logic (all sports start selected, tap deselects), scroll container issues on iOS 26 nested ScrollViews, toggle interaction, and delete trip flow. Update QA coverage map from 32 to 54 automated test cases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
1.7 KiB
Swift
60 lines
1.7 KiB
Swift
//
|
|
// AppLaunchTests.swift
|
|
// SportsTimeUITests
|
|
//
|
|
// Verifies app boot, bootstrap, and initial screen rendering.
|
|
// QA Sheet: F-001 through F-003
|
|
//
|
|
|
|
import XCTest
|
|
|
|
final class AppLaunchTests: BaseUITestCase {
|
|
|
|
/// F-001: Cold launch on first install — hero card + all tabs visible.
|
|
@MainActor
|
|
func testF001_ColdLaunchShowsHomeWithAllTabs() {
|
|
let home = HomeScreen(app: app)
|
|
home.waitForLoad()
|
|
|
|
// Assert: Hero card text visible
|
|
XCTAssertTrue(home.adventureAwaitsText.exists,
|
|
"Hero card should display 'Adventure Awaits'")
|
|
|
|
// Assert: All tabs present
|
|
home.assertTabBarVisible()
|
|
|
|
captureScreenshot(named: "F001-HomeScreen-Launch")
|
|
}
|
|
|
|
/// F-002: Bootstrap loads bundled data — Start Planning is interactable.
|
|
@MainActor
|
|
func testF002_BootstrapCompletesWithContent() {
|
|
let home = HomeScreen(app: app)
|
|
home.waitForLoad()
|
|
|
|
// Assert: Start Planning button is interactable (proves bootstrap loaded data)
|
|
XCTAssertTrue(home.startPlanningButton.isHittable,
|
|
"Start Planning should be hittable after bootstrap")
|
|
}
|
|
|
|
/// F-006: Background to foreground resume — data intact.
|
|
@MainActor
|
|
func testF006_BackgroundForegroundResume() {
|
|
let home = HomeScreen(app: app)
|
|
home.waitForLoad()
|
|
|
|
// Background the app
|
|
XCUIDevice.shared.press(.home)
|
|
sleep(2)
|
|
|
|
// Foreground
|
|
app.activate()
|
|
|
|
// Assert: Home still loaded, no re-bootstrap
|
|
XCTAssertTrue(
|
|
home.startPlanningButton.waitForExistence(timeout: BaseUITestCase.defaultTimeout),
|
|
"App should resume without re-bootstrapping"
|
|
)
|
|
}
|
|
}
|