Add F-030, F-031, F-032 UI tests for calendar date edge cases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
//
|
||||
// Tests the trip planning wizard: planning modes, calendar navigation,
|
||||
// sport/region selection, and planning engine results.
|
||||
// QA Sheet: F-018 through F-042, F-047
|
||||
// QA Sheet: F-018 through F-042, F-047; also F-030, F-031, F-032
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@@ -151,7 +151,80 @@ final class TripWizardFlowTests: BaseUITestCase {
|
||||
captureScreenshot(named: "F026-DateRangeSelected")
|
||||
}
|
||||
|
||||
// MARK: - Sport Selection (F-030, F-031)
|
||||
// MARK: - Date Edge Cases (F-030, F-031, F-032)
|
||||
|
||||
/// F-030: Tapping end date before start date — selection auto-corrects.
|
||||
@MainActor
|
||||
func testF030_DateRangeEndBeforeStart() {
|
||||
let (_, wizard) = openWizard()
|
||||
wizard.selectDateRangeMode()
|
||||
|
||||
// Navigate to a future month
|
||||
wizard.selectDateRange(
|
||||
targetMonth: "July",
|
||||
targetYear: "2026",
|
||||
startDay: "2026-07-15",
|
||||
endDay: "2026-07-10"
|
||||
)
|
||||
|
||||
// The picker auto-corrects: if second tap is before first,
|
||||
// it swaps them so start <= end. No crash or error.
|
||||
captureScreenshot(named: "F030-EndBeforeStart")
|
||||
}
|
||||
|
||||
/// F-031: Tapping the same date twice selects a single-day trip.
|
||||
@MainActor
|
||||
func testF031_DateRangeSameDay() {
|
||||
let (_, wizard) = openWizard()
|
||||
wizard.selectDateRangeMode()
|
||||
|
||||
// Navigate to July 2026 and tap the same day twice
|
||||
wizard.monthLabel.scrollIntoView(in: app.scrollViews.firstMatch)
|
||||
let targetMonthYear = "July 2026"
|
||||
var attempts = 0
|
||||
while attempts < 24 && !wizard.monthLabel.label.contains(targetMonthYear) {
|
||||
wizard.nextMonthButton.scrollIntoView(in: app.scrollViews.firstMatch)
|
||||
wizard.nextMonthButton.waitUntilHittable(timeout: BaseUITestCase.defaultTimeout).tap()
|
||||
attempts += 1
|
||||
}
|
||||
|
||||
let dayBtn = wizard.dayButton("2026-07-20")
|
||||
dayBtn.scrollIntoView(in: app.scrollViews.firstMatch)
|
||||
if dayBtn.exists && dayBtn.isHittable {
|
||||
dayBtn.tap()
|
||||
dayBtn.tap()
|
||||
}
|
||||
|
||||
// Single-day selection - no crash
|
||||
captureScreenshot(named: "F031-SameDay")
|
||||
}
|
||||
|
||||
/// F-032: Past dates are disabled and not tappable.
|
||||
@MainActor
|
||||
func testF032_PastDatesDisabled() {
|
||||
let (_, wizard) = openWizard()
|
||||
wizard.selectDateRangeMode()
|
||||
|
||||
// Navigate to the current month
|
||||
wizard.monthLabel.scrollIntoView(in: app.scrollViews.firstMatch)
|
||||
|
||||
// Find yesterday's date
|
||||
let calendar = Calendar.current
|
||||
let yesterday = calendar.date(byAdding: .day, value: -1, to: Date())!
|
||||
let formatter = DateFormatter()
|
||||
formatter.dateFormat = "yyyy-MM-dd"
|
||||
let yesterdayId = "wizard.dates.day.\(formatter.string(from: yesterday))"
|
||||
|
||||
let yesterdayBtn = app.buttons[yesterdayId]
|
||||
if yesterdayBtn.exists {
|
||||
XCTAssertFalse(yesterdayBtn.isEnabled,
|
||||
"Yesterday's date should be disabled")
|
||||
}
|
||||
|
||||
captureScreenshot(named: "F032-PastDatesDisabled")
|
||||
}
|
||||
|
||||
// MARK: - Sport Selection (F-033, F-034)
|
||||
|
||||
/// F-030: Single sport selection — MLB highlights.
|
||||
@MainActor
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user