User-runnable lokal via maestro CLI oder Studio (GUI). Ahmed-agent built. Neue flows (.maestro/): - auth/email-signin.yaml (admin@rebreak.org login via env-vars, NOT hardcoded) - profile/view-and-edit.yaml (avatar tap → edit → save → verify) - profile/demographics.yaml (accordion → fill 3 fields → verify save) - settings/dark-theme.yaml (Settings → Theme → Dark → verify) - urge/sos-flow.yaml (start SOS → atemübung → finish → rating) - community/create-post.yaml (compose → publish) SETUP.md ergänzt: install, prerequisites, env-vars, troubleshooting. TODO_TESTIDS.md (17 missing testIDs, 7 high-prio): - AppHeader: header-avatar-btn (alle flows betroffen, aktuell coordinate-fallback) - urge: sos-send-btn (SOS-flow blocked ohne) - profile/edit: nickname-input, save-btn GH-Actions template (.github/workflows/maestro-cloud.yml) — NICHT aktiv, braucht User-OK + EAS-secrets. User runs: maestro test apps/rebreak-native/.maestro/auth/email-signin.yaml \ --env=E2E_TEST_USER=admin --env=E2E_TEST_PASSWORD=<from Infisical> maestro studio # GUI Stolperfalle: charioanouar (Google OAuth) funktioniert nicht — admin-account nutzen. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
105 lines
4.2 KiB
Markdown
105 lines
4.2 KiB
Markdown
# TODO: testID additions needed for stable Maestro selectors
|
|
|
|
These are components that need `testID="..."` added by the UI agent (rebreak-native-ui domain).
|
|
Ahmed does NOT add these — list is for coordination.
|
|
|
|
Priority: HIGH = flow currently uses coordinate fallback or is skipped.
|
|
Priority: MEDIUM = flow works via text selector but will break on i18n locale change.
|
|
Priority: LOW = nice to have, flow is stable enough without it.
|
|
|
|
---
|
|
|
|
## HIGH — Coordinate fallbacks (breaks on layout change)
|
|
|
|
| Component | File | Recommended testID | Used by flow |
|
|
|---|---|---|---|
|
|
| Avatar Pressable (menu trigger) | `components/AppHeader.tsx` line ~109 | `header-avatar-btn` | all flows that open dropdown |
|
|
| Nickname edit Pressable in ProfileHeader | `components/profile/ProfileHeader.tsx` | `profile-edit-nickname-btn` | `profile/view-and-edit.yaml` |
|
|
| Photo/avatar area tap in ProfileHeader | `components/profile/ProfileHeader.tsx` | `profile-edit-avatar-btn` | `profile/view-and-edit.yaml` |
|
|
|
|
AppHeader snippet (line ~109):
|
|
```tsx
|
|
<Pressable
|
|
testID="header-avatar-btn" // <-- add this
|
|
onPress={() => setMenuOpen(true)}
|
|
...
|
|
>
|
|
```
|
|
|
|
---
|
|
|
|
## HIGH — SOS screen send button (no text, no testID)
|
|
|
|
| Component | File | Recommended testID | Used by flow |
|
|
|---|---|---|---|
|
|
| Send/submit Pressable in chat input area | `app/urge.tsx` | `sos-send-btn` | `urge/sos-flow.yaml` |
|
|
|
|
The send icon Pressable has no text and no testID. Current flow cannot reliably tap it.
|
|
|
|
---
|
|
|
|
## HIGH — Demographics field row Pressables
|
|
|
|
Each row in DemographicsAccordion that opens a WheelPickerModal is a Pressable with no testID.
|
|
Currently matched via hardcoded German label text (stable, but fragile if labels change).
|
|
|
|
| Field | File | Recommended testID |
|
|
|---|---|---|
|
|
| Geburtsjahr row | `components/profile/DemographicsAccordion.tsx` | `demographics-birth-year-row` |
|
|
| Geschlecht row | `components/profile/DemographicsAccordion.tsx` | `demographics-gender-row` |
|
|
| Familienstand row | `components/profile/DemographicsAccordion.tsx` | `demographics-marital-row` |
|
|
| Berufsstatus row | `components/profile/DemographicsAccordion.tsx` | `demographics-employment-row` |
|
|
| Bundesland row | `components/profile/DemographicsAccordion.tsx` | `demographics-bundesland-row` |
|
|
| Stadt / Landkreis row | `components/profile/DemographicsAccordion.tsx` | `demographics-city-row` |
|
|
|
|
---
|
|
|
|
## MEDIUM — Auth screen inputs (currently matched via i18n placeholder text)
|
|
|
|
| Component | File | Recommended testID | Risk |
|
|
|---|---|---|---|
|
|
| Email TextInput | `app/(auth)/signin.tsx` line ~139 | `auth-email-input` | breaks if de.json placeholder changes |
|
|
| Password TextInput | `app/(auth)/signin.tsx` line ~151 | `auth-password-input` | same |
|
|
| Submit Pressable | `app/(auth)/signin.tsx` line ~173 | `auth-signin-btn` | breaks if t('auth.signin') changes |
|
|
|
|
---
|
|
|
|
## MEDIUM — ProfileEdit screen nickname input
|
|
|
|
| Component | File | Recommended testID |
|
|
|---|---|---|
|
|
| Nickname TextInput | `app/profile/edit.tsx` line ~295 | `profile-nickname-input` |
|
|
| Save Pressable | `app/profile/edit.tsx` line ~154 | `profile-save-btn` |
|
|
|
|
---
|
|
|
|
## MEDIUM — ComposeCard share button
|
|
|
|
| Component | File | Recommended testID | Risk |
|
|
|---|---|---|---|
|
|
| Share/Teilen Pressable | `components/ComposeCard.tsx` line ~165 | `compose-share-btn` | breaks if t('community.share') changes |
|
|
|
|
---
|
|
|
|
## LOW — Settings screen rows
|
|
|
|
Theme selection uses @react-native-menu/menu (native iOS UIMenu).
|
|
Maestro may not interact with native UIMenu popovers — coordinate taps on the anchor
|
|
Pressable are the only option without testID. If the native menu approach proves unreliable,
|
|
a fallback custom picker with testID would be needed.
|
|
|
|
| Component | File | Recommended testID |
|
|
|---|---|---|
|
|
| Theme menu anchor Pressable | `app/settings.tsx` | `settings-theme-picker` |
|
|
| Language menu anchor Pressable | `app/settings.tsx` | `settings-language-picker` |
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
- Adding testID to a Pressable/TextInput does NOT require any logic change — it is a
|
|
metadata prop only. Safe for UI agent to add without Ahmed review.
|
|
- RiveAvatar in urge.tsx: no testID needed — Maestro cannot assert animation states.
|
|
SOS screen is verified via the chat TextInput placeholder instead.
|
|
- NotificationsDropdown: not tested in current flow suite — no testID needed yet.
|