Skip to content

[Test] 전경 준비의 여섯 갈래를 각각 고정한다 - #236

Merged
MinHeokChoi merged 2 commits into
mainfrom
test/foreground-preparation-branches
Sep 23, 2026
Merged

MinHeokChoi merged 2 commits into
mainfrom
test/foreground-preparation-branches

Conversation

@MinHeokChoi

Copy link
Copy Markdown
Contributor

✨ PR 유형

어떤 변경 사항이 있나요??

  • 테스트 추가, 테스트 리팩토링

스택 PR 4/5 · base: test/tts-warmup-fixture-coverage

🛠️ 작업내용

[Test] 전경 준비의 여섯 갈래를 각각 고정한다

prepareForegroundNow는 여섯 갈래로 끝나는데, 그 enum은 private이라 밖에서
볼 수 없다. 그래서 각 갈래를 만들어내는 입력과 밖으로 드러나는 결과를 짝지어
고정했다. prepareNow와 합치기 전에 이 여섯이 서 있어야 한다.

.prepared → 바인딩·응답·캐시가 다 있을 때
.unavailable → 바인딩도 서버로 보낼 의도도 없을 때 (로컬 루틴)
.pendingBinding → 그룹 생성이 큐에 올라가 바인딩을 기다릴 때
.pendingGeneration → 서버가 아직 만들고 있을 때
.retryableRemoteRequest → 상태 조회가 실패했을 때
.retryableDownload → 내려받기가 실패했을 때

뒤의 네 갈래는 밖에서 모두 .retryablePending으로 보인다. 그래서 단언만으로는
엉뚱한 갈래로 가도 통과한다. 변이로 확인했다 — 네 갈래를 하나씩 .unavailable로
바꿔 보니 각각 제 테스트가 잡았고, 그룹 바인딩 대기 분기를 지웠을 때도 그렇다.
확인 뒤 제품 코드는 원복했다.

실패를 만들 수단이 없어 스텁 둘을 보강했다. WarmupRemoteStub.failAllResponses와
FailingWarmupDownloader. 이 둘이 없어서 마지막 두 갈래는 여태 한 번도 실행되지
않았다.

스모크 1,067개 통과.

Co-Authored-By: Claude noreply@anthropic.com

규모 — 1 file changed, 155 insertions(+)

📋 추후 진행 상황

5번 PR이 이 안전망 위에서 두 준비 메서드의 겹치는 부분을 정리합니다.

📌 리뷰 포인트

뒤의 네 갈래는 밖에서 모두 .retryablePending으로 보입니다. 단언만으로는 엉뚱한 갈래로 가도 통과하므로, 네 갈래를 하나씩 .unavailable로 바꿔 보며 각각 제 테스트가 잡는지 확인했습니다. 그룹 바인딩 대기 분기를 지웠을 때도 마찬가지입니다. 확인 뒤 제품 코드는 원복했습니다.

실패를 만들 수단이 없어 스텁 둘을 보강했습니다(WarmupRemoteStub.failAllResponses, FailingWarmupDownloader). 이 둘이 없어서 마지막 두 갈래는 여태 한 번도 실행되지 않았습니다.

✅ Checklist

  • 커밋 메시지 컨벤션에 맞게 작성했습니다
  • 유지-보수를 위해 주석처리를 잘 작성하였는가?

검증: 시뮬레이터 smoke 1,067개 통과(실패 0, 실기기 전용 3건 skip). 정적 게이트 3종 통과.

앞 PR이 머지되면 이 PR의 base는 자동으로 main이 된다. 순서대로 머지한다.

🤖 Generated with Claude Code

MinHeokChoi and others added 2 commits September 12, 2026 21:42
makeWarmupFixture가 backgroundTransferManager를 넘기지 않았다. 파라미터조차
없어서 코디네이터는 모든 테스트에서 이 의존성을 nil로 받았고, 그러면
persistPlayableIntroJobIfSupported와 resumePersistedTransfersNow가 첫 guard에서
그대로 반환한다. 즉 프리페치 지속화와 전송 재개 코드는 **한 줄도 실행되지 않은
채** 초록이었다. 다음에 이 근처를 고치면 깨져도 아무도 모른다.

BackgroundTransferSpy를 붙이고 여섯 가지를 고정했다.

- 씬 활성화가 남은 전송을 재개한다
- 백그라운드로 내려갈 때는 재개하지 않는다 (내려가는 길에 할 일이 아니다)
- 로그아웃하면 큐를 전부 버린다 — 남기면 다음 계정이 이전 계정 음성을 받는다
- 계정 전환은 새 계정 것만 재개한다
- BGAppRefresh 진입점이 전송을 정리한다
- 동기화 완료 스캔은 앱이 앞에 있을 때만 돈다

테스트가 실제로 무는지 변이로 확인했다. setSceneActive에서
resumePersistedTransfers() 제거, 로그아웃에서 discardAllTransfers() 제거,
routineSyncDidComplete에서 isSceneActive 가드 제거 — 셋 다 각각 해당 테스트가
잡았다. 확인 뒤 제품 코드는 원복했다.

스모크 1,061개 통과.

Co-Authored-By: Claude <noreply@anthropic.com>
prepareForegroundNow는 여섯 갈래로 끝나는데, 그 enum은 private이라 밖에서
볼 수 없다. 그래서 각 갈래를 만들어내는 입력과 밖으로 드러나는 결과를 짝지어
고정했다. prepareNow와 합치기 전에 이 여섯이 서 있어야 한다.

  .prepared               → 바인딩·응답·캐시가 다 있을 때
  .unavailable            → 바인딩도 서버로 보낼 의도도 없을 때 (로컬 루틴)
  .pendingBinding         → 그룹 생성이 큐에 올라가 바인딩을 기다릴 때
  .pendingGeneration      → 서버가 아직 만들고 있을 때
  .retryableRemoteRequest → 상태 조회가 실패했을 때
  .retryableDownload      → 내려받기가 실패했을 때

뒤의 네 갈래는 밖에서 모두 .retryablePending으로 보인다. 그래서 단언만으로는
엉뚱한 갈래로 가도 통과한다. 변이로 확인했다 — 네 갈래를 하나씩 .unavailable로
바꿔 보니 각각 제 테스트가 잡았고, 그룹 바인딩 대기 분기를 지웠을 때도 그렇다.
확인 뒤 제품 코드는 원복했다.

실패를 만들 수단이 없어 스텁 둘을 보강했다. WarmupRemoteStub.failAllResponses와
FailingWarmupDownloader. 이 둘이 없어서 마지막 두 갈래는 여태 한 번도 실행되지
않았다.

스모크 1,067개 통과.

Co-Authored-By: Claude <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 12, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: cc457839-596b-44b5-b94b-3d947f9699ec


Comment @coderabbitai help to get the list of available commands.

@MinHeokChoi
MinHeokChoi changed the base branch from test/tts-warmup-fixture-coverage to main September 23, 2026 23:59
@MinHeokChoi
MinHeokChoi merged commit 0822b22 into main Sep 23, 2026
5 checks passed
@MinHeokChoi
MinHeokChoi deleted the test/foreground-preparation-branches branch September 23, 2026 23:59
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.

1 participant