앱 다운로드 유도 QA Test Case

Pass: 0 Fail: 0 Skip: 0 미실행: 46
1. 웹 → 앱 진입 분기
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
W-01 공통 앱 미설치, 웹 접속 가능
  1. 웹 이벤트 페이지 CTA "앱 다운로드하고 혜택 받기" 클릭
앱 설치 유도 모달 노출 앱 미설치 시 설치 유도 모달 정상 노출
W-02 공통 앱 미설치, 앱 설치 유도 모달 노출 상태
  1. 앱 설치 유도 모달 CTA "나이트 소환하기" 클릭
App Store / Play Store 이동 (서비스 앱) 에어브릿지 라우팅으로 스토어 정상 이동
W-03 공통 앱 설치됨
  1. CTA 클릭
앱 오픈 (Deep Link 콜백) 앱 정상 오픈
W-04 공통 apply_event=false 딥링크
  1. app://event/{id}?apply_event=false&term={term} 로 진입
Braze 이벤트 미발송, 이벤트 페이지만 표시 deeplink_open_promotion 미발송
W-05 공통 apply_event=true 딥링크
  1. app://event/{id}?apply_event=true&term={term} 로 진입
deeplink_open_promotion 이벤트 발송 (link_type, term, event_id 포함) Braze 이벤트 + push_authorization_status attr 설정
2. 약관 미동의 + 푸시 미허용
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
TC-01 Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 확인 → [확인]
  4. 푸시 허용 유도 → [알림 허용하기]
기기 알림 설정 화면으로 이동 open-notification-settings 딥링크 수신, consent 파라미터 포함, 딥링크 1회 호출, allow_use_marketing=1&allow_news_letters=1, consent DB 저장
TC-01a Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in = true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 약관 동의 모달 노출
  3. 개인정보 마케팅 활용 동의만 표시 확인
  4. 동의 → [응모 완료하기]
  5. 동의 고지 → [확인]
  6. [알림 허용하기]
마케팅 활용 동의 항목만 노출, consent에 allow_use_marketing=1만 포함 미동의 항목만 동적 노출, allow_news_letters 미포함
TC-01b Android is_marketing_info_opted_in = true
is_marketing_message_opted_in ≠ true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 약관 동의 모달 노출
  3. 마케팅 알림 수신 동의만 표시 확인
  4. 동의 → [응모 완료하기]
  5. 동의 고지 → [확인]
  6. [알림 허용하기]
마케팅 알림 수신 동의 항목만 노출, consent에 allow_news_letters=1만 포함 미동의 항목만 동적 노출, allow_use_marketing 미포함
TC-02 Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → 닫기(X) 클릭
action=close 딥링크 수신, consent 포함, consent DB 저장 닫기에도 consent DB 저장, push_permission 이벤트 발송
TC-03 Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → [알림 허용하기]
  5. 앱 내 바텀업 프롬프트 → 허용
push_permission(granted, prompt), 참여 완료 모달, is_participated=true Android 13+ not_determined → 프롬프트 허용 시 참여 완료
TC-03a Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → [알림 허용하기]
  5. 앱 내 바텀업 프롬프트 → 거부
push_permission(denied, prompt), 이벤트 참여 불가 안내 Android 13+ not_determined → 프롬프트 거부 시 미완료
TC-03b Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → [설정에서 켜기]
  5. 기기 설정에서 알림 ON
  6. 앱으로 복귀
push_permission(granted, settings), 참여 완료 모달, is_participated=true denied → 기기 설정 이동 → 허용 후 참여 완료
TC-03c Android is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → [설정에서 켜기]
  5. 기기 설정에서 알림 OFF 유지
  6. 앱으로 복귀
push_permission(denied, settings), 이벤트 참여 불가 안내 denied → 기기 설정 이동 → 거부 유지 시 미완료
TC-04 iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → [알림 허용하기]
기기 알림 설정 화면으로 이동 open-notification-settings 딥링크 수신, consent 파라미터 포함, consent DB 저장, iOS 동일 코드 검증
TC-04a iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in = true
push_authorization_status ≠ authorized
  1. 딥링크로 앱 진입
  2. 약관 동의 모달 노출
  3. 개인정보 마케팅 활용 동의만 표시 확인
  4. 동의 → [응모 완료하기]
  5. 동의 고지 → [확인]
  6. [알림 허용하기]
마케팅 활용 동의 항목만 노출, consent에 allow_use_marketing=1만 포함 allow_news_letters 미포함
TC-04b iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in ≠ true
push_authorization_status ≠ authorized
  1. 딥링크로 앱 진입
  2. 약관 동의 모달 노출
  3. 마케팅 알림 수신 동의만 표시 확인
  4. 동의 → [응모 완료하기]
  5. 동의 고지 → [확인]
  6. [알림 허용하기]
마케팅 알림 수신 동의 항목만 노출, consent에 allow_news_letters=1만 포함 allow_use_marketing 미포함
TC-05 iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. 푸시 허용 유도 → 닫기(X) 클릭
action=close 딥링크 수신, consent 포함, consent DB 저장, push_permission 이벤트 발송 닫기에도 consent DB 저장
TC-06 iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. [알림 허용하기] → OS 권한 프롬프트
  5. 허용 선택
  6. 앱으로 복귀
