Commit d28cb55313

d28cb5531343b9c6287456788ba81d8ee584245a

parent: 79684292f4

Verified · cmc

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

Live suite: follow fixture and policy changes

- testAccountFlows: a key add or email verify through an expiring token
  is refused before validation (krz/gitbay 89dd0a3); accept either
  refusal as the server's text reaching the screen.
- testDiscoveryFlows: krz's description changed and its About pushes the
  repository list below the fold; wait for the navigation bar, then
  scroll to Repositories.
- testWikiFlows: the Architecture pages sort above Parity; scroll to it.

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