diff --git a/docs/20260610_DM_채팅화면/plan-task.md b/docs/20260610_DM_채팅화면/plan-task.md index 673921ce..1daa442c 100644 --- a/docs/20260610_DM_채팅화면/plan-task.md +++ b/docs/20260610_DM_채팅화면/plan-task.md @@ -828,15 +828,17 @@ ### Phase 13: WebSocket 전환 최종 검증과 수동 확인 -- [ ] **Task 13.1: DM 채팅 WebSocket 단위 테스트 실행** +- [x] **Task 13.1: DM 채팅 WebSocket 단위 테스트 실행** - Files: - Check: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/*Test.kt` - Run: - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1` - Expected: - DM 채팅 WebSocket 전환 관련 단위 테스트가 모두 PASS. + - 검증 기록: + - 2026-06-19: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1` 실행 결과 `BUILD SUCCESSFUL`을 확인했다. -- [ ] **Task 13.2: 푸시/딥링크 라우팅 테스트 실행** +- [x] **Task 13.2: 푸시/딥링크 라우팅 테스트 실행** - Files: - Check: `app/src/test/java/kr/co/vividnext/sodalive/fcm/*Test.kt` - Check: `app/src/test/java/kr/co/vividnext/sodalive/main/*Test.kt` @@ -845,8 +847,10 @@ - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.*" --tests "kr.co.vividnext.sodalive.main.*" --tests "kr.co.vividnext.sodalive.v2.main.*" --max-workers=1` - Expected: - USER_CREATOR push routing과 기존 deep link 회귀 테스트가 PASS. + - 검증 기록: + - 2026-06-19: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.*" --tests "kr.co.vividnext.sodalive.main.*" --tests "kr.co.vividnext.sodalive.v2.main.*" --max-workers=1` 실행 결과 `BUILD SUCCESSFUL`을 확인했다. -- [ ] **Task 13.3: 빌드/스타일/문자열 회귀 확인** +- [x] **Task 13.3: 빌드/스타일/문자열 회귀 확인** - Files: - Check: Gradle project - Check: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm` @@ -858,6 +862,9 @@ - Expected: - Kotlin compile, ktlint, whitespace check PASS. - 제거 endpoint 문자열은 삭제 검증 테스트나 과거 이력 문서를 제외한 신규 DM main/test 코드에 남지 않는다. + - 검증 기록: + - 2026-06-19: `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `git diff --check`를 실행해 모두 PASS를 확인했다. Gradle 실행에서는 기존 deprecation warning이 출력됐지만 실패는 없었다. + - 2026-06-19: `rg "messages/text|events/disconnect|text/event-stream|EventSource" app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm` 결과 없음으로 active DM main 코드에 제거 endpoint 문자열이 남지 않음을 확인했다. 동일 패턴을 DM test 경로까지 넓히면 `DmChatRemovedEndpointSourceTest`의 금지 문자열 assertion과 과거 SSE 이력 테스트인 `DmChatEventClientTest`의 `text/event-stream` fixture만 매칭됨을 확인했다. - [ ] **Task 13.4: WebSocket 전환 수동 확인** - Files: @@ -877,6 +884,9 @@ - 화면 밖에서는 reconnect가 예약/실행되지 않는다. - heartbeat `PING`/`PONG` timeout 시 연결 상태가 disconnected로 전환된다. - USER_CREATOR push 터치 시 `room_id` 기준 DM 채팅방에 진입하고 일반 진입과 동일하게 `OpenRoom` 후 WebSocket join을 수행한다. + - 검증 기록: + - 2026-06-19: `DmChatRoomViewModelTest`, `DmChatSocketClientTest`, `DmChatRemovedEndpointSourceTest`, `SodaFirebaseMessagingServiceSourceTest`, `DeepLinkActivitySourceTest`, `MainV2ActivitySourceTest`로 WebSocket join/send/ack/error/timeout/retry/reconnect/heartbeat, 제거 endpoint 미사용, USER_CREATOR push/deep link 라우팅의 자동 검증 PASS를 확인했다. 단, `adb devices` 결과 연결된 Android 기기가 없어 실제 앱 화면과 실제 서버/WebSocket을 통한 수동 확인은 수행하지 못했으므로 Task 13.4는 미완료로 유지한다. + - 2026-06-19: Phase 13 코드 리뷰로 `DmChatRoomActivity`, `DmChatRoomViewModel`, `DmChatSocketClient`, `DmChatSocketModels`, `DmChatRepository`, `DmChatApi`의 WebSocket 연결/해제, `JOINED` 기준 연결 확정, `SEND_TEXT`/`SEND_ACK` pending 처리, timeout/retry/reconnect/heartbeat, 제거 REST endpoint 미사용 경로를 재검토했고 blocking issue는 발견하지 못했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.fcm.*" --tests "kr.co.vividnext.sodalive.main.*" --tests "kr.co.vividnext.sodalive.v2.main.*" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `git diff --check` PASS를 확인했다. active DM main 코드의 제거 endpoint 문자열 검색 결과는 없음이며, DM test 경로까지 확장하면 삭제 검증 테스트와 과거 SSE 이력 테스트 fixture만 매칭된다. 최초 Gradle 실행은 `~/.gradle` wrapper lock 파일 접근 제한으로 실패해 승인된 Gradle 실행으로 재검증했고, `adb devices`는 승인된 실행에서도 연결된 기기가 없어 실제 앱/서버 WebSocket 수동 확인은 미완료로 유지한다. ## 5. 검증 기록 - 2026-06-10: `docs/20260610_DM_채팅화면/prd.md`를 확인해 DM 채팅방 진입, UI 제거 대상, REST API, SSE 이벤트, pagination, 전송 실패/재시도, lifecycle disconnect 요구사항을 계획에 반영했다.