Skip to content

test(timeletter): 음성 녹음 권한 거부·영구 거부 복구 경계가 무검증 — 허용 경로만 CI 를 지난다 (#440 분리) #1786

Open

Description

@OnlyReadOneBook

작업 유형

test — 테스트·검증·회귀 방지

주 담당 모듈

timeletter — 타임레터

개요

문제

#440 이 음성 녹음을 도입하면서 마이크 권한 거부 흐름을 구현했지만, 그 경계를 검증하는 테스트가 저장소 전체에 없다.

프로덕션에는 분기가 있다.

  • TimeLetterWriteScreen.kt:190 — ActivityCompat.shouldShowRequestPermissionRationale(RECORD_AUDIO) 로 첫 거부와 영구 거부를 가른다
  • TimeLetterWriteScreen.kt:241 — 영구 거부에서 Settings.ACTION_APPLICATION_DETAILS_SETTINGS 로 보낸다
  • TimeLetterWriteScreen.kt:385 — checkSelfPermission 결과로 recorder 시작 여부를 정한다

검증은 없다.

  • 계측 테스트 2종(VoiceRecordingAndroidTest·VoiceRecordingLifecycleAndroidTest)은 @Before 에서 매번 grantRuntimePermission(RECORD_AUDIO) 한다 — 허용 경로만 지난다
  • 저장소 전체에서 revokeRuntimePermission 0건, shouldShowRequestPermissionRationale 을 검증하는 테스트 0건, ACTION_APPLICATION_DETAILS_SETTINGS 검증 0건

그래서 첫 거부 안내가 사라지거나, 영구 거부의 설정 이동이 끊기거나, 거부 상태인데 recorder 가 시작돼도 exact-head CI 가 전부 초록으로 통과한다.

완료 조건

  • 권한 거부 상태에서 recorder start 가 호출되지 않는다
  • 첫 거부(rationale=true)와 영구 거부(rationale=false)의 안내가 갈린다
  • 영구 거부의 설정 Intent 가 현재 package 를 가리킨다
  • 위 셋이 CI 에서 실제로 실행된다 (허용 경로만 도는 상태로 두지 않는다)

참고

  • fix(timeletter): 음성 메시지 녹음 기능 구현 (#437) #440 의 8/31 리뷰 P1 인라인(VoiceRecordingAndroidTest.kt:40)에서 요청했던 항목이다. 같은 리뷰의 나머지 6건(Starting 레이스·중복 stop·선택기 MIME·자동 백업·orphan sweep·internal 축소·ON_STOP 실제 결선)은 모두 반영됐고, 남은 이 한 건은 기능 결함이 아니라 검증 공백이라 fix(timeletter): 음성 메시지 녹음 기능 구현 (#437) #440 을 더 막지 않고 후속으로 분리한다.
  • 권한 상태를 갈아 끼우는 계측은 UiAutomation.revokeRuntimePermission 이나, 권한 판정을 주입 가능한 경계로 빼는 방식 둘 다 가능하다. 후자면 Robolectric 로도 덮을 수 있다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:timeletter타임레터 기능 영역test테스트·검증·회귀 방지 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions