107 lines
3.0 KiB
Swift
107 lines
3.0 KiB
Swift
//
|
|
// CustomizeScreen.swift
|
|
// Tests iOS
|
|
//
|
|
// Screen object for the Customize sub-tab — theme, voting layout, and day view style pickers.
|
|
//
|
|
|
|
import XCTest
|
|
|
|
struct CustomizeScreen {
|
|
let app: XCUIApplication
|
|
|
|
// MARK: - Theme Mode Buttons
|
|
|
|
func themeButton(named name: String) -> XCUIElement {
|
|
app.buttons[UITestID.Customize.themeButton(name)]
|
|
}
|
|
|
|
// MARK: - Voting Layout Buttons
|
|
|
|
func votingLayoutButton(named name: String) -> XCUIElement {
|
|
app.buttons[UITestID.Customize.votingLayoutButton(name)]
|
|
}
|
|
|
|
// MARK: - Day View Style Buttons
|
|
|
|
func dayViewStyleButton(named name: String) -> XCUIElement {
|
|
app.buttons[UITestID.Customize.dayStyleButton(name)]
|
|
}
|
|
|
|
func iconPackButton(named name: String) -> XCUIElement {
|
|
app.buttons[UITestID.Customize.iconPackButton(name)]
|
|
}
|
|
|
|
func appThemeCard(named name: String) -> XCUIElement {
|
|
app.element(UITestID.Customize.appThemeCard(name))
|
|
}
|
|
|
|
// MARK: - Actions
|
|
|
|
func selectTheme(_ name: String) {
|
|
tapHorizontallyScrollableButton(themeButton(named: name))
|
|
}
|
|
|
|
func selectVotingLayout(_ name: String) {
|
|
tapHorizontallyScrollableButton(votingLayoutButton(named: name))
|
|
}
|
|
|
|
func selectDayViewStyle(_ name: String) {
|
|
tapHorizontallyScrollableButton(dayViewStyleButton(named: name))
|
|
}
|
|
|
|
func selectIconPack(_ name: String) {
|
|
let button = iconPackButton(named: name)
|
|
_ = app.swipeUntilExists(button, direction: .up, maxSwipes: 6)
|
|
button.tapWhenReady(timeout: 5)
|
|
}
|
|
|
|
// MARK: - Assertions
|
|
|
|
func assertThemeButtonExists(_ name: String, file: StaticString = #file, line: UInt = #line) {
|
|
XCTAssertTrue(
|
|
themeButton(named: name).waitForExistence(timeout: 5),
|
|
"Theme button '\(name)' should exist",
|
|
file: file, line: line
|
|
)
|
|
}
|
|
|
|
@discardableResult
|
|
func openThemePicker(file: StaticString = #file, line: UInt = #line) -> Bool {
|
|
let browseButton = app.element(UITestID.Settings.browseThemesButton)
|
|
guard browseButton.waitForExistence(timeout: 5) else {
|
|
XCTFail("Browse Themes button should exist", file: file, line: line)
|
|
return false
|
|
}
|
|
browseButton.tapWhenReady(timeout: 5, file: file, line: line)
|
|
|
|
let firstCard = appThemeCard(named: "Zen Garden")
|
|
return firstCard.waitForExistence(timeout: 5)
|
|
}
|
|
|
|
// MARK: - Private
|
|
|
|
private func tapHorizontallyScrollableButton(_ button: XCUIElement) {
|
|
if button.waitForExistence(timeout: 1) {
|
|
button.tapWhenReady(timeout: 3)
|
|
return
|
|
}
|
|
|
|
for _ in 0..<6 {
|
|
app.swipeLeft()
|
|
if button.waitForExistence(timeout: 1) {
|
|
button.tapWhenReady(timeout: 3)
|
|
return
|
|
}
|
|
}
|
|
|
|
for _ in 0..<6 {
|
|
app.swipeRight()
|
|
if button.waitForExistence(timeout: 1) {
|
|
button.tapWhenReady(timeout: 3)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|