# ts-mitra-A-05 — §A.1 phone-format normalization # Spec ref: requirement/flow_mitra.mermaid.md §A.1 # # Indonesian users type phone numbers in many shapes. The login screen's # _subscriberDigits() in login_screen.dart must normalize ALL of these to # the same +628200000501 (subscriber digits = 8200000501): # # 8200000501 — subscriber only # 08200000501 — local format with leading 0 # 628200000501 — country code without + # +628200000501 — full E.164 # 0628200000501 — typo combo with leading 0 before country code # # Strategy: seed ONE mitra at +628200000501. For each variant, do a fresh # launchApp clearState, type the variant, tap "kirim kode", and assert the # S3b screen shows the correctly normalized phone "+628200000501". A fresh # launch per variant is more reliable than back-navigation across maestro # / IME / keyboard state. appId: com.mybestie.mitra env: TEST_PHONE: "+628200000501" MITRA_DISPLAY_NAME: "Maestro Variants" 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} # ── Variant 1: 8xxxxxxxxx (subscriber only, 10 digits) ── - 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 - tapOn: point: "50%, 53%" - inputText: "8200000501" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*\\+628200000501.*" timeout: 10000 # ── Variant 2: 08xxxxxxxxx (local format with leading 0) ── - 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 - tapOn: point: "50%, 53%" - inputText: "08200000501" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*\\+628200000501.*" timeout: 10000 # ── Variant 3: 628xxxxxxxxx (country code without +) ── - 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 - tapOn: point: "50%, 53%" - inputText: "628200000501" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*\\+628200000501.*" timeout: 10000 # ── Variant 4: +628xxxxxxxxx (full E.164 with +) ── - 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 - tapOn: point: "50%, 53%" - inputText: "+628200000501" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*\\+628200000501.*" timeout: 10000 # ── Variant 5: 0628xxxxxxxxx (typo combo) ── - 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 - tapOn: point: "50%, 53%" - inputText: "0628200000501" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*\\+628200000501.*" timeout: 10000