| TC# | OS | 사전 조건 | 테스트 시나리오 | 기대 결과 | 확인 포인트 | 결과 | 노트 |
|---|---|---|---|---|---|---|---|
| W-01 | 공통 | 앱 미설치, 웹 접속 가능 |
|
앱 설치 유도 모달 노출 | 앱 미설치 시 설치 유도 모달 정상 노출 | ||
| W-02 | 공통 | 앱 미설치, 앱 설치 유도 모달 노출 상태 |
|
App Store / Play Store 이동 (서비스 앱) | 에어브릿지 라우팅으로 스토어 정상 이동 | ||
| W-03 | 공통 | 앱 설치됨 |
|
앱 오픈 (Deep Link 콜백) | 앱 정상 오픈 | ||
| W-04 | 공통 | apply_event=false 딥링크 |
|
Braze 이벤트 미발송, 이벤트 페이지만 표시 | deeplink_open_promotion 미발송 | ||
| W-05 | 공통 | apply_event=true 딥링크 |
|
deeplink_open_promotion 이벤트 발송 (link_type, term, event_id 포함) | Braze 이벤트 + push_authorization_status attr 설정 |
| 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 |
|
기기 알림 설정 화면으로 이동 | 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 |
|
마케팅 활용 동의 항목만 노출, 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 |
|
마케팅 알림 수신 동의 항목만 노출, 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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
기기 알림 설정 화면으로 이동 | 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 |
|
마케팅 활용 동의 항목만 노출, 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 |
|
마케팅 알림 수신 동의 항목만 노출, 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 |
|
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 |
|
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 |
|
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 |
|
설정에서 허용 후 참여 완료 | 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 |
|
push_permission(denied, settings), 이벤트 참여 불가 안내 | 설정 변경 없이 복귀 시 미완료 |
| 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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
action=close 딥링크 수신, push_permission 이벤트 발송 | 닫기 시 push_permission({status:'', source:''}) 발송 |
| 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 |
|
경품 추첨 실행, 결과 모달 노출, 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 |
|
경품 추첨 실행, 결과 모달 노출, 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 |
|
경품 추첨 실행, 결과 모달 노출 | 기설치(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 |
|
경품 추첨 실행, 결과 모달 노출 | 기설치(direct) 플로우 정상, link_type=direct 검증 |
| TC# | OS | 사전 조건 | 테스트 시나리오 | 기대 결과 | 확인 포인트 | 결과 | 노트 |
|---|---|---|---|---|---|---|---|
| P-01 | 공통 | 체스 드롭 페이지 노출 상태 prize_tier = base |
|
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 재고 있음) |
|
제세공과금 입력 구글폼으로 랜딩, 모달 닫힘 | 올바른 구글폼 URL로 이동 (macbook/ps5/dinner 각각), is_participated=true, promotion_prize_tier=top 설정 확인 | ||
| P-03 | 공통 | 체스 드롭 페이지 노출 상태 prize_tier = mid (주유권 등) |
|
confirm 모달 정상 노출, 모달 닫힘 | promotion_prize_tier_{term}=mid 설정 확인, GAS 재고 차감 확인 | ||
| P-04 | 공통 | 체스 드롭 페이지 노출 상태 GAS 시트 특정 경품 재고 = 0 |
|
클라이언트 추첨은 정상 진행, GAS에서 차감 거부 처리 | 재고 0이어도 모달 크래시 없음, GAS 응답 무관하게 결과 모달 노출 (fire-and-forget) | ||
| P-05 | 공통 | 결과 모달 노출 후 handleFinalClose() 실행 |
|
동의 파라미터 있을 경우 consent deeplink 호출 후 300ms 내 closeMessage() | app://braze/consent?allow_use_marketing=1&allow_news_letters=1 정상 호출, 모달 정상 닫힘, 딥링크 1회만 호출 | ||
| P-06 | 공통 | 드롭 성공 직후 |
|
view_participated_promotion_modal 이벤트 발송 | 프로퍼티 포함 확인: prize_name, prize_detail, prize_tier, coupon_amount / is_participated_promotion_{term}=true 속성 설정 타이밍 확인 |
| TC# | OS | 사전 조건 | 테스트 시나리오 | 기대 결과 | 확인 포인트 | 결과 | 노트 |
|---|---|---|---|---|---|---|---|
| TC-13 | Android | is_participated_promotion_{term} = true |
|
'이미 참여 완료' 메시지 노출 | 중복 참여 차단 | ||
| TC-14 | iOS | is_participated_promotion_{term} = true |
|
'이미 참여 완료' 메시지 노출 | 중복 참여 차단 |
| TC# | OS | 사전 조건 | 테스트 시나리오 | 기대 결과 | 확인 포인트 | 결과 | 노트 |
|---|---|---|---|---|---|---|---|
| X-01 | 공통 | 앱 미설치 |
|
플로우 종료, 크래시/에러 없음 | 스토어 이탈 시 안정적 처리 | ||
| X-02 | 공통 | 신규/기설치 각각 |
|
link_type 정확히 deferred / direct 구분 | deeplink_open_promotion 이벤트 프로퍼티 검증 | ||
| X-03 | 공통 | 설정 앱에서 알림 변경 가능 |
|
push_authorization_status 재확인 및 push_permission 이벤트 발송 | 앱 백그라운드 복귀 시 상태 반영 |
앱 다운로드 유도 QA Test Case — v2 (경품 추첨 / isPushOn() 분기 반영)