# ts-mitra-A-07 — §A.2 CODE_INVALID inline error (non-6-digit submit) # Spec ref: requirement/flow_mitra.mermaid.md §A.2 (422 CODE_INVALID branch) # # The OTP screen auto-submits when the 6th digit lands (otp_screen.dart::_onChanged). # The only way to surface a CODE_INVALID server response is to bypass the 6-digit # auto-submit by tapping the "verifikasi" CTA with fewer than 6 digits — but the # CTA is also gated on _otp.length != _kOtpLength (line 413), so it won't fire. # # What we CAN test deterministically: that a wrong-length input never advances # off S3b — the CTA stays disabled and no error dialog/snackbar appears. This # proves the local guard against CODE_INVALID round-trips. Backend CODE_INVALID # (422) handling stays exercised by ts-mitra-A-08 via the CODE_MISMATCH branch # (which uses 6 wrong digits and explicitly returns 401, the relevant inline # error path). appId: com.mybestie.mitra env: TEST_PHONE: "+628200000a07" MITRA_DISPLAY_NAME: "Maestro Code Invalid" 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: 10000 # S3a → S3b - tapOn: point: "50%, 53%" - inputText: "8200000a07" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*masukin 6 digit kode.*" timeout: 10000 # Type only 5 digits — auto-submit (which fires on 6) does NOT fire and the # "verifikasi" CTA stays disabled. - inputText: "12345" # Negative: no advance to /home, no error dialog. - assertNotVisible: "(?s).*Kamu lagi (ONLINE|OFFLINE).*" - assertNotVisible: "(?s).*Terlalu banyak percobaan.*" - assertNotVisible: "(?s).*Kode salah.*" # The verifikasi CTA still reads "verifikasi" (not "memproses...") proving the # notifier was never invoked. - assertVisible: "(?s).*verifikasi.*" - takeScreenshot: ts-mitra-A-07-code-invalid-no-advance