Add F-045, F-056, F-057 UI tests for planning errors and trip option filters

- F-045: Planning with conflicting constraints handles gracefully
- F-056: Pace filter (Packed/Moderate/Relaxed) selects correctly
- F-057: Cities filter limits trip results

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-02-20 01:28:05 -06:00
parent 4e6d8ff37f
commit e6584d443d
3 changed files with 108 additions and 2 deletions

View File

@@ -3,7 +3,7 @@
// SportsTimeUITests
//
// Tests the Trip Options results screen: sorting, selection, navigation.
// QA Sheet: F-051, F-052, F-053, F-054, F-055, F-058, F-059, F-076
// QA Sheet: F-051, F-052, F-053, F-054, F-055, F-056, F-057, F-058, F-059, F-076
//
import XCTest
@@ -107,6 +107,62 @@ final class TripOptionsTests: BaseUITestCase {
captureScreenshot(named: "F058-SelectTripOpensDetail")
}
// MARK: - Pace Filter (F-056)
/// F-056: Pace filter dropdown selects Packed/Moderate/Relaxed.
@MainActor
func testF056_PaceFilter() {
_ = planTripAndGetOptions()
// The pace filter is a Menu. The default label shows "All".
// Find and tap the pace filter menu button.
let paceMenu = app.buttons.matching(NSPredicate(
format: "label CONTAINS 'All' OR label CONTAINS 'Packed' OR label CONTAINS 'Moderate' OR label CONTAINS 'Relaxed'"
)).firstMatch
XCTAssertTrue(paceMenu.waitForExistence(timeout: BaseUITestCase.shortTimeout),
"Pace filter menu should exist")
paceMenu.tap()
// Select "Packed" from the menu
let packedOption = app.buttons["Packed"]
XCTAssertTrue(packedOption.waitForExistence(timeout: BaseUITestCase.shortTimeout),
"Packed option should exist in pace menu")
packedOption.tap()
// Results should update (may show fewer or same results)
// The pace filter label should now show "Packed"
let updatedMenu = app.buttons.matching(NSPredicate(
format: "label CONTAINS 'Packed'"
)).firstMatch
XCTAssertTrue(updatedMenu.waitForExistence(timeout: BaseUITestCase.shortTimeout),
"Pace filter should show 'Packed' after selection")
captureScreenshot(named: "F056-PaceFilter-Packed")
}
// MARK: - Cities Filter (F-057)
/// F-057: Cities filter limits results to selected max cities.
@MainActor
func testF057_CitiesFilter() {
_ = planTripAndGetOptions()
// Cities filter buttons are labeled with numbers: "No Limit", "15", "10", "5", etc.
// Find and tap the "5" cities filter button
let fiveCitiesButton = app.buttons["5"]
fiveCitiesButton.scrollIntoView(in: app.scrollViews.firstMatch)
XCTAssertTrue(fiveCitiesButton.waitForExistence(timeout: BaseUITestCase.shortTimeout),
"'5' cities filter button should exist")
fiveCitiesButton.tap()
// Results should update; verify no crash
sleep(1)
captureScreenshot(named: "F057-CitiesFilter-5")
}
// MARK: - Trip Detail Variants (F-076)
/// F-076: Trip detail works correctly with a single-stop (minimal) trip.