commit b3bd53e982ab254dc5baecdd38c56a78dbcb088e
parent 124919955d5a4493bd335974f68728fe719ec6cc
Author: triesap <tyson@radroots.org>
Date: Fri, 28 Aug 2026 18:48:07 +0000
test: trust one verified submit action
- Treat one synthesized tap on a verified hittable control as the action proof.
- Materialize terminal form evidence immediately through ordinary scrolling.
- Wait for changed safe status or submit evidence after progress has cleared.
- Avoid duplicate taps and transient start-state inference entirely.
Diffstat:
1 file changed, 13 insertions(+), 28 deletions(-)
diff --git a/RadrootsUITests/RadrootsRemoteQualificationUITests.swift b/RadrootsUITests/RadrootsRemoteQualificationUITests.swift
@@ -1070,8 +1070,10 @@ final class RadrootsRemoteQualificationUITests: XCTestCase {
let status = app.staticTexts.matching(identifier: "radroots.add.status").firstMatch
let priorStatusLabel = status.exists ? status.label : nil
let priorSubmitValue = submit.value as? String
+ submit.tap()
+ scrollTo(app, element: submit)
guard
- tapSubmitUntilWorkStarts(
+ waitForWorkToFinish(
app,
submit: submit,
status: status,
@@ -1080,15 +1082,6 @@ final class RadrootsRemoteQualificationUITests: XCTestCase {
)
else {
XCTFail(
- "The Add submission tap did not start local work; "
- + submissionDiagnostics(app, submit: submit)
- )
- return nil
- }
- guard
- waitForWorkToFinish(app)
- else {
- XCTFail(
"The Add submission did not reach a terminal local state; "
+ submissionDiagnostics(app, submit: submit)
)
@@ -1126,15 +1119,7 @@ final class RadrootsRemoteQualificationUITests: XCTestCase {
}
@MainActor
- private func waitForWorkToFinish(_ app: XCUIApplication) -> Bool {
- let progress = app.descendants(matching: .any)["radroots.add.progress"]
- let finished = NSPredicate { _, _ in !progress.exists }
- let expectation = XCTNSPredicateExpectation(predicate: finished, object: app)
- return XCTWaiter.wait(for: [expectation], timeout: 180) == .completed
- }
-
- @MainActor
- private func tapSubmitUntilWorkStarts(
+ private func waitForWorkToFinish(
_ app: XCUIApplication,
submit: XCUIElement,
status: XCUIElement,
@@ -1142,17 +1127,17 @@ final class RadrootsRemoteQualificationUITests: XCTestCase {
priorSubmitValue: String?
) -> Bool {
let progress = app.descendants(matching: .any)["radroots.add.progress"]
- let started = NSPredicate { _, _ in
- if progress.exists { return true }
- if status.exists { return status.label != priorStatusLabel }
- if priorStatusLabel != nil { return true }
+ let finished = NSPredicate { _, _ in
+ guard !progress.exists else { return false }
+ if status.exists, !status.label.isEmpty, status.label != priorStatusLabel {
+ return true
+ }
guard submit.exists else { return false }
- return (submit.value as? String) != priorSubmitValue
+ let submitValue = submit.value as? String
+ return submitValue != priorSubmitValue && submitValue != "Working"
}
-
- submit.tap()
- let expectation = XCTNSPredicateExpectation(predicate: started, object: app)
- return XCTWaiter.wait(for: [expectation], timeout: 10) == .completed
+ let expectation = XCTNSPredicateExpectation(predicate: finished, object: app)
+ return XCTWaiter.wait(for: [expectation], timeout: 180) == .completed
}
@MainActor