# ts-mitra-2-01 — §2 Undangan: Curhat Baru tab empty state # Spec ref: requirement/flow_mitra.mermaid.md §2 + figma BestieInvites (v4.jsx) # # Walks: login → home → tap Chat tab in BestieTabBar → assert Undangan # screen renders, two tab labels visible, Curhat Baru is the default active # tab and shows the empty state copy. # # This test does NOT fire a customer blast — the goal is the empty-state # layout. ts-mitra-2-03 covers the populated case. appId: com.mybestie.mitra env: TEST_PHONE: "+628200000801" MITRA_DISPLAY_NAME: "Maestro Undangan Empty" 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 - tapOn: point: "50%, 53%" - inputText: "8200000801" - tapOn: "(?s).*kirim kode.*" - extendedWaitUntil: visible: text: "(?s).*masukin 6 digit kode.*" timeout: 10000 - runScript: file: ../scripts/peek_otp.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} - inputText: ${output.OTP} - extendedWaitUntil: visible: text: "(?s).*Kamu lagi (ONLINE|OFFLINE).*" timeout: 15000 # Tap Chat tab in the bottom BestieTabBar. The label text is "Chat" — the # Home variant doesn't render that string elsewhere on screen so the regex # match is unique. - tapOn: "(?s).*Chat.*" # Undangan screen renders with both tabs visible. Default active tab is # Curhat Baru → empty state copy is visible. - extendedWaitUntil: visible: text: "(?s).*Undangan.*" timeout: 8000 - assertVisible: text: "(?s).*Curhat Baru.*" - assertVisible: text: "(?s).*Perpanjang Curhat.*" - assertVisible: text: "(?s).*Belum ada undangan masuk.*" - takeScreenshot: ts-mitra-2-01-curhat-baru-empty