36 lines
2.3 KiB
Markdown
36 lines
2.3 KiB
Markdown
# qa/ — re-runnable QA smokes (autonomous)
|
||
|
||
Durable, committed QA tooling so each round re-checks the fragile paths cheaply instead of by hand.
|
||
See `ClaudeQAPlan.md` (Pass E crash-triage, Pass F cold-start ownership, Definition of Done) for how these fit the run.
|
||
|
||
## entrypoint_smoke.sh — cold-start / entry-point launch integrity
|
||
The smoke that catches the **"app opens and immediately closes"** class (e.g. the splash-exit `iconView` NPE on a
|
||
notification cold-start). That class breaks **every** notification at once (shared cold-start path) and is **invisible to
|
||
`adb am start`** — only a REAL push tapped from the shade on a genuinely killed app reproduces it.
|
||
|
||
```bash
|
||
# both emulators; run after ANY change to MainActivity / splash / theme / manifest / nav / notifications, and every round
|
||
bash qa/entrypoint_smoke.sh emulator-5554 Y05AKO2IlTPMa0JQW1BiNIM0uzK2
|
||
bash qa/entrypoint_smoke.sh emulator-5556 imDjjOTTQvXGGjyUhUc5JSeHWkU2
|
||
```
|
||
Asserts each entry (launcher icon · each notification type tapped from a killed app · …) **opens AND stays** (process
|
||
alive, 0 FATAL, off the launcher). `PASS`/`FAIL`/`BLOCK`:
|
||
- **FAIL** = a real app crash (the bug). Pull the stack: `adb -s <serial> logcat -d | grep -E "FATAL EXCEPTION|getIconView"`.
|
||
- **BLOCK** = the push didn't reach the killed app (flaky emulator FCM / FcmRetry) — environmental, just rerun.
|
||
- Runtime ~3–7 min (FCM retries); run in the background and read the matrix. Exit 0 only if 0 FAIL.
|
||
|
||
## qa_push.js — send a real push (helper)
|
||
Sends a faithful `notification`+`data` FCM to a user's token so a killed app shows it and tapping cold-starts via the
|
||
real OS handover. **Use `am kill` (NOT `am force-stop`)** to kill — force-stopped apps are excluded from FCM.
|
||
|
||
```bash
|
||
NODE_PATH=functions/node_modules node qa/qa_push.js <uid> partner_started_game game_type=this_or_that
|
||
NODE_PATH=functions/node_modules node qa/qa_push.js <uid> partner_finished_game game_type=wheel # auto-resolves a completed session
|
||
NODE_PATH=functions/node_modules node qa/qa_push.js <uid> chat_message conversation_id=main
|
||
```
|
||
|
||
## Test couple (current emulators)
|
||
- coupleId `Xal3Kw3gjSdn0niERYKJ`
|
||
- QA (emulator-5554) `Y05AKO2IlTPMa0JQW1BiNIM0uzK2` · Sam (emulator-5556) `imDjjOTTQvXGGjyUhUc5JSeHWkU2`
|
||
- Admin SA JSON: `closer-app-22014-firebase-adminsdk-fbsvc-ed20bf6003.json` (gitignored; override path via `SA_JSON`).
|