feat: add mobile shell and unified search
Some checks failed
ci / 정본·보안·린트·타입·테스트 (push) Failing after 50s
ci / 워크스페이스 빌드 검증 (push) Has been skipped
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 20s
ci / .NET API 서버 테스트 (push) Successful in 12s
deploy-site / deploy (push) Successful in 39s
ci / 모바일 린트·타입·Jest (push) Failing after 3h10m31s

This commit is contained in:
Yun Chan 2026-09-28 23:23:36 +09:00
parent f505a03d34
commit 5ca3709b32
98 changed files with 5168 additions and 2093 deletions

View file

@ -50,28 +50,22 @@ name: Local paid admin hides ads and opens the role editor with bounded role cho
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- extendedWaitUntil:
visible:
id: dashboard-start-recording
id: record-fab
timeout: 45000
- scrollUntilVisible:
element:
text: "PRO"
direction: DOWN
timeout: 30000
visibilityPercentage: 50
- assertNotVisible:
id: free-tier-ad-slot
- takeScreenshot: admin-local-paid-admin-ad-hidden
- tapOn:
id: tab-settings
id: tab-more
retryTapIfNoChange: true
waitToSettleTimeoutMs: 2000
- extendedWaitUntil:
visible:
id: settings-screen
id: more-screen
timeout: 30000
- scrollUntilVisible:
element:

View file

@ -2,14 +2,14 @@ appId: com.d3ro.voice
name: Continue the same manager session and read the target user
---
- assertVisible:
id: dashboard-scroll
id: home-screen
- tapOn:
id: tab-settings
id: tab-more
retryTapIfNoChange: true
waitToSettleTimeoutMs: 2000
- extendedWaitUntil:
visible:
id: settings-screen
id: more-screen
timeout: 30000
- scrollUntilVisible:
element:

View file

@ -50,14 +50,8 @@ name: Local manager reads users and updates an existing subscription only
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- scrollUntilVisible:
element:
text: "PRO"
direction: DOWN
timeout: 30000
visibilityPercentage: 50
- assertNotVisible:
id: free-tier-ad-slot
- takeScreenshot: admin-local-manager-pro-session

View file

@ -2,14 +2,14 @@ appId: com.d3ro.voice
name: Continue the same ordinary session and prove Admin remains hidden
---
- assertVisible:
id: dashboard-scroll
id: home-screen
- tapOn:
id: tab-settings
id: tab-more
retryTapIfNoChange: true
waitToSettleTimeoutMs: 2000
- extendedWaitUntil:
visible:
id: settings-screen
id: more-screen
timeout: 30000
- scrollUntilVisible:
element:

View file

@ -50,7 +50,7 @@ name: Local ordinary free user hides Admin and shows the test ad slot
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- extendedWaitUntil:
visible:

View file

@ -50,23 +50,17 @@ name: Open a sensitive Admin list with a manager session before host-side downgr
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- scrollUntilVisible:
element:
text: "PRO"
direction: DOWN
timeout: 30000
visibilityPercentage: 50
- assertNotVisible:
id: free-tier-ad-slot
- tapOn:
id: tab-settings
id: tab-more
retryTapIfNoChange: true
waitToSettleTimeoutMs: 2000
- extendedWaitUntil:
visible:
id: settings-screen
id: more-screen
timeout: 30000
- scrollUntilVisible:
element:

View file

@ -50,23 +50,17 @@ name: Local super administrator promotes a manager to administrator
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- scrollUntilVisible:
element:
text: "PRO"
direction: DOWN
timeout: 30000
visibilityPercentage: 50
- assertNotVisible:
id: free-tier-ad-slot
- tapOn:
id: tab-settings
id: tab-more
retryTapIfNoChange: true
waitToSettleTimeoutMs: 2000
- extendedWaitUntil:
visible:
id: settings-screen
id: more-screen
timeout: 30000
- scrollUntilVisible:
element:

View file

