# ts-mitra-A-04 — §A.2 ACCOUNT_INACTIVE → terminal full-screen state # Spec ref: requirement/flow_mitra.mermaid.md §A.2 (403 ACCOUNT_INACTIVE branch). # # Verifies the inactive-mitra flow: # 1. Seed mitra row with is_active=false # 2. Reset OTP requests # 3. Drive S3a, request OTP # 4. Submit the correct OTP code → backend returns 403 ACCOUNT_INACTIVE # AFTER OTP verification succeeds (mitra.auth.routes.js L54-57) # 5. Screen routes to /auth/inactive # 6. PopScope(canPop: false) blocks system back appId: com.mybestie.mitra env: TEST_PHONE: "+628200000401" MITRA_DISPLAY_NAME: "Maestro Inactive" BACKEND_INTERNAL_URL: http://localhost:3001 --- - runScript: file: ../scripts/seed_mitra.js env: TEST_PHONE: ${TEST_PHONE} MITRA_DISPLAY_NAME: ${MITRA_DISPLAY_NAME} IS_ACTIVE: "false" BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} - runScript: file: ../scripts/reset_phone.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} - launchApp: clearState: true - extendedWaitUntil: visible: text: "(?s).*Halo Mitra Bestie.*" timeout: 10000 # S3a — request OTP. - tapOn: point: "50%, 53%" - inputText: "8200000401" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*masukin 6 digit kode.*" timeout: 10000 # Peek + submit correct code. - runScript: file: ../scripts/peek_otp.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} - inputText: ${output.OTP} # AccountInactive screen renders. - extendedWaitUntil: visible: text: "(?s).*akun belum aktif.*" timeout: 15000 - assertVisible: "(?s).*memverifikasi akun kamu.*" - assertVisible: "(?s).*pakai nomor lain.*" # Negative assertion: the home screen should NOT have rendered (token storage # should be empty — backend returned 403 without tokens before is_active gate). # Stage 2 removed the "Sesi Aktif" tile, so we assert on the post-Stage-2 # BestieHome status card marker instead. - assertNotVisible: "(?s).*Kamu lagi (ONLINE|OFFLINE).*" - assertNotVisible: "(?s).*(Ganti Status|Nyalain Status).*" # Note: system-back interception is intentionally NOT tested here — PopScope # on a GoRouter root route doesn't currently block the Android back key # because there's no Navigator route to pop. Tracked as a follow-up; the # AppBar has no back arrow either way so the in-app UX is correct.