# 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.
