문제
failureModes 다이얼(#777)은 현재 reject만 한다 — buildNativeError로 네이티브 오류 envelope을 만들어 throw/onError한다. 그런데 실기기(env3) capture는 다이얼로 재현해야 할 실패의 상당수가 reject가 아니라 다른 shape로 resolve하는 soft-resolve임을 보인다. reject 전용 다이얼로는 이걸 못 만든다.
sdk-example env1↔env3 capture diff(현재 동치 59/70)의 남은 불일치 11건 중 7건이 이 soft-resolve 부류다:
| API :: scenario |
env3 (실기기) 관측 |
mock 현재 기본값 |
상태 |
grantPromotionReward / grantPromotionRewardForGame (3 시나리오) |
resolved { errorCode, message } |
{ key } |
shape 확정 — #785가 담당 |
IAP.getSubscriptionInfo :: happy-varied-orderId |
resolved {} (valueKeys=[]) |
{ subscription: {...} } |
shape 확정 |
checkoutPayment :: I2-result-success-examined |
resolved ["false","reason"] 키 |
{ success } |
키셋 확정(sdk-example task #31), 값 수준 미확정(#303, 폰 필요) |
requestTossPayPaysBilling (2 시나리오) |
resolved ["false","reason"] 키 |
{ success } |
위와 같음 |
전부 프로비저닝·시나리오 의존이다 — 31146에 등록된 promotion이 없고, 조회한 orderId에 활성 구독이 없고, 테스트가 실 결제를 완료할 수 없다. 그래서 실기기는 "성공했지만 내용이 빈/오류 본문" shape로 resolve한다.
설계 규칙 (왜 mock 기본값을 못 바꾸나)
이건 이미 코드 주석과 #785·#786에 명문화된 규칙이다: 프로비저닝·시나리오 의존 관측은 mock의 무조건적 기본값이 되면 안 된다. 기본값을 이 soft-resolve로 굳히면 —
그래서 기본값은 선언 타입대로 성공으로 두고, 재현은 다이얼에 붙인다. 문제는 현 다이얼이 reject만 한다는 것 — 이 부류를 담을 다이얼 모드가 없다.
할 일 (설계 + 구현)
1. failureModes에 soft-resolve 모드를 추가한다. reject(현행)와 별개로, 지정한 API가 다이얼을 켰을 때만 대체 shape로 resolve하게 한다. shape는 API별로 고정(실측값):
grantPromotionReward/grantPromotionRewardForGame → { errorCode, message } (#785와 통합 — #785를 이 모드의 첫 소비자로)
IAP.getSubscriptionInfo → {} (빈 객체)
checkoutPayment / requestTossPayPaysBilling → 결제 실패 soft-resolve shape
2. 값 수준 미확정 gate. promotion({errorCode,message})·IAP({})는 키셋·값이 정합해 지금 배선 가능하다. 그러나 결제 2 API의 ["false","reason"] 키셋은 sdk-example#303(폰 필요)에서 값 수준 확증이 안 끝났다 — 키 이름이 특이해(문자열 "false") 하네스 아티팩트가 아님은 확인됐지만(task #31) 실제 값 구조는 미확정이다. 결제 2 API 배선은 #303 확증 후에 착수한다(미확정 shape로 다이얼을 굳히면 계기가 또 거짓말한다). promotion·IAP만 이 이슈에서 배선하고, 결제는 #303-gated로 남긴다.
3. Acceptance
관련
커뮤니티 오픈소스 프로젝트입니다.
문제
failureModes다이얼(#777)은 현재 reject만 한다 —buildNativeError로 네이티브 오류 envelope을 만들어 throw/onError한다. 그런데 실기기(env3) capture는 다이얼로 재현해야 할 실패의 상당수가 reject가 아니라 다른 shape로 resolve하는 soft-resolve임을 보인다. reject 전용 다이얼로는 이걸 못 만든다.sdk-example env1↔env3 capture diff(현재 동치 59/70)의 남은 불일치 11건 중 7건이 이 soft-resolve 부류다:
grantPromotionReward/grantPromotionRewardForGame(3 시나리오)resolved{ errorCode, message }{ key }IAP.getSubscriptionInfo :: happy-varied-orderIdresolved{}(valueKeys=[]){ subscription: {...} }checkoutPayment :: I2-result-success-examinedresolved["false","reason"]키{ success }requestTossPayPaysBilling(2 시나리오)resolved["false","reason"]키{ success }전부 프로비저닝·시나리오 의존이다 — 31146에 등록된 promotion이 없고, 조회한 orderId에 활성 구독이 없고, 테스트가 실 결제를 완료할 수 없다. 그래서 실기기는 "성공했지만 내용이 빈/오류 본문" shape로 resolve한다.
설계 규칙 (왜 mock 기본값을 못 바꾸나)
이건 이미 코드 주석과 #785·#786에 명문화된 규칙이다: 프로비저닝·시나리오 의존 관측은 mock의 무조건적 기본값이 되면 안 된다. 기본값을 이 soft-resolve로 굳히면 —
{ key },{ subscription },{ success: true })가 mock에서 영구히 도달 불가능해진다. 정상 프로비저닝된 앱을 개발하는 일반 사용자의 dev 경험이 깨진다.그래서 기본값은 선언 타입대로 성공으로 두고, 재현은 다이얼에 붙인다. 문제는 현 다이얼이 reject만 한다는 것 — 이 부류를 담을 다이얼 모드가 없다.
할 일 (설계 + 구현)
1.
failureModes에 soft-resolve 모드를 추가한다. reject(현행)와 별개로, 지정한 API가 다이얼을 켰을 때만 대체 shape로 resolve하게 한다. shape는 API별로 고정(실측값):grantPromotionReward/grantPromotionRewardForGame→{ errorCode, message }(#785와 통합 — #785를 이 모드의 첫 소비자로)IAP.getSubscriptionInfo→{}(빈 객체)checkoutPayment/requestTossPayPaysBilling→ 결제 실패 soft-resolve shape2. 값 수준 미확정 gate. promotion(
{errorCode,message})·IAP({})는 키셋·값이 정합해 지금 배선 가능하다. 그러나 결제 2 API의["false","reason"]키셋은 sdk-example#303(폰 필요)에서 값 수준 확증이 안 끝났다 — 키 이름이 특이해(문자열"false") 하네스 아티팩트가 아님은 확인됐지만(task #31) 실제 값 구조는 미확정이다. 결제 2 API 배선은 #303 확증 후에 착수한다(미확정 shape로 다이얼을 굳히면 계기가 또 거짓말한다). promotion·IAP만 이 이슈에서 배선하고, 결제는 #303-gated로 남긴다.3. Acceptance
valueKeys= 실측 키셋)관련
커뮤니티 오픈소스 프로젝트입니다.