Skip to content

androidTest 도메인 API 드리프트 44건+런타임 7건 수정, PR 컴파일 게이트 추가 - #949

Merged
OnlyReadOneBook merged 5 commits into
developfrom
fix/936
Aug 24, 2026
Merged

OnlyReadOneBook merged 5 commits into
developfrom
fix/936

Conversation

@OnlyReadOneBook

Copy link
Copy Markdown
Collaborator

Closes #936

변경

1. androidTest 5파일을 현행 도메인 API·화면 계약으로 갱신 (e0df3af)

이슈의 컴파일 에러 44건:

  • 수신자 홈 count API 제거([security] #844 Kotlin 빌드가 포함된 CodeQL 분석을 활성화 #865) 반영 — ReceiverHomeViewModel 이 현행 3-리포지토리(MindRecordReceiverRepository.getAll() + ReceiverTimeLetterRepository.getReceivedTimeLetters() + ReceiverRepository) 구조라 홈 테스트를 재작성. 부분 실패 시 "기록 수를 불러오지 못했습니다." 중립 문구 단언 포함
  • author ListItem.id·홈 내비 콜백 String→Long
  • withdrawCompleted(Boolean) → WithdrawUiState 치환 — 이슈 표의 3파일 외에 같은 44건에 포함돼 있던 Setting 2파일(SettingAccountSecurityAndroidTest·SettingCompletionAndroidTest)도 함께 수정
  • ReceivedAfternoteDetailRoute 의 onNavigateToPlaylist: (Long) -> Unit 필수화 반영

추가 적발 — 컴파일로 안 잡히는 런타임 드리프트 7건 (에뮬 1차 실측에서 발견, 같은 커밋에 수정):

부류 건수 내용
SavedStateHandle 타입 5 테스트가 String id 주입, ViewModel 은 toRoute 로 Long 읽음 → LongNavType 크래시. Long 주입으로 정정
마스터 키 게이트 1 #887 UUID 형식 게이트에 "MASTER-KEY-73" 입력이 서버 호출 전 반려 → 유효 UUID 로 교체(소문자 정규화 검증 겸함)
탈퇴 플로우 1 "완료 안내 → 확인하기 → API 호출" 구조가 "문장 일치 시 즉시 호출 → 결과 팝업"으로 변경돼 시나리오 재작성

2. unit-test.yml 에 :app:compileDebugAndroidTestKotlin 게이트 추가 (5493498)

기존 Gradle 한 방 실행(--continue --parallel)에 태스크만 추가 — 에뮬레이터 없이 컴파일만이라 러너 비용 소폭. required 승격은 #848 aggregate gate 와 연계 검토(이슈 명시대로 이번 범위 밖).

검증

  • :app:compileDebugAndroidTestKotlin / :app:compileDebugKotlin / :app:compileDebugUnitTestKotlin / :app:ktlintCheck BUILD SUCCESSFUL, actionlint 통과
  • 에뮬 실측(Pixel_7_Claude_QA, API 35): 수정 6클래스 connectedDebugAndroidTest — 1차(컴파일 수정만 반영)에서 위 런타임 7건 실패 적발 → 수정 후 2차 29/29 통과(0 failures, 결과 XML 교차 확인). 로컬 QA 증거: .codex/qa-evidence/emulator/54934985….json
    • 실측 재량 판단 근거: 새로 쓴 문구·타이밍 단언은 컴파일이 보증 못 하고, 다음 GMD 턴(화요일)에서 깨지면 이슈가 우려한 "최근 3회 연속 성공" 리셋이 그대로 발생 — 실제로 실측이 7건을 바꿨다
  • androidTest 잔여 파일의 SavedStateHandle 주입 전수 grep — String id 패턴 추가 발견 없음(RECEIVER_ID·timeLetterId·draftId 모두 Long/null)
  • 시각 검증: skip — 변경이 androidTest 소스셋·CI 워크플로뿐, main Compose·리소스 무변경이라 screenshotTest 대상 아님. QA·시안 대조도 UI 코드 무변경이라 해당 없음(테스트 단언 문구는 현행 main 문구·리소스와 대조해 작성)

리뷰어에게

#861 로 들어온 androidTest 직후 배치 머지(#877→#867→#862→#864→#865)가
도메인 API 를 바꿨지만 androidTest 소스셋은 어떤 PR 검증도 컴파일하지
않아 컴파일 에러 44건이 develop 에 미검증 착륙했다(#936).

컴파일 44건 정리:
- 수신자 홈 count API 제거(#865) → MindRecordReceiverRepository.getAll()
  + ReceiverTimeLetterRepository.getReceivedTimeLetters() 구조로 홈 테스트
  재작성, 실패 섹션 문구("기록 수를 불러오지 못했습니다") 단언 포함
- author ListItem.id·홈 내비 콜백 String→Long
- SettingViewModel.withdrawCompleted(Boolean) → WithdrawUiState 치환
- ReceivedAfternoteDetailRoute 의 onNavigateToPlaylist 필수화 반영

에뮬레이터 실측이 컴파일로는 안 잡히는 런타임 드리프트 7건을 추가
적발해 함께 수정:
- SavedStateHandle 에 String id 주입 5건 — ViewModel 이 toRoute 로 Long 을
  읽어 런타임 크래시. Long 주입으로 정정
- 마스터 키 입력이 UUID 형식 게이트(#887)에 서버 호출 전 반려 1건 —
  유효 UUID 로 교체, 소문자 정규화 검증 겸함
- 탈퇴 확인 1건 — "완료 안내 후 확인 시 호출"이 "문장 일치 시 즉시
  호출·결과 팝업" 구조로 바뀌어 시나리오 재작성

수정 6클래스 connectedDebugAndroidTest(Pixel_7_Claude_QA, API 35)
29/29 통과 실측.
androidTest 소스셋은 unit-test.yml(JVM 테스트만)·GMD 스케줄(화·금,
PR 트리거 없음) 어디서도 PR 시점에 컴파일되지 않아, main 코드 변경이
androidTest 를 깨뜨려도 머지 전 검출이 불가능했다(#936 실사고 —
develop 컴파일 실패 44건).

:app:compileDebugAndroidTestKotlin 을 기존 Gradle 한 방 실행에
추가한다. 에뮬레이터 없이 컴파일만이라 러너 비용은 소폭. required
승격은 #848 의 aggregate gate 와 연계 검토.
@OnlyReadOneBook

Copy link
Copy Markdown
Collaborator Author

머지 순서 참고 — 중복으로 닫힌 #948 본문에만 있던 경고를 옮겨 둔다.

#931 과 파일 겹침: AppAndReceiverCompletionAndroidTest·ReceiverAdvancedAndroidTest 를 #931 도 수정한다. merge-tree 실측(#948 브랜치 기준, 이 PR 과 파일 세트 동일)으로 텍스트 충돌은 없었지만, #931 이 ReceiverRepository 인터페이스를 변경하므로 늦게 머지되는 쪽에서 조합 컴파일(:app:compileDebugAndroidTestKotlin) 재확인이 필요하다. 이 PR 이 먼저 머지되면 여기서 추가하는 unit-test.yml 게이트가 #931 쪽 PR CI 에서 그 확인을 대신한다.

…eature:home 경로에 맞춤

- AppAndReceiverCompletionAndroidTest / ReceiverAdvancedAndroidTest: 충돌한 import 를
  develop 의 신규 경로로 채택하고 #936 이 추가한 mindrecord·timeletter import 를 합쳤다.
  #936 이 사용을 없앤 LoadCountResult import 는 미사용이라 뺐다.
- app 모듈 밖으로 옮겨간 문자열 4건은 bare R 로 더 이상 해결되지 않아 alias 로 교정:
  afternote_detail_delete_failed, receiver_download_all_failed,
  receiver_download_all_save_failed → AfternoteFeatureR,
  receiver_home_section_count_unavailable → ReceiverR

검증: :app:compileDebugAndroidTestKotlin, :app:compileDebugUnitTestKotlin,
:app:ktlintCheck 통과 (develop 단독 기준선은 androidTest 컴파일 44건 실패).
OnlyReadOneBook added a commit that referenced this pull request Aug 24, 2026
…경로에서 registry 로 제공

#919 가 IdentityVerification·ReceiverAuthCode DataStore 를 :feature:afternote:data 에서
:feature:receiver:data 로 옮겼고, #912 는 같은 파일들을 삭제하고 LocalStoreRegistry 로 대체했다.

- di 모듈 2종: 이관된 신규 패키지에서 registry.store(scope = SESSION) 제공을 유지
- *PreferencesDataStore.kt 2종: #912 의 삭제 유지 (rename/delete 충돌 — 이관본도 삭제)

검증: :app:compileDebugUnitTestKotlin, :core:datastore:ktlintCheck,
:feature:receiver:data:ktlintCheck 통과.
:app:compileDebugAndroidTestKotlin 은 develop 단독(495ebaf)에서도 44건 실패하는
기존 드리프트로 #949 가 고치는 범위다.
develop 이 unit-test 잡에 --build-cache 를 되살렸고 이 브랜치는 같은 줄에
:app:compileDebugAndroidTestKotlin 게이트를 추가했다. 둘을 합쳤다.
@OnlyReadOneBook
OnlyReadOneBook merged commit 9bc9d19 into develop Aug 24, 2026
13 checks passed
@OnlyReadOneBook
OnlyReadOneBook deleted the fix/936 branch August 24, 2026 09:16
@github-actions

Copy link
Copy Markdown
Contributor

🚀 QA 배포 권장

QA 포인트

이 판단은 배포를 자동 실행하지 않습니다. deploy일 때 Release Distribution을 수동 실행하세요.

OnlyReadOneBook added a commit that referenced this pull request Aug 24, 2026
#1005(추모 미디어 업로드 경로 통합)가 먼저 develop 에 들어가 사진 전용
MemorialPhotoUpload* 가 MemorialMediaUpload* 로 바뀌었고, 이 브랜치는
AuthorReceiverRepository 를 지우고 UserRepository 로 갈아끼우는 쪽이라
DI 모듈 import 가 양쪽에서 갈렸다. 남는 쪽(MediaUpload)만 두고 지워진
쪽(PhotoUpload·AuthorReceiver) 은 모두 뺀다.

androidTest editorViewModel() 헬퍼는 develop 의 itemId(Long) 형태를 취한다 —
#949 가 String→Long 드리프트를 고친 결과이고 같은 파일의 다른 호출부도
Long 이다. 수신자 주입만 이 브랜치의 FakeUserRepository 로 남긴다.

:app:compileDebugUnitTestKotlin 통과. androidTest 오류 21건은 develop 에서
그대로 물려받은 것으로 오류 집합이 develop 과 동일하다.
OnlyReadOneBook added a commit that referenced this pull request Aug 24, 2026
이 PR 이 `DetailReceiver` 에서 `phone` 을 걷어냈는데 `AfternoteAuthorExtendedAndroidTest`
픽스처 한 곳이 남아 `:app:compileDebugAndroidTestKotlin` 이 깨졌다.

develop(`af3f4610`) 도 같은 태스크가 21건 깨져 있어(#949 몫) 이 한 건이 그 잡음에 묻혔다.
오류 집합을 develop 과 대조해 증분이 이 한 건임을 확인했고, 제거 후 두 집합이 같아졌다.
OnlyReadOneBook added a commit that referenced this pull request Aug 24, 2026
develop 병합으로 :app:compileDebugAndroidTestKotlin 게이트(#949)가 들어오면서
옛 통합 Detail·ReceivedAfternoteDetail 형태를 쓰던 픽스처가 19건 깨졌다.

- Detail: category·title·type·credentials·processingMethods·memorial 평면 필드를
  serviceName + content(DetailContent.SocialNetwork) 로 옮긴다
- ReceivedAfternoteDetail: title 을 serviceName 으로, 사라진 category 인자를 제거
- AfternoteUpdatePayload.category 단언을 type 으로, DetailContentUiModel.Account 를
  SocialNetwork 로
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

develop androidTest 컴파일 실패 44건 — 배치 머지 API 드리프트가 미검증 착륙, 컴파일 게이트 부재

2 participants