Files
Reflect/Tests iOS/Screens/TabBarScreen.swift

84 lines
2.4 KiB
Swift

//
// TabBarScreen.swift
// Tests iOS
//
// Screen object for the main tab bar navigation.
//
import XCTest
struct TabBarScreen {
let app: XCUIApplication
// MARK: - Tab Buttons
var dayTab: XCUIElement { tab(identifier: UITestID.Tab.day, labels: ["Day", "Main"]) }
var monthTab: XCUIElement { tab(identifier: UITestID.Tab.month, labels: ["Month"]) }
var yearTab: XCUIElement { tab(identifier: UITestID.Tab.year, labels: ["Year", "Filter"]) }
var insightsTab: XCUIElement { tab(identifier: UITestID.Tab.insights, labels: ["Insights"]) }
var settingsTab: XCUIElement { tab(identifier: UITestID.Tab.settings, labels: ["Settings"]) }
// MARK: - Actions
@discardableResult
func tapDay() -> DayScreen {
app.tapTab(identifier: UITestID.Tab.day, labels: ["Day", "Main"])
return DayScreen(app: app)
}
@discardableResult
func tapMonth() -> TabBarScreen {
app.tapTab(identifier: UITestID.Tab.month, labels: ["Month"])
return self
}
@discardableResult
func tapYear() -> TabBarScreen {
app.tapTab(identifier: UITestID.Tab.year, labels: ["Year", "Filter"])
return self
}
@discardableResult
func tapInsights() -> TabBarScreen {
app.tapTab(identifier: UITestID.Tab.insights, labels: ["Insights"])
return self
}
@discardableResult
func tapSettings() -> SettingsScreen {
app.tapTab(identifier: UITestID.Tab.settings, labels: ["Settings"])
return SettingsScreen(app: app)
}
// MARK: - Assertions
func assertDayTabSelected() {
XCTAssertTrue(dayTab.isSelected, "Day tab should be selected")
}
func assertTabBarVisible() {
let visible = dayTab.waitForExistence(timeout: 5) ||
monthTab.waitForExistence(timeout: 1) ||
settingsTab.waitForExistence(timeout: 1)
XCTAssertTrue(visible, "Tab bar should be visible")
}
// MARK: - Element Resolution
private func tab(identifier: String, labels: [String]) -> XCUIElement {
let idMatch = app.tabBars.buttons[identifier]
if idMatch.exists {
return idMatch
}
for label in labels {
let match = app.tabBars.buttons[label]
if match.exists {
return match
}
}
return app.tabBars.buttons[labels.first ?? identifier]
}
}