Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/scripts/run_maestro_suite.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ suite_path="$1"
suite_name="$2"
app_id="$3"

if [[ -z "${USER_PASSWORD:-}" ]]; then
echo "USER_PASSWORD is required for auth Maestro suites. Set MAESTRO_USER_PASSWORD secret in GitHub Actions." >&2
exit 1
fi
Comment thread
kongwoojin marked this conversation as resolved.

mkdir -p recordings debug-output .maestro/.generated

wrapper_flow=".maestro/.generated/${suite_name}_recorded.yaml"
Expand Down Expand Up @@ -44,6 +49,7 @@ record_args=(
--local
--debug-output "$debug_output"
-e "APP_ID=$app_id"
-e "USER_PASSWORD=${USER_PASSWORD:-}"
"$wrapper_flow"
"$video_output"
)
Expand Down
19 changes: 12 additions & 7 deletions .github/workflows/maestro.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ on:
jobs:
maestro-tests:
runs-on: ubuntu-latest
timeout-minutes: 120
timeout-minutes: 180
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev

steps:
- uses: actions/checkout@v4
Expand All @@ -33,9 +33,12 @@ jobs:
- name: Update Firebase
env:
FIREBASE: ${{ secrets.FIREBASE }}
FIREBASE_STAGE: ${{ secrets.FIREBASE_STAGE }}
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
run: |
echo "$FIREBASE" | base64 -di > ./koin/google-services.json
mkdir -p ./koin/src/qa
echo "$FIREBASE" | base64 -di > ./koin/google-services.json
echo "$FIREBASE_STAGE" | base64 -di > ./koin/src/qa/google-services.json
echo "$GOOGLE_CREDENTIALS" | base64 -di > ./google-credentials.json
for file in $(find . -name 'google-services.json')
do
Expand All @@ -46,8 +49,8 @@ jobs:
echo $file
done

- name: Build release APK with Gradle
run: ./gradlew koin:assembleRelease
- name: Build QA APK with Gradle
run: ./gradlew koin:assembleQa

- name: Enable KVM group perms
run: |
Expand Down Expand Up @@ -94,9 +97,11 @@ jobs:
mkdir -p recordings debug-output
adb uninstall in.koreatech.koin || true
adb uninstall in.koreatech.koin.dev || true
adb install -r koin/build/outputs/apk/release/koin-release.apk
adb install -r koin/build/outputs/apk/qa/koin-qa.apk
chmod +x .github/scripts/run_maestro_suite.sh
bash .github/scripts/run_maestro_suite.sh ".maestro/suites/student_guest_smoke.yaml" "student_guest_smoke" "$APP_ID"
bash .github/scripts/run_maestro_suite.sh ".maestro/suites/student_smoke.yaml" "student_smoke" "$APP_ID"
env:
USER_PASSWORD: ${{ secrets.MAESTRO_USER_PASSWORD }}

- name: Upload Maestro test results
if: always()
Expand Down
15 changes: 15 additions & 0 deletions .maestro/common/dismiss_banner.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin.dev
---
- runFlow:
when:
visible:
text: "닫기"
commands:
- tapOn:
text: "일주일 동안 그만 보기"
optional: true
- tapOn:
text: "닫기"
optional: true
14 changes: 8 additions & 6 deletions .maestro/common/launch_app.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- stopApp
- launchApp:
permissions:
notifications: allow
- waitForAnimationToEnd:
timeout: 5000
Comment thread
kongwoojin marked this conversation as resolved.
- openLink: "koin://main/navigation"
- waitForAnimationToEnd:
timeout: 15000
- tapOn:
text: "닫기"
optional: true
timeout: 5000
- runFlow: dismiss_banner.yaml
29 changes: 29 additions & 0 deletions .maestro/common/login.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin.dev
---
- launchApp:
clearState: true
permissions:
notifications: allow
- waitForAnimationToEnd:
timeout: 5000
- runFlow: dismiss_banner.yaml
- openLink: "koin://login/navigation"
- extendedWaitUntil:
visible: "로그인"
timeout: 15000
- tapOn: "아이디(Koreatech ID/전화번호)"
Comment thread
kongwoojin marked this conversation as resolved.
- inputText: "androidqa"
- hideKeyboard
- tapOn: "비밀번호"
- inputText: "${USER_PASSWORD}"
- hideKeyboard
- tapOn: "로그인"
- waitForAnimationToEnd:
timeout: 5000
- runFlow: dismiss_banner.yaml
- extendedWaitUntil:
visible: "게시판"
timeout: 20000
- assertVisible: "게시판"
11 changes: 11 additions & 0 deletions .maestro/common/logout.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin.dev
---
- runFlow: open_drawer.yaml
- tapOn:
id: "${APP_ID}:id/navi_item_login_or_logout"
- extendedWaitUntil:
visible: "로그인"
timeout: 10000
- assertVisible: "로그인"
12 changes: 9 additions & 3 deletions .maestro/common/open_drawer.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: launch_app.yaml
- extendedWaitUntil:
visible:
id: "${APP_ID}:id/button_category"
timeout: 15000
- tapOn:
id: "${APP_ID}:id/button_category"
- waitForAnimationToEnd:
timeout: 5000
- extendedWaitUntil:
visible:
id: "${APP_ID}:id/navi_item_setting"
timeout: 10000
2 changes: 1 addition & 1 deletion .maestro/guest/article.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://article/navigation"
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/auth_find_id.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://findid/navigation"
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/auth_find_password.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://findpassword/navigation"
Expand Down
36 changes: 35 additions & 1 deletion .maestro/guest/auth_sign_in.yaml
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://login/navigation"
- extendedWaitUntil:
visible: "로그인"
timeout: 15000

