From dad3270be765690400fc786452ec89c08e619e8e Mon Sep 17 00:00:00 2001 From: Trey t Date: Wed, 18 Feb 2026 23:18:00 -0600 Subject: [PATCH] Add F-010, F-017 UI tests and update QA test plan with 24 automation mappings - F-010: Tap active tab scrolls to top (TabNavigationTests) - F-017: Recent trips section with saved trips (HomeTests) - Update SportsTime_QA_Test_Plan.xlsx with all 60 automated test mappings - Green highlight on automated cells for visual tracking Co-Authored-By: Claude Opus 4.6 --- SportsTimeUITests/Tests/HomeTests.swift | 46 ++++++- .../Tests/TabNavigationTests.swift | 33 +++++ docs/SportsTime_QA_Test_Plan.xlsx | Bin 33576 -> 33932 bytes uiTestPrompt.md | 120 +++++++++++++----- 4 files changed, 165 insertions(+), 34 deletions(-) diff --git a/SportsTimeUITests/Tests/HomeTests.swift b/SportsTimeUITests/Tests/HomeTests.swift index fee4131..c04b592 100644 --- a/SportsTimeUITests/Tests/HomeTests.swift +++ b/SportsTimeUITests/Tests/HomeTests.swift @@ -2,8 +2,8 @@ // HomeTests.swift // SportsTimeUITests // -// Tests for the Home tab: hero card, start planning, and toolbar button. -// QA Sheet: F-012, F-013, F-020 +// Tests for the Home tab: hero card, start planning, toolbar button, and recent trips. +// QA Sheet: F-012, F-013, F-014, F-017, F-019, F-020 // import XCTest @@ -79,6 +79,48 @@ final class HomeTests: BaseUITestCase { captureScreenshot(named: "F014-FeaturedTrips") } + /// F-017: Recent trips section shows saved trips with "See All" link on Home tab. + @MainActor + func testF017_RecentTripsSectionWithSavedTrips() { + // Plan a trip and select the first option + let (_, detail) = TestFlows.planAndSelectFirstTrip(app: app) + + // Save the trip + detail.assertSaveState(isSaved: false) + detail.tapFavorite() + detail.assertSaveState(isSaved: true) + + captureScreenshot(named: "F017-TripSaved") + + // Navigate back: Detail → Options → Wizard → Cancel (dismiss sheet) + app.navigationBars.buttons.firstMatch.tap() + app.navigationBars.buttons.firstMatch + .waitUntilHittable(timeout: BaseUITestCase.shortTimeout).tap() + TripWizardScreen(app: app).tapCancel() + + // We're back on Home tab. Wait for it to load. + let home = HomeScreen(app: app) + home.waitForLoad() + + // Scroll to find the recent trips section + let recentTrips = home.recentTripsSection + var scrollAttempts = 0 + while !recentTrips.exists && scrollAttempts < 15 { + app.swipeUp(velocity: .slow) + scrollAttempts += 1 + } + + XCTAssertTrue(recentTrips.exists, + "Recent trips section should appear after saving a trip") + + // Verify "See All" link is visible + let seeAllText = app.staticTexts["See All"] + XCTAssertTrue(seeAllText.exists, + "'See All' link should be visible in recent trips section") + + captureScreenshot(named: "F017-RecentTripsSection") + } + /// F-019: Planning tips section is visible at bottom of home tab. @MainActor func testF019_PlanningTipsSectionVisible() { diff --git a/SportsTimeUITests/Tests/TabNavigationTests.swift b/SportsTimeUITests/Tests/TabNavigationTests.swift index daaf327..a2158e8 100644 --- a/SportsTimeUITests/Tests/TabNavigationTests.swift +++ b/SportsTimeUITests/Tests/TabNavigationTests.swift @@ -44,6 +44,39 @@ final class TabNavigationTests: BaseUITestCase { captureScreenshot(named: "F008-TabNavigation-ReturnHome") } + /// F-010: Tapping the active tab scrolls the view back to the top. + @MainActor + func testF010_TapActiveTabScrollsToTop() { + let home = HomeScreen(app: app) + home.waitForLoad() + + // Verify "Adventure Awaits" hero card is hittable at the top + XCTAssertTrue(home.adventureAwaitsText.isHittable, + "Adventure Awaits should be hittable initially") + + // Scroll down until the hero card is off-screen + for _ in 0..<8 { + app.swipeUp(velocity: .slow) + } + + // Verify the hero card is no longer hittable (scrolled off-screen) + XCTAssertFalse(home.adventureAwaitsText.isHittable, + "Adventure Awaits should not be hittable after scrolling down") + + captureScreenshot(named: "F010-ScrolledDown") + + // Tap the Home tab (already the active tab) to trigger scroll-to-top + home.homeTab.waitUntilHittable(timeout: BaseUITestCase.shortTimeout).tap() + + // Hero card should scroll back into view and become hittable + home.adventureAwaitsText.waitUntilHittable( + timeout: BaseUITestCase.defaultTimeout, + "Adventure Awaits should be hittable after tapping active tab (scroll to top)" + ) + + captureScreenshot(named: "F010-ScrolledToTop") + } + /// F-009: Tab state preserved — Schedule filters survive tab switch. @MainActor func testF009_TabStatePreservedOnSwitch() { diff --git a/docs/SportsTime_QA_Test_Plan.xlsx b/docs/SportsTime_QA_Test_Plan.xlsx index ecf021940cc0ae34735aba99e4cbe0b0f40d3a87..7d1f5d771775215fb28bfdeea07c3ce489683209 100644 GIT binary patch delta 23968 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 U8oqYFz7Gt)31UR234B=aKUAfAM*si- delta 23645 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 -2. Full UI suite: - - `xcodebuild test-without-building -project SportsTime.xcodeproj -scheme SportsTime -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.2' -parallel-testing-enabled NO -only-testing:SportsTimeUITests` -3. If requested, full scheme: - - `xcodebuild test-without-building -project SportsTime.xcodeproj -scheme SportsTime -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.2' -parallel-testing-enabled NO` +## Implementation Workflow -## Output Format +1. Evaluate all candidate QA cases. +2. Output a short ranked list with reason for each. +3. Confirm the chosen 3. +4. Implement tests: + - Put tests in existing or appropriate suite(s) in `SportsTimeUITests/Tests/`. + - Add page-object helpers in `Screens.swift` only when reusable. + - Keep assertions behavior-focused and explicit. + - Capture screenshots at key checkpoints for longer flows. +5. Run only the 3 selected tests first. +6. Fix failures. +7. Re-run each selected test at least 2 times to catch flake. +8. Stop only when all 3 are green and stable, or clearly blocked. -- Summarize files changed. -- Summarize root causes fixed. -- Include exact commands run and pass/fail outcomes. -- Call out any remaining flaky behavior or follow-up work. +## Validation Commands + +Use this destination: + +`-destination 'platform=iOS Simulator,name=iPhone 17,OS=26.2'` + +Run each selected test explicitly: + +`xcodebuild test-without-building -project SportsTime.xcodeproj -scheme SportsTime -parallel-testing-enabled NO -only-testing:SportsTimeUITests//test_ ` + +If needed, run selected suite only: + +`xcodebuild test-without-building -project SportsTime.xcodeproj -scheme SportsTime -parallel-testing-enabled NO -only-testing:SportsTimeUITests/ ` + +Do not run the full suite unless I ask. + +## Output Contract + +Return: + +1. Chosen 3 QA cases and why they were selected. +2. Files changed and what changed in each. +3. Exact commands run. +4. Test results for each selected test (including repeat runs). +5. Any residual risk or blocker. +6. Optional next 2-3 QA cases to implement next (ranked by ease/confidence). + +## INPUT (Replace This Block) + +Candidate QA cases from `docs/SportsTime_QA_Test_Plan.xlsx`: + +- [F-___] +- [F-___] +- [F-___] +- [F-___] +- [F-___] + +Extra constraints: + +- [Example: Do not edit `SportsTimeUITests/Tests/TripSavingTests.swift`] +- [Example: Only use existing `TestFlows`]