- Customer: com.halobestie.client.client_app → com.mybestie - Mitra: com.halobestie.mitra.mitra_app → com.mybestie.mitra - iOS bundle IDs renamed to match (no .clientApp/.mitra camelCase legacy) Mechanical rename touches Android build.gradle/Manifest/MainActivity package, iOS pbxproj/Info.plist bundle IDs, Firebase configs (google-services.json + GoogleService-Info.plist + firebase_options.dart), new HaloBestie/Mitra launcher icons via flutter_launcher_icons (pubspec config + adaptive-icon resources + AppIcon imageset), and the appId references in every customer maestro flow + both .maestro/config.yaml files. brandLogoBg (#FF699F) added to halo_tokens for the launcher pink. Followup: re-register apps in Firebase consoles using the new package IDs; strategy memo at project-firebase-env-strategy. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
2.5 KiB
YAML
62 lines
2.5 KiB
YAML
# ts-customer-01-01 — When OS-level notification permission is denied,
|
|
# SHome1st renders the amber "notifikasi off" banner above the
|
|
# 'aku mau curhat' CTA.
|
|
# Spec ref: requirement/flow_customer.mermaid.md §1 — `NotifCheck → no →
|
|
# HomeBanner` (line 24-26 of the mermaid).
|
|
#
|
|
# Banner widget: home_screen.dart::_NotifDeniedBanner. Gating provider:
|
|
# notifPermissionStatusProvider (core/notifications/notif_permission.dart).
|
|
# The provider reads `permission_handler::Permission.notification.status`
|
|
# which, on Android 13+, reflects the runtime POST_NOTIFICATIONS state and
|
|
# on older Android reflects the app's notification-enabled toggle.
|
|
#
|
|
# Pre-requisite (manual setup):
|
|
# The test only exercises the "denied" branch. Disable notifications for
|
|
# the customer app BEFORE invoking maestro:
|
|
# - Android 13+: maestro's `permissions: { notifications: deny }` below
|
|
# handles this (POST_NOTIFICATIONS is a runtime permission).
|
|
# - Android 7-12 (incl. the API-24 dev AVD): the runtime permission
|
|
# doesn't exist, so the maestro `permissions:` block is a no-op.
|
|
# Instead, toggle Settings → Apps → Halo Bestie → Notifications →
|
|
# Off manually. This sets the system `NotificationManagerCompat`
|
|
# state which the app's `notif_permission.dart::readStatus`
|
|
# pre-check picks up. `clearState: true` below is safe — `pm clear`
|
|
# wipes app data but not the system-level notification toggle.
|
|
# The backend FCM path still fires regardless of this branch (the OS
|
|
# simply suppresses the notification); the banner is the only
|
|
# user-visible signal that they're missing alerts, which is what we
|
|
# assert below.
|
|
appId: com.mybestie
|
|
env:
|
|
TEST_PHONE: "+6281234567890"
|
|
BACKEND_INTERNAL_URL: http://localhost:3001
|
|
---
|
|
- runScript:
|
|
file: ../scripts/reset_phone.js
|
|
env:
|
|
TEST_PHONE: ${TEST_PHONE}
|
|
BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL}
|
|
- launchApp:
|
|
clearState: true
|
|
permissions:
|
|
notifications: deny
|
|
- extendedWaitUntil:
|
|
visible:
|
|
text: "Mulai"
|
|
timeout: 15000
|
|
- tapOn:
|
|
text: "Mulai"
|
|
retryTapIfNoChange: true
|
|
- extendedWaitUntil:
|
|
visible:
|
|
text: "(?s).*aku mau curhat.*"
|
|
timeout: 30000
|
|
|
|
# §1 NotifCheck=no → SHome1st banner. Text is the unique copy from
|
|
# _NotifDeniedBanner; the icon is decorative-only and not part of the
|
|
# a11y label.
|
|
- assertVisible: "(?s).*notifikasi off.*"
|
|
- assertVisible: "(?s).*kelewat chat dari bestie.*"
|
|
- assertVisible: "(?s).*nyalain.*"
|
|
- takeScreenshot: /tmp/notif_banner_design
|