// // TabBarScreen.swift // Tests iOS // // Screen object for the main tab bar navigation. // import XCTest struct TabBarScreen { let app: XCUIApplication private let defaultTimeout: TimeInterval = 2 private let navigationTimeout: TimeInterval = 5 // MARK: - Actions @discardableResult func tapDay(file: StaticString = #filePath, line: UInt = #line) -> DayScreen { app.tapTab(identifier: UITestID.Tab.day, labels: ["Day", "Main"], timeout: navigationTimeout, file: file, line: line) return DayScreen(app: app) } @discardableResult func tapMonth(file: StaticString = #filePath, line: UInt = #line) -> TabBarScreen { app.tapTab(identifier: UITestID.Tab.month, labels: ["Month"], timeout: navigationTimeout, file: file, line: line) return self } @discardableResult func tapYear(file: StaticString = #filePath, line: UInt = #line) -> TabBarScreen { app.tapTab(identifier: UITestID.Tab.year, labels: ["Year", "Filter"], timeout: navigationTimeout, file: file, line: line) return self } @discardableResult func tapInsights(file: StaticString = #filePath, line: UInt = #line) -> TabBarScreen { app.tapTab(identifier: UITestID.Tab.insights, labels: ["Insights"], timeout: navigationTimeout, file: file, line: line) return self } @discardableResult func tapSettings(file: StaticString = #filePath, line: UInt = #line) -> SettingsScreen { app.tapTab(identifier: UITestID.Tab.settings, labels: ["Settings"], timeout: navigationTimeout, file: file, line: line) return SettingsScreen(app: app) } // MARK: - Assertions @discardableResult func assertVisible(file: StaticString = #filePath, line: UInt = #line) -> TabBarScreen { app.tabBars.firstMatch .waitForExistenceOrFail(timeout: navigationTimeout, message: "Tab bar should be visible", file: file, line: line) return self } func assertDayTabSelected(file: StaticString = #filePath, line: UInt = #line) { let dayTab = app.tabBars.buttons[UITestID.Tab.day] dayTab.waitForExistenceOrFail(timeout: defaultTimeout, message: "Day tab should exist", file: file, line: line) XCTAssertTrue(dayTab.isSelected, "Day tab should be selected", file: file, line: line) } }