push_permission(status:granted), 참여 완료 모달, is_participated=true 완료 모달 정상 트리거
TC-06a iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. [알림 허용하기] → OS 권한 프롬프트
  5. 거부 선택
  6. 앱으로 복귀
push_permission(status:denied), 이벤트 참여 불가 안내 OS 프롬프트 거부 시 미완료 안내 정상
TC-06b iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. [알림 허용하기] → 기기 설정 이동
  5. 허용 선택
  6. 앱으로 복귀
설정에서 허용 후 참여 완료 denied → 설정 이동 플로우 정상
TC-06c iOS is_marketing_info_opted_in ≠ true
is_marketing_message_opted_in ≠ true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 에어브릿지 딥링크로 앱 진입
  2. 약관 동의 모달 → 전체 동의 → [응모 완료하기]
  3. 동의 고지 → [확인]
  4. [알림 허용하기] → 기기 설정 이동
  5. 변경 없이(OFF 유지) 앱 복귀
push_permission(denied, settings), 이벤트 참여 불가 안내 설정 변경 없이 복귀 시 미완료
3. 약관 동의 완료 + 푸시 미허용
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
TC-07 Android is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 바로 노출
  3. [알림 허용하기] → 앱 내 바텀업 프롬프트 → 허용
push_permission(granted, prompt), 참여 완료 모달 노출 Android 13+ not_determined → 프롬프트 허용 시 참여 완료
TC-07a Android is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 바로 노출
  3. [알림 허용하기] → 앱 내 바텀업 프롬프트 → 거부
push_permission(denied, prompt), 이벤트 참여 불가 안내 Android 13+ not_determined → 프롬프트 거부 시 미완료
TC-07b Android is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → [설정에서 켜기]
  3. 기기 설정에서 알림 ON → 앱 복귀
push_permission(granted, settings), 참여 완료 모달 노출 denied → 기기 설정 → 허용 후 참여 완료
TC-07c Android is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → [설정에서 켜기]
  3. 기기 설정에서 알림 OFF 유지 → 앱 복귀
push_permission(denied, settings), 이벤트 참여 불가 안내 denied → 기기 설정 → 거부 유지 시 미완료
TC-07d Android is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → 닫기(X) 클릭
action=close 딥링크 수신, consent 파라미터 없음, push_permission 이벤트 발송 닫기 시 push_permission({status:'', source:''}) 발송
TC-08 iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → [알림 허용하기]
  3. OS 프롬프트 → 허용
push_permission(granted, prompt), 참여 완료 모달 노출 not_determined → OS 프롬프트 허용 시 참여 완료
TC-08a iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = not_determined
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → [알림 허용하기]
  3. OS 프롬프트 → 거부
push_permission(denied, prompt), 이벤트 참여 불가 안내 not_determined → OS 프롬프트 거부 시 미완료
TC-08b iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → [설정에서 켜기]
  3. 기기 설정 → 알림 ON → 앱 복귀
push_permission(granted, settings), 참여 완료 모달 노출 denied → 기기 설정 → 허용 후 참여 완료
TC-08c iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = denied
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → [설정에서 켜기]
  3. 기기 설정 → 변경 없이(OFF 유지) 앱 복귀
push_permission(denied, settings), 이벤트 참여 불가 안내 denied → 기기 설정 → 거부 유지 시 미완료
TC-08d iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status ≠ authorized
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 푸시 허용 유도 모달 → 닫기(X) 클릭
action=close 딥링크 수신, push_permission 이벤트 발송 닫기 시 push_permission({status:'', source:''}) 발송
4. 약관 동의 + 푸시 허용 → 체스 드롭 → 경품 추첨
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
TC-09 Android is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = authorized
foreground_push_enabled = true
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 약관 동의 모달 → 동의하기
  3. 동의 고지 → [확인]
  4. isPushOn() = true → 체스 드롭 페이지 노출
  5. 나이트 드래그 → 체스판에 드롭
경품 추첨 실행, 결과 모달 노출, is_participated=true isPushOn() 판단 정상 (foreground_push_enabled 우선), 드롭 성공 시 추첨 실행, GAS 재고 차감 확인, Braze 속성 업데이트 (is_participated / prize / prize_tier)
TC-10 iOS is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = authorized
foreground_push_enabled = true
is_participated_promotion_{term} ≠ true
  1. 딥링크로 앱 진입
  2. 약관 동의 모달 → 동의하기
  3. 동의 고지 → [확인]
  4. isPushOn() = true → 체스 드롭 페이지 노출
  5. 나이트 드래그 → 체스판에 드롭
경품 추첨 실행, 결과 모달 노출, is_participated=true iOS isPushOn() 판단 정상, 드롭 성공 시 추첨 실행, Braze 속성 업데이트 확인
TC-11 Android 기설치(link_type=direct)
is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = authorized
is_participated_promotion_{term} ≠ true
  1. 앱 설치 상태에서 딥링크로 진입
  2. 약관 동의 모달 → 동의하기
  3. 동의 고지 → [확인]
  4. 체스 드롭 페이지 노출
  5. 나이트 드래그 → 드롭
