# ts-mitra-A-06 — §A.1 navigate back from S3b, tap "kirim kode" again # Spec ref: requirement/flow_mitra.mermaid.md §A.1 # # Regression: a previous fix to deduplicate OTP-screen pushes (login_screen's # listener was firing twice on resend) accidentally blocked the second push # entirely when the user navigated back to S3a manually. Symptom: tapping # "kirim kode" the second time did nothing — request fired, but no /otp # navigation. # # Root cause: the listener guarded on `prev` state being non-OtpSentData, # which fails on retry because AsyncLoading retains the previous OtpSentData # value. Fix: guard on `GoRouterState.matchedLocation == '/login'` instead. # # This test exercises the full path: fresh login → /otp → back to S3a → # kirim kode again → /otp. appId: com.mybestie.mitra env: TEST_PHONE: "+628200000601" MITRA_DISPLAY_NAME: "Maestro Retry" 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: "true" 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: 15000 # First request → arrives on S3b. - tapOn: point: "50%, 53%" - inputText: "8200000601" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*masukin 6 digit kode.*" timeout: 10000 # Back to S3a via system back. - hideKeyboard - pressKey: Back - extendedWaitUntil: visible: text: "(?s).*Halo Mitra Bestie.*" timeout: 8000 # Reset rate-limit so the second OTP request isn't blocked by cooldown. - runScript: file: ../scripts/reset_phone.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} # Second tap — phone field still holds the previous input, so just tap CTA. - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*masukin 6 digit kode.*" timeout: 10000