Files
fanuzu/app/tool/emulator_quest_roundtrip.sh

55 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# 퀘스트 참여 실왕복 — 에뮬레이터 세 개를 물고 기기에서 한 바퀴 돈다.
#
# `firebase emulators:exec` 가 이 스크립트를 실행한다. 먼저 시드를 넣고(보안 규칙이
# `quests` 쓰기를 마스터로 막아 앱이 만들 수 없다) 통합 테스트를 돌린다.
#
# cd firebase
# JAVA_HOME=... test/node_modules/.bin/firebase emulators:exec \
# --only auth,firestore,functions --project demo-fanuzu \
# "bash ../tool/emulator_quest_roundtrip.sh"
set -euo pipefail
DEVICE="${DEVICE:-emulator-5554}"
HOST="${FANUZU_EMULATOR_HOST:-127.0.0.1}"
# 앱이 쓰는 프로젝트 ID. 설정 파일이 들어간 빌드는 `[DEFAULT]` 앱을 그대로 쓰므로
# 실 프로젝트 ID 로 붙는다. 에뮬레이터는 프로젝트별로 칸이 나뉘어 시드도 같은 ID 에 넣는다.
PROJECT="${FANUZU_EMULATOR_PROJECT:-fanuzu-dev-b020d}"
BASE="http://127.0.0.1:8080/v1/projects/${PROJECT}/databases/(default)/documents"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
echo "▸ 시드 — 퀘스트 정의와 운영값 (${PROJECT})"
# 에뮬레이터는 `Bearer owner` 토큰을 관리자로 본다. 이 헤더가 없으면 보안 규칙이
# 그대로 적용돼 `quests` 쓰기가 막히고(마스터 전용) 시드가 조용히 사라진다.
AUTH=(-H 'Authorization: Bearer owner' -H 'Content-Type: application/json')
curl -sf -X PATCH "${BASE}/quests/daily-checkin" "${AUTH[@]}" -d '{
"fields": {
"type": {"stringValue": "attend"},
"title": {"stringValue": "출석 체크"},
"rewardPop": {"integerValue": "10"},
"dailyLimit": {"integerValue": "1"},
"active": {"booleanValue": true}
}
}' > /dev/null
curl -sf -X PATCH "${BASE}/config/policy" "${AUTH[@]}" -d '{
"fields": {
"attendPop": {"integerValue": "10"},
"stepTiers": {"arrayValue": {"values": [
{"mapValue": {"fields": {"steps": {"integerValue": "1000"}, "pop": {"integerValue": "5"}}}},
{"mapValue": {"fields": {"steps": {"integerValue": "5000"}, "pop": {"integerValue": "6"}}}},
{"mapValue": {"fields": {"steps": {"integerValue": "10000"}, "pop": {"integerValue": "7"}}}},
{"mapValue": {"fields": {"steps": {"integerValue": "15000"}, "pop": {"integerValue": "8"}}}}
]}}
}
}' > /dev/null
# 시드가 실제로 섰는지 본다. 없으면 여기서 끊는다 — 목록이 빈 채로 테스트가 돌면
# 「참여 버튼이 없다」로만 보여 원인을 찾는 데 시간이 든다.
curl -sf "${BASE}/quests/daily-checkin" "${AUTH[@]}" | grep -q '"attend"' \
|| { echo "✗ 시드 실패 — quests/daily-checkin 이 없습니다"; exit 1; }
echo "✓ 시드 확인"
echo "▸ 기기에서 왕복 (${DEVICE} · host ${HOST})"
cd "$ROOT"
exec fvm flutter test integration_test/quest_callable_emulator_test.dart \
-d "$DEVICE" --dart-define="FANUZU_EMULATOR_HOST=${HOST}"