Commit bbb2bd6769

bbb2bd6769c9cdd511c5cf21595926eb2efdbc24

parent: 79684292f4

Unsigned

cmc <hello@cleberg.net> · 2026-09-30 06:19 UTC

Live suite: follow fixture and policy changes (!153)

Full live run as ios-smoke on 7968429: 19/22 passed; the 3 failures were test expectations, not app bugs. testAccountFlows: expiring tokens are refused for keys add / email verify before validation (krz/gitbay 89dd0a3), so accept either refusal. testDiscoveryFlows: krz description changed and a long About pushes Repositories below the fold. testWikiFlows: Architecture pages push Parity below the fold. The three rerun green; the other 19 passed in the full run.

Layout: unified · split

gitbayUITests/LiveSmokeUITests.swift +17 −10
@@ -905,11 +905,13 @@ extension LiveSmokeUITests {
905 .matching(identifier: "repo-owner-link").firstMatch 905 .matching(identifier: "repo-owner-link").firstMatch
906 XCTAssertTrue(ownerLink.waitForExistence(timeout: 10), "owner link missing") 906 XCTAssertTrue(ownerLink.waitForExistence(timeout: 10), "owner link missing")
907 ownerLink.tap() 907 ownerLink.tap()
908 XCTAssertTrue(app.staticTexts["warez for the public"].firstMatch 908 // The owner's description and About are theirs to change; the
909 .waitForExistence(timeout: 15), "profile did not load") 909 // repository list, below a long About, is what the profile always has.
910 XCTAssertTrue(app.staticTexts 910 XCTAssertTrue(app.navigationBars["krz"].waitForExistence(timeout: 15),
911 .containing(NSPredicate(format: "label BEGINSWITH[c] 'Repositories'")).firstMatch 911 "profile did not load")
912 .waitForExistence(timeout: 10), "profile repos missing") 912 XCTAssertTrue(scrollTo(app.staticTexts
913 .containing(NSPredicate(format: "label BEGINSWITH[c] 'Repositories'")).firstMatch),
914 "profile repos missing")
913 back() 915 back()
914 916
915 // --- grep inside the repo, last: its search UI owns the screen --- 917 // --- grep inside the repo, last: its search UI owns the screen ---
@@ -1003,9 +1005,12 @@ extension LiveSmokeUITests {
1003 focusAndType(paste, "not a key") 1005 focusAndType(paste, "not a key")
1004 app.descendants(matching: .any).matching(identifier: "key-paste-submit") 1006 app.descendants(matching: .any).matching(identifier: "key-paste-submit")
1005 .firstMatch.tap() 1007 .firstMatch.tap()
1008 // An expiring token (the suite's are) is refused before the key is
1009 // parsed; either refusal is the server's text reaching the sheet.
1006 XCTAssertTrue(app.staticTexts 1010 XCTAssertTrue(app.staticTexts
1007 .containing(NSPredicate(format: "label CONTAINS 'not a valid public key'")).firstMatch 1011 .containing(NSPredicate(format:
1008 .waitForExistence(timeout: 15), "invalid-key refusal not surfaced") 1012 "label CONTAINS 'not a valid public key' OR label CONTAINS 'creates a credential'"))
1013 .firstMatch.waitForExistence(timeout: 15), "invalid-key refusal not surfaced")
1009 app.buttons["Cancel"].firstMatch.tap() 1014 app.buttons["Cancel"].firstMatch.tap()
1010 1015
1011 // The PGP key's UID email, below the keys on a List that does not 1016 // The PGP key's UID email, below the keys on a List that does not
@@ -1063,8 +1068,9 @@ extension LiveSmokeUITests {
1063 XCTAssertTrue(verify.isEnabled, "verify stayed disabled — code text never landed") 1068 XCTAssertTrue(verify.isEnabled, "verify stayed disabled — code text never landed")
1064 verify.tap() 1069 verify.tap()
1065 XCTAssertTrue(app.staticTexts 1070 XCTAssertTrue(app.staticTexts
1066 .containing(NSPredicate(format: "label CONTAINS 'invalid, expired'")).firstMatch 1071 .containing(NSPredicate(format:
1067 .waitForExistence(timeout: 15), "bad-code refusal not surfaced") 1072 "label CONTAINS 'invalid, expired' OR label CONTAINS 'creates a credential'"))
1073 .firstMatch.waitForExistence(timeout: 15), "bad-code refusal not surfaced")
1068 } 1074 }
1069} 1075}
1070 1076
@@ -1488,8 +1494,9 @@ extension LiveSmokeUITests {
1488 1494
1489 // Parity.org is an org page, so this also proves the org renderer 1495 // Parity.org is an org page, so this also proves the org renderer
1490 // runs on wiki content and not just READMEs. 1496 // runs on wiki content and not just READMEs.
1497 // Below the fold since the Architecture pages sort above it.
1491 let parity = app.staticTexts["Parity"].firstMatch 1498 let parity = app.staticTexts["Parity"].firstMatch
1492 XCTAssertTrue(parity.exists, "Parity page missing from the listing") 1499 XCTAssertTrue(scrollTo(parity), "Parity page missing from the listing")
1493 parity.tap() 1500 parity.tap()
1494 XCTAssertTrue(app.staticTexts 1501 XCTAssertTrue(app.staticTexts
1495 .containing(NSPredicate(format: "label CONTAINS 'surface'")).firstMatch 1502 .containing(NSPredicate(format: "label CONTAINS 'surface'")).firstMatch