Scaffold Maestro E2E flows + CI workflow for iOS SDKPlayground#1
Merged
Conversation
Mirrors ethora-sample-android/.maestro/ for the SDKPlayground iOS
app. Same 19 flows, same numbering, same intent — they resolve
nodes by accessibility identifier (set on the SDK side via
ethora-sdk-swift PR #6) so a single Maestro flow exercises the
same scenario on both platforms.
Files:
.maestro/
config.yaml project-level Maestro config
README.md Layer-2 testing intro, coverage table,
cross-platform parity notes
fixtures/test-users.yaml
assets/test-image.png 8x8 PNG seeded into Photos library by CI
scripts/sendAsBob.js same JS helper as Android — Maestro's
http.post is platform-neutral
scripts/sendPushIntent.sh iOS analog of Android's adb am start
wrapper, uses xcrun simctl push
flows/01..20-*.yaml 19 flows (12 reserved for typing-indicator)
.github/workflows/maestro.yml
GitHub Actions workflow on macos-latest:
- selects Xcode, installs xcodegen + Maestro
- generate_xcodeproj.sh + xcodebuild for SDKPlayground
- boots iPhone 15 simulator + installs the .app
- seeds test-image.png into Photos via simctl addmedia
- writes ETHORA_* defaults via simctl spawn defaults write
- runs flows 01-07 + 09-20, then sendPushIntent.sh + flow 08
- matrix on iOS [17.5, 18.0] for release tags, single 18.0 on PRs
- uploads Maestro recordings on failure
README.md
"Testing" section with the 19-flow coverage table and a link to
the matching Android sample. Cross-references the SDK README so
contributors know where Layer 1 vs Layer 2 lives.
iOS-specific differences from the Android equivalents documented
in .maestro/README.md:
- appId: com.ethora.SDKPlayground (vs com.ethora on Android)
- Tab labels are title-case "Setup"/"Chat"/"Logs" (Android
segmented control uses uppercase)
- System search bar via SwiftUI's .searchable, swipe-down to reveal
- Push delivery via xcrun simctl push (Android uses adb am start)
- Test image seeded via simctl addmedia (Android uses adb push +
MEDIA_SCANNER_SCAN_FILE broadcast)
Brief Layer 1 / Layer 2 mapping table showing how this iOS sample's Maestro flows fit into the 4-platform stack and how selector strings couple them across iOS accessibilityIdentifier / Android testTag / Web data-testid.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
iOS analog of `ethora-sample-android` PR #2. Mirrors the same 19 Maestro YAML flows with the same numbering and intent — resolving UI nodes by accessibility identifier (set on the SDK side via `ethora-sdk-swift` PR #6) so a single Maestro flow exercises the same scenario on both platforms.
What runs here
(Flow 12 reserved for typing-indicator.)
CI workflow
`.github/workflows/maestro.yml` runs on `macos-latest` with the iOS Simulator:
iOS matrix on release tags: `[17.5, 18.0]`. Single `18.0` on PRs.
iOS-specific differences from Android equivalents
These are documented in `.maestro/README.md` so future contributors know where to look when something is iOS-only.
Required repo secrets
```
ETHORA_API_BASE_URL https://api.chat-qa.ethora.com/v1
ETHORA_APP_ID
ETHORA_APP_TOKEN
MAESTRO_TEST_EMAIL alice@ethora.com
MAESTRO_TEST_PASSWORD TestPass123
MAESTRO_TEST_USER_JWT client-flow JWT for 02-login-jwt
MAESTRO_TEST_ROOM_JID a known MUC room JID alice belongs to
MAESTRO_TEST_BOB_JWT bob's user-session JWT (sendAsBob.js)
MAESTRO_TEST_APPB_* second-app credentials for 10-switch-app
```
All values target chat-qa, never prod.
Test plan