The phone reads the thread — comments arrive on the card's read view, posting and editing behind transactional sheets
The comment thread renders read-only under the card's body (author line, Markdown body through CardBodyView, read-only paperclip rows), read outside the snapshot and re-read on every walk landing via BoardSession.snapshotGeneration. Add Comment posts through the Mac composer's own draft-then-rename bracket — seeding from the card's single synced draft so a thought started on the Mac finishes here — and each row's context menu opens the same sheet in edit mode. Both commit on their trailing button or not at all: the phone's transactional model, dirty-Cancel confirmation and swipe-dismiss disabled while dirty included. UI-tested end to end with disk assertions. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -194,6 +194,32 @@ extension XCUIApplication {
|
||||
confirm.tap()
|
||||
}
|
||||
|
||||
/// Boards → the fixture's first lane → its first card, landing on `CardDetailScreen`'s read
|
||||
/// view. Shared navigation boilerplate for every test that starts on a card.
|
||||
@MainActor
|
||||
func navigateToFirstCard() {
|
||||
let boardRow = element(labelContaining: RichBoard.title)
|
||||
XCTAssertTrue(
|
||||
boardRow.waitForExistence(timeout: Self.uiTimeout),
|
||||
"the \"\(RichBoard.title)\" row never appeared — check the fixture copy or the first scan"
|
||||
)
|
||||
boardRow.tap()
|
||||
|
||||
let laneRow = element(labelContaining: RichBoard.firstLane)
|
||||
XCTAssertTrue(
|
||||
laneRow.waitForExistence(timeout: Self.uiTimeout),
|
||||
"the \"\(RichBoard.firstLane)\" lane row never appeared"
|
||||
)
|
||||
laneRow.tap()
|
||||
|
||||
let cardRow = element(labelContaining: RichBoard.firstLaneFirstCard)
|
||||
XCTAssertTrue(
|
||||
cardRow.waitForExistence(timeout: Self.uiTimeout),
|
||||
"the \"\(RichBoard.firstLaneFirstCard)\" card row never appeared"
|
||||
)
|
||||
cardRow.tap()
|
||||
}
|
||||
|
||||
/// Scrolls the frontmost view upward, a little at a time, until `element` is hittable or
|
||||
/// `maxAttempts` is exhausted. A `Form`/`List` does not auto-scroll to reveal what a test asks
|
||||
/// for, and this suite's Settings screen puts the About section — everything
|
||||
|
||||
Reference in New Issue
Block a user