# Stage 6 acceptance: drive a live chat session through the countdown UX # in one run. # # Flow: # 1. Customer is on the chat screen of an ACTIVE session (run flow 03 first). # 2. Force expires_at = now + 175s → backend fires `session_warning` at 175s # (180s threshold, fudge 5s for clock drift) within ~1s. # 3. Verify the 3-min snackbar copy renders. # 4. Force expires_at = now + 90s → timer pill flips to danger styling at # remaining <= 120s (well within the 90s window). # 5. Force expires_at = now + 0s → expired banner appears above input bar. # # Pre-req: # 1. A live chat session is on screen (paired + active). The simplest way is # to chain this after flow 03_payment_to_chat_happy.yaml. # 2. Backend reachable at BACKEND_INTERNAL_URL with NODE_ENV != 'production'. # # Run (chained): # maestro test client_app/.maestro/flows/03_payment_to_chat_happy.yaml \ # client_app/.maestro/flows/06_chat_countdown.yaml appId: ${APP_ID_ANDROID} env: BACKEND_INTERNAL_URL: http://localhost:3001 --- - launchApp: clearState: false # Step 0: assert we're already on the chat screen (input hint is the landmark). - extendedWaitUntil: visible: text: "Ketik Pesan" timeout: 10000 # Step 1: force expires_at to 175s — fires the 3-min warning within ~1s. - runScript: file: ../scripts/force_session_expires_at.js env: BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} SECONDS_FROM_NOW: "175" # Step 2: verify the 3-min snackbar. - extendedWaitUntil: visible: text: "sisa 3 menit lagi" timeout: 5000 # Step 3: force expires_at to 90s — last-2-min danger pill territory. - runScript: file: ../scripts/force_session_expires_at.js env: BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} SECONDS_FROM_NOW: "90" # Step 4: assert the danger-styled timer pill renders. The pill content is a # minutes-and-seconds string ("1m Xd"); we only assert the unit suffix here # because the exact seconds drift between assertion and render. - extendedWaitUntil: visible: text: "1m" timeout: 5000 # Step 5: force expires_at to 0s — expired banner appears. - runScript: file: ../scripts/force_session_expires_at.js env: BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} SECONDS_FROM_NOW: "0" # Step 6: verify the floating expired banner + perpanjang CTA. - extendedWaitUntil: visible: text: "waktu curhat habis" timeout: 8000 - assertVisible: "perpanjang"