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,
|
// Tests the trip planning wizard: planning modes, calendar navigation,
|
||||||
// sport/region selection, and planning engine results.
|
// 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
|
import XCTest
|
||||||
@@ -151,7 +151,80 @@ final class TripWizardFlowTests: BaseUITestCase {
|
|||||||
captureScreenshot(named: "F026-DateRangeSelected")
|
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.
|
/// F-030: Single sport selection — MLB highlights.
|
||||||
@MainActor
|
@MainActor
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user