@ -14,6 +14,12 @@ name: Authenticated mobile parity navigation and fail-closed billing
id: onboarding-language-en
- tapOn:
id: onboarding-audience-existing
- scrollUntilVisible:
element:
id: onboarding-skip
direction: DOWN
timeout: 15000
visibilityPercentage: 50
- tapOn:
id: onboarding-skip
- extendedWaitUntil:
@ -26,26 +32,32 @@ name: Authenticated mobile parity navigation and fail-closed billing
- tapOn:
id: login-password
- inputText: ${MOBILE_E2E_PASSWORD}
- hideKeyboard
- scrollUntilVisible:
element:
id: login-submit
direction: DOWN
timeout: 15000
visibilityPercentage: 50
- tapOn:
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- assertVisible:
id: free-tier-ad-slot
- takeScreenshot: authenticated-free-test-ad-slot
- tapOn:
id: tab-works
- assertVisible:
id: works-screen
- tapOn:
id: open-history
id: tab-records
- assertVisible:
id: history-search
- pressKey: BACK
- tapOn:
id: tab-record
id: record-fab
- assertVisible:
id: record-fab-menu
- tapOn:
id: record-fab-dictation
- assertVisible:
id: record-screen
- assertVisible:
@ -53,7 +65,7 @@ name: Authenticated mobile parity navigation and fail-closed billing
- tapOn:
id: record-start
- tapOn:
text: "Don.t allow"
text: 'Don.t allow'
optional: true
- extendedWaitUntil:
visible:
@ -75,13 +87,30 @@ name: Authenticated mobile parity navigation and fail-closed billing
id: record-start
timeout: 15000
- tapOn:
id: tab-talk
id: tab-more
- assertVisible:
id: more-screen
- scrollUntilVisible:
element:
id: open-talk
direction: DOWN
visibilityPercentage: 50
- tapOn:
id: open-talk
- assertVisible:
id: talk-messages
- assertVisible:
id: talk-ptt
- pressKey: BACK
- assertVisible:
id: more-screen
- scrollUntilVisible:
element:
id: more-open-settings
direction: DOWN
visibilityPercentage: 50
- tapOn:
id: tab-settings
id: more-open-settings
- assertVisible:
id: settings-screen
- scrollUntilVisible:
@ -121,22 +150,19 @@ name: Authenticated mobile parity navigation and fail-closed billing
- pressKey: BACK
- assertVisible:
id: settings-screen
- tapOn:
id: tab-works
- pressKey: BACK
- assertVisible:
id: works-screen
- scrollUntilVisible:
element:
id: open-meetings
direction: DOWN
visibilityPercentage: 50
id: more-screen
- tapOn:
id: open-meetings
id: tab-meetings
- extendedWaitUntil:
visible:
id: meetings-search
timeout: 30000
- pressKey: BACK
- tapOn:
id: tab-more
- assertVisible:
id: more-screen
- scrollUntilVisible:
element:
id: open-templates
@ -247,5 +273,5 @@ name: Authenticated mobile parity navigation and fail-closed billing
id: actions-screen
- pressKey: BACK
- assertVisible:
id: works-screen
id: more-screen
- takeScreenshot: authenticated-parity-complete

View file

@ -50,7 +50,7 @@ name: Local authenticated session for external incoming-media E2E
id: login-submit
- extendedWaitUntil:
visible:
id: dashboard-scroll
id: home-screen
timeout: 45000
- assertNotVisible:
id: free-tier-ad-slot

View file

@ -0,0 +1,120 @@
appId: com.d3ro.voice
name: Mobile shell and unified search local proof
---
- launchApp:
clearState: true
stopApp: true
permissions:
all: allow
- extendedWaitUntil:
visible:
id: onboarding-screen
timeout: 30000
- tapOn:
id: onboarding-language-en
- tapOn:
id: onboarding-audience-existing
- scrollUntilVisible:
element:
id: onboarding-skip
direction: DOWN
timeout: 15000
visibilityPercentage: 50
- tapOn:
id: onboarding-skip
- extendedWaitUntil:
visible:
id: login-email
timeout: 30000
- tapOn:
id: login-email
- inputText: ${MOBILE_E2E_EMAIL}
- tapOn:
id: login-password
- inputText: ${MOBILE_E2E_PASSWORD}
- hideKeyboard
- scrollUntilVisible:
element:
id: login-submit
direction: DOWN
timeout: 15000
visibilityPercentage: 50
- tapOn:
id: login-submit
- extendedWaitUntil:
visible:
id: home-screen
timeout: 45000
- assertVisible:
id: tab-home
- assertVisible:
id: tab-records
- assertVisible:
id: tab-meetings
- assertVisible:
id: tab-more
- takeScreenshot: navigation-shell-home
- tapOn:
id: record-fab
- assertVisible:
id: record-fab-menu
- takeScreenshot: navigation-shell-record-menu
- pressKey: BACK
- assertNotVisible:
id: record-fab-menu
- assertVisible:
id: home-open-unified-search
- tapOn:
id: home-open-unified-search
- extendedWaitUntil:
visible:
id: unified-search-input
timeout: 15000
- tapOn:
id: unified-search-input
- inputText: ${MOBILE_E2E_QUERY}
- extendedWaitUntil:
visible:
id: unified-search-open-record-${MOBILE_E2E_RECORD_ID}
timeout: 30000
- assertVisible:
id: unified-search-open-meeting-${MOBILE_E2E_MEETING_ID}
- takeScreenshot: unified-search-results
- tapOn:
id: unified-search-open-record-${MOBILE_E2E_RECORD_ID}
- extendedWaitUntil:
visible:
id: history-detail-favorite
timeout: 30000
- takeScreenshot: unified-search-record-detail
- pressKey: BACK
- extendedWaitUntil:
visible:
id: unified-search-open-meeting-${MOBILE_E2E_MEETING_ID}
timeout: 15000
- tapOn:
id: unified-search-open-meeting-${MOBILE_E2E_MEETING_ID}
- extendedWaitUntil:
visible:
id: meeting-detail-title
timeout: 30000
- takeScreenshot: unified-search-meeting-detail
- pressKey: BACK
- pressKey: BACK
- extendedWaitUntil:
visible:
id: home-screen
timeout: 15000
- tapOn:
id: tab-records
- assertVisible:
id: history-search
- tapOn:
id: tab-meetings
- assertVisible:
id: meetings-search
- tapOn:
id: tab-more
- assertVisible:
id: more-screen
- takeScreenshot: navigation-shell-more