# Smoke test: cold-start onboarding, registers a new customer via the # anonymity-disabled force-register path, lands on home screen. # # Exercises (in order): onboarding carousel -> welcome -> display name -> # force-register (because anonymity_enabled=false in dev) -> OTP via peek # endpoint -> home. # # Run: # maestro test client_app/.maestro/flows/01_smoke.yaml # # Pre-req: client_app debug APK installed, backend reachable at # BACKEND_URL/BACKEND_INTERNAL_URL, NODE_ENV != 'production' (so the # /internal/_test/peek-otp + /internal/_test/reset-phone routes register). appId: com.mybestie env: TEST_PHONE: "+628155556677" BACKEND_INTERNAL_URL: http://localhost:3001 --- # Wipe any prior state for TEST_PHONE so repeated runs don't trip cooldowns # or hit IDENTITY_CONFLICT on a previously-claimed customer row. - runScript: file: ../scripts/reset_phone.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} - launchApp: clearState: true - extendedWaitUntil: visible: text: "Mulai" timeout: 15000 # onboarding carousel auto-advances; "Mulai" appears on slide 3 - tapOn: text: "Mulai" retryTapIfNoChange: true - extendedWaitUntil: visible: text: "Lanjut sebagai Tamu" timeout: 10000 - tapOn: text: "Lanjut sebagai Tamu" retryTapIfNoChange: true - extendedWaitUntil: visible: text: "Nama panggilan" timeout: 10000 - tapOn: text: "Nama panggilan" - inputText: "Maestro" - hideKeyboard - tapOn: text: "Lanjut" retryTapIfNoChange: true # Force-register kicks in (anonymity_enabled=false in dev DB) - extendedWaitUntil: visible: text: "Verifikasi Akun" timeout: 15000 - tapOn: text: "Nomor HP" - inputText: ${TEST_PHONE} - hideKeyboard - tapOn: text: "Kirim OTP" retryTapIfNoChange: true - extendedWaitUntil: visible: text: "Masukkan OTP" timeout: 15000 # Pull the stub-generated OTP code from the in-memory map on the backend - runScript: file: ../scripts/peek_otp.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} # inputText fills the autofocused first box; Flutter's onChanged advances # focus per char, so all 6 digits land in the right boxes and auto-submit. - inputText: ${output.OTP} # Post-OTP, force-register flow lands on /auth/set-name (anonymous display # name doesn't carry to the upgraded row). Wait for OTP screen to fade, # then re-fill display name and continue to home. - extendedWaitUntil: notVisible: text: "Masukkan OTP" timeout: 15000 - extendedWaitUntil: visible: text: "Nama panggilan" timeout: 10000 - tapOn: text: "Nama panggilan" - inputText: "Maestro" - hideKeyboard - tapOn: text: "Lanjut" retryTapIfNoChange: true - extendedWaitUntil: visible: text: "Mulai Curhat" timeout: 20000