- assertVisible: "아이디(Koreatech ID/전화번호)"
- assertVisible: "비밀번호"
- assertVisible: "로그인"
- assertVisible: "회원가입"
- assertVisible: "아이디 찾기"
- assertVisible: "비밀번호 찾기"
- assertVisible: "둘러보기"
- assertVisible: "사장님이신가요?"

- tapOn: "아이디(Koreatech ID/전화번호)"
- inputText: "invalid-user"
- hideKeyboard
- tapOn: "비밀번호"
- inputText: "wrong-password"
- hideKeyboard
Expand All @@ -21,3 +28,30 @@ env:
visible: "아이디 또는 비밀번호가 올바르지 않습니다."
timeout: 15000
- assertVisible: "아이디 또는 비밀번호가 올바르지 않습니다."

- tapOn: "회원가입"
- waitForAnimationToEnd:
timeout: 5000
- openLink: "koin://login/navigation"
- hideKeyboard
- extendedWaitUntil:
visible: "로그인"
timeout: 10000

- tapOn: "아이디 찾기"
- waitForAnimationToEnd:
timeout: 5000
- openLink: "koin://login/navigation"
- hideKeyboard
- extendedWaitUntil:
visible: "로그인"
timeout: 10000

- tapOn: "비밀번호 찾기"
- waitForAnimationToEnd:
timeout: 5000
- openLink: "koin://login/navigation"
- hideKeyboard
- extendedWaitUntil:
visible: "로그인"
timeout: 10000
2 changes: 1 addition & 1 deletion .maestro/guest/auth_sign_up.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://signup/navigation"
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/banner.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- assertVisible: "게시판"
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/bus.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- tapOn:
Expand Down
5 changes: 4 additions & 1 deletion .maestro/guest/callvan.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- tapOn:
id: "${APP_ID}:id/navi_item_callvan"
- tapOn:
text: "알림 켜기"
optional: true
- waitForAnimationToEnd:
timeout: 10000
2 changes: 1 addition & 1 deletion .maestro/guest/club.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- scrollUntilVisible:
Expand Down
7 changes: 6 additions & 1 deletion .maestro/guest/dining.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- tapOn:
id: "${APP_ID}:id/navi_item_dining"
- runFlow:
when:
visible: "알림 설정 바로가기"
commands:
- pressKey: BACK
- extendedWaitUntil:
visible: "식단"
timeout: 15000
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/home.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- extendedWaitUntil:
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/land.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- scrollUntilVisible:
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/lost_and_found.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- tapOn:
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/operating_info.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- scrollUntilVisible:
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/settings.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- tapOn:
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/store.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://store"
Expand Down
2 changes: 1 addition & 1 deletion .maestro/guest/timetable.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/open_drawer.yaml
- scrollUntilVisible:
Expand Down
30 changes: 30 additions & 0 deletions .maestro/student/article_keyword.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
appId: ${APP_ID}
env:
APP_ID: in.koreatech.koin.dev
---
- runFlow: ../common/launch_app.yaml
- openLink: "koin://article/navigation"
- extendedWaitUntil:
visible: "공지사항"
timeout: 15000

- tapOn:
id: "${APP_ID}:id/image_view_to_keyword_add_page"
- extendedWaitUntil:
visible: "키워드 관리"
timeout: 10000

- assertNotVisible: "키워드 알림을 받으려면"
- assertVisible: "키워드 관리"
- assertVisible: "내 키워드"
- assertVisible: "추천 키워드"
- assertVisible: "알림받을 키워드를 입력해 주세요."

- tapOn: "알림받을 키워드를 입력해 주세요."
- inputText: "maestroarticle"
- hideKeyboard
- tapOn: "추가"
- extendedWaitUntil:
visible: "maestroarticle"
timeout: 5000
- assertVisible: "maestroarticle"
Loading
Loading