84 lines
2.4 KiB
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]
|
|
}
|
|
}
|