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 {
905905 .matching(identifier: "repo-owner-link").firstMatch
906906 XCTAssertTrue(ownerLink.waitForExistence(timeout: 10), "owner link missing")
907907 ownerLink.tap()
908 XCTAssertTrue(app.staticTexts["warez for the public"].firstMatch
909 .waitForExistence(timeout: 15), "profile did not load")
910 XCTAssertTrue(app.staticTexts
911 .containing(NSPredicate(format: "label BEGINSWITH[c] 'Repositories'")).firstMatch
912 .waitForExistence(timeout: 10), "profile repos missing")
908 // The owner's description and About are theirs to change; the
909 // repository list, below a long About, is what the profile always has.
910 XCTAssertTrue(app.navigationBars["krz"].waitForExistence(timeout: 15),
911 "profile did not load")
912 XCTAssertTrue(scrollTo(app.staticTexts
913 .containing(NSPredicate(format: "label BEGINSWITH[c] 'Repositories'")).firstMatch),
914 "profile repos missing")
913915 back()
914916
915917 // --- grep inside the repo, last: its search UI owns the screen ---
@@ -1003,9 +1005,12 @@ extension LiveSmokeUITests {
10031005 focusAndType(paste, "not a key")
10041006 app.descendants(matching: .any).matching(identifier: "key-paste-submit")
10051007 .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.
10061010 XCTAssertTrue(app.staticTexts
1007 .containing(NSPredicate(format: "label CONTAINS 'not a valid public key'")).firstMatch
1008 .waitForExistence(timeout: 15), "invalid-key refusal not surfaced")
1011 .containing(NSPredicate(format:
1012 "label CONTAINS 'not a valid public key' OR label CONTAINS 'creates a credential'"))
1013 .firstMatch.waitForExistence(timeout: 15), "invalid-key refusal not surfaced")
10091014 app.buttons["Cancel"].firstMatch.tap()
10101015
10111016 // The PGP key's UID email, below the keys on a List that does not
@@ -1063,8 +1068,9 @@ extension LiveSmokeUITests {
10631068 XCTAssertTrue(verify.isEnabled, "verify stayed disabled — code text never landed")
10641069 verify.tap()
10651070 XCTAssertTrue(app.staticTexts
1066 .containing(NSPredicate(format: "label CONTAINS 'invalid, expired'")).firstMatch
1067 .waitForExistence(timeout: 15), "bad-code refusal not surfaced")
1071 .containing(NSPredicate(format:
1072 "label CONTAINS 'invalid, expired' OR label CONTAINS 'creates a credential'"))
1073 .firstMatch.waitForExistence(timeout: 15), "bad-code refusal not surfaced")
10681074 }
10691075}
10701076
@@ -1488,8 +1494,9 @@ extension LiveSmokeUITests {
14881494
14891495 // Parity.org is an org page, so this also proves the org renderer
14901496 // runs on wiki content and not just READMEs.
1497 // Below the fold since the Architecture pages sort above it.
14911498 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")
14931500 parity.tap()
14941501 XCTAssertTrue(app.staticTexts
14951502 .containing(NSPredicate(format: "label CONTAINS 'surface'")).firstMatch