Refactor iOS UI tests to blueprint architecture and migrate legacy suites
This commit is contained in:
33
iosApp/CaseraUITests/Tests/AccessibilityTests.swift
Normal file
33
iosApp/CaseraUITests/Tests/AccessibilityTests.swift
Normal file
@@ -0,0 +1,33 @@
|
||||
import XCTest
|
||||
|
||||
final class AccessibilityTests: BaseUITestCase {
|
||||
func testA001_OnboardingPrimaryControlsAreReachable() {
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad()
|
||||
|
||||
app.buttons[UITestID.Onboarding.startFreshButton].waitUntilHittable(timeout: defaultTimeout)
|
||||
app.buttons[UITestID.Onboarding.joinExistingButton].waitUntilHittable(timeout: defaultTimeout)
|
||||
app.buttons[UITestID.Onboarding.loginButton].waitUntilHittable(timeout: defaultTimeout)
|
||||
}
|
||||
|
||||
func testA002_LoginControlsRemainOperable() {
|
||||
let login = TestFlows.navigateToLoginFromOnboarding(app: app)
|
||||
|
||||
app.textFields[UITestID.Auth.usernameField].waitUntilHittable(timeout: defaultTimeout)
|
||||
app.secureTextFields[UITestID.Auth.passwordField].waitUntilHittable(timeout: defaultTimeout)
|
||||
app.buttons[UITestID.Auth.loginButton].waitUntilHittable(timeout: defaultTimeout)
|
||||
|
||||
login.tapPasswordVisibilityToggle()
|
||||
login.assertPasswordFieldVisible()
|
||||
}
|
||||
|
||||
func testA003_CoreControlsExposeIdentifiers() {
|
||||
let login = TestFlows.navigateToLoginFromOnboarding(app: app)
|
||||
_ = login
|
||||
|
||||
XCTAssertTrue(app.textFields[UITestID.Auth.usernameField].exists)
|
||||
XCTAssertTrue(app.secureTextFields[UITestID.Auth.passwordField].exists || app.textFields[UITestID.Auth.passwordField].exists)
|
||||
XCTAssertTrue(app.buttons[UITestID.Auth.signUpButton].exists)
|
||||
XCTAssertTrue(app.buttons[UITestID.Auth.forgotPasswordButton].exists)
|
||||
}
|
||||
}
|
||||
19
iosApp/CaseraUITests/Tests/AppLaunchTests.swift
Normal file
19
iosApp/CaseraUITests/Tests/AppLaunchTests.swift
Normal file
@@ -0,0 +1,19 @@
|
||||
import XCTest
|
||||
|
||||
final class AppLaunchTests: BaseUITestCase {
|
||||
func testF001_ColdLaunchShowsOnboardingWelcome() {
|
||||
RootScreen(app: app).waitForReady(timeout: defaultTimeout)
|
||||
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
|
||||
func testF002_ColdLaunchShowsPrimaryOnboardingActions() {
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad()
|
||||
|
||||
XCTAssertTrue(app.buttons[UITestID.Onboarding.startFreshButton].exists)
|
||||
XCTAssertTrue(app.buttons[UITestID.Onboarding.joinExistingButton].exists)
|
||||
XCTAssertTrue(app.buttons[UITestID.Onboarding.loginButton].exists)
|
||||
}
|
||||
}
|
||||
31
iosApp/CaseraUITests/Tests/AuthenticationTests.swift
Normal file
31
iosApp/CaseraUITests/Tests/AuthenticationTests.swift
Normal file
@@ -0,0 +1,31 @@
|
||||
import XCTest
|
||||
|
||||
final class AuthenticationTests: BaseUITestCase {
|
||||
func testF201_OnboardingLoginEntryShowsLoginScreen() {
|
||||
let login = TestFlows.navigateToLoginFromOnboarding(app: app)
|
||||
login.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
|
||||
func testF202_LoginScreenCanTogglePasswordVisibility() {
|
||||
let login = TestFlows.navigateToLoginFromOnboarding(app: app)
|
||||
login.enterUsername("u")
|
||||
login.enterPassword("p")
|
||||
login.tapPasswordVisibilityToggle()
|
||||
login.assertPasswordFieldVisible()
|
||||
}
|
||||
|
||||
func testF203_RegisterSheetCanOpenAndDismiss() {
|
||||
let register = TestFlows.openRegisterFromLogin(app: app)
|
||||
register.tapCancel()
|
||||
|
||||
let login = LoginScreen(app: app)
|
||||
login.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
|
||||
func testF204_RegisterFormAcceptsInput() {
|
||||
let register = TestFlows.openRegisterFromLogin(app: app)
|
||||
register.waitForLoad(timeout: defaultTimeout)
|
||||
|
||||
XCTAssertTrue(app.buttons[UITestID.Auth.registerButton].exists)
|
||||
}
|
||||
}
|
||||
33
iosApp/CaseraUITests/Tests/OnboardingTests.swift
Normal file
33
iosApp/CaseraUITests/Tests/OnboardingTests.swift
Normal file
@@ -0,0 +1,33 @@
|
||||
import XCTest
|
||||
|
||||
final class OnboardingTests: BaseUITestCase {
|
||||
func testF101_StartFreshFlowReachesCreateAccount() {
|
||||
let createAccount = TestFlows.navigateStartFreshToCreateAccount(app: app, residenceName: "Blueprint House")
|
||||
createAccount.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
|
||||
func testF102_JoinExistingFlowGoesToCreateAccount() {
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad()
|
||||
welcome.tapJoinExisting()
|
||||
|
||||
let createAccount = OnboardingCreateAccountScreen(app: app)
|
||||
createAccount.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
|
||||
func testF103_BackNavigationFromNameResidenceReturnsToValueProps() {
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad()
|
||||
welcome.tapStartFresh()
|
||||
|
||||
let valueProps = OnboardingValuePropsScreen(app: app)
|
||||
valueProps.waitForLoad()
|
||||
valueProps.tapContinue()
|
||||
|
||||
let nameResidence = OnboardingNameResidenceScreen(app: app)
|
||||
nameResidence.waitForLoad()
|
||||
nameResidence.tapBack()
|
||||
|
||||
XCTAssertTrue(app.otherElements[UITestID.Root.onboarding].waitForExistence(timeout: defaultTimeout))
|
||||
}
|
||||
}
|
||||
39
iosApp/CaseraUITests/Tests/StabilityTests.swift
Normal file
39
iosApp/CaseraUITests/Tests/StabilityTests.swift
Normal file
@@ -0,0 +1,39 @@
|
||||
import XCTest
|
||||
|
||||
final class StabilityTests: BaseUITestCase {
|
||||
func testP001_RapidOnboardingNavigationDoesNotCrash() {
|
||||
for _ in 0..<3 {
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad(timeout: defaultTimeout)
|
||||
welcome.tapStartFresh()
|
||||
|
||||
let valueProps = OnboardingValuePropsScreen(app: app)
|
||||
valueProps.waitForLoad(timeout: defaultTimeout)
|
||||
valueProps.tapBack()
|
||||
|
||||
welcome.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
}
|
||||
|
||||
func testP002_RepeatedForwardNavigationRemainsResponsive() {
|
||||
for index in 0..<3 {
|
||||
let welcome = OnboardingWelcomeScreen(app: app)
|
||||
welcome.waitForLoad(timeout: defaultTimeout)
|
||||
welcome.tapStartFresh()
|
||||
|
||||
let valueProps = OnboardingValuePropsScreen(app: app)
|
||||
valueProps.waitForLoad(timeout: defaultTimeout)
|
||||
valueProps.tapContinue()
|
||||
|
||||
let nameResidence = OnboardingNameResidenceScreen(app: app)
|
||||
nameResidence.waitForLoad(timeout: defaultTimeout)
|
||||
nameResidence.enterResidenceName("Stress Home \(index)")
|
||||
nameResidence.tapBack()
|
||||
|
||||
valueProps.waitForLoad(timeout: defaultTimeout)
|
||||
valueProps.tapBack()
|
||||
|
||||
welcome.waitForLoad(timeout: defaultTimeout)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user