경품 추첨 실행, 결과 모달 노출 기설치(direct) 플로우 정상, link_type=direct 검증
TC-12 iOS 기설치(link_type=direct)
is_marketing_info_opted_in = true
is_marketing_message_opted_in = true
push_authorization_status = authorized
is_participated_promotion_{term} ≠ true
  1. 앱 설치 상태에서 딥링크로 진입
  2. 약관 동의 모달 → 동의하기
  3. 동의 고지 → [확인]
  4. 체스 드롭 페이지 노출
  5. 나이트 드래그 → 드롭
경품 추첨 실행, 결과 모달 노출 기설치(direct) 플로우 정상, link_type=direct 검증
5. 경품 추첨 / 결과 분기
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
P-01 공통 체스 드롭 페이지 노출 상태
prize_tier = base
  1. 나이트를 체스판으로 드래그
  2. 드롭 성공 → 경품 추첨 실행
  3. 쿠폰 당첨 → confirm 모달 노출
  4. [확인] 클릭
confirm 모달 정상 노출, handleFinalClose() 실행, 모달 닫힘 is_participated_promotion_{term}=true, promotion_prize_{term}=쿠폰명, promotion_prize_tier_{term}=base, promotion_coupon_amount_{term}=금액 설정 확인 / GAS 재고 차감 확인
P-02 공통 체스 드롭 페이지 노출 상태
prize_tier = top (macbook/ps5/dinner 재고 있음)
  1. 나이트를 체스판으로 드롭
  2. top3 경품 당첨 → top3 결과 페이지 노출
  3. [상세 내용 확인하기] 클릭
제세공과금 입력 구글폼으로 랜딩, 모달 닫힘 올바른 구글폼 URL로 이동 (macbook/ps5/dinner 각각), is_participated=true, promotion_prize_tier=top 설정 확인
P-03 공통 체스 드롭 페이지 노출 상태
prize_tier = mid (주유권 등)
  1. 나이트를 체스판으로 드롭
  2. mid 경품 당첨 → confirm 모달 노출
  3. [확인] 클릭
confirm 모달 정상 노출, 모달 닫힘 promotion_prize_tier_{term}=mid 설정 확인, GAS 재고 차감 확인
P-04 공통 체스 드롭 페이지 노출 상태
GAS 시트 특정 경품 재고 = 0
  1. 나이트를 체스판으로 드롭
  2. 재고 0 경품 당첨 케이스 시뮬레이션
클라이언트 추첨은 정상 진행, GAS에서 차감 거부 처리 재고 0이어도 모달 크래시 없음, GAS 응답 무관하게 결과 모달 노출 (fire-and-forget)
P-05 공통 결과 모달 노출 후 handleFinalClose() 실행
  1. confirm 모달 [확인] 클릭
  2. handleFinalClose() 실행
동의 파라미터 있을 경우 consent deeplink 호출 후 300ms 내 closeMessage() app://braze/consent?allow_use_marketing=1&allow_news_letters=1 정상 호출, 모달 정상 닫힘, 딥링크 1회만 호출
P-06 공통 드롭 성공 직후
  1. 드롭 성공 시 Braze 이벤트 확인
view_participated_promotion_modal 이벤트 발송 프로퍼티 포함 확인: prize_name, prize_detail, prize_tier, coupon_amount / is_participated_promotion_{term}=true 속성 설정 타이밍 확인
6. 이미 참여 완료
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
TC-13 Android is_participated_promotion_{term} = true
  1. 딥링크로 앱 진입
  2. 이미 참여 완료 안내 모달
'이미 참여 완료' 메시지 노출 중복 참여 차단
TC-14 iOS is_participated_promotion_{term} = true
  1. 딥링크로 앱 진입
  2. 이미 참여 완료 안내 모달
'이미 참여 완료' 메시지 노출 중복 참여 차단
7. 엣지 케이스 / 회귀
TC#OS사전 조건테스트 시나리오기대 결과확인 포인트결과노트
X-01 공통 앱 미설치
  1. CTA 클릭 → 스토어 이동
  2. 설치 없이 이탈
플로우 종료, 크래시/에러 없음 스토어 이탈 시 안정적 처리
X-02 공통 신규/기설치 각각
  1. 앱 미설치 → 스토어 설치 → Deferred Deep Link 콜백 (link_type=deferred)
  2. 앱 설치 상태에서 딥링크 클릭 (link_type=direct)
link_type 정확히 deferred / direct 구분 deeplink_open_promotion 이벤트 프로퍼티 검증
X-03 공통 설정 앱에서 알림 변경 가능
  1. 푸시 허용 유도 → 설정 이동
  2. 알림 ON/OFF 변경
  3. 앱으로 복귀
push_authorization_status 재확인 및 push_permission 이벤트 발송 앱 백그라운드 복귀 시 상태 반영

앱 다운로드 유도 QA Test Case — v2 (경품 추첨 / isPushOn() 분기 반영)