- Add m-client-validation task with 02_native_test plan (PLAN-cloud-G07.md) - Update roadmap current.md and product-foundation phase - Update client-validation milestone - Add README for apps/flutter-test and packages/messaging_flutter
8.3 KiB
Android Native Unit Test Plan
이 파일을 읽는 구현 에이전트에게
CODE_REVIEW-cloud-G07.md의 구현 에이전트 소유 섹션을 채우는 것이 구현의 마지막 단계다. 검증을 실제로 실행하고, 실제 stdout/stderr를 기록하고, active 파일을 그대로 둔 채 리뷰 준비를 보고한다. 사용자 결정, 외부 Android SDK 준비, 또는 범위 충돌로 막히면 review stub의 사용자 리뷰 요청 섹션에 정확한 근거와 재개 조건을 적고 멈춘다. USER_REVIEW.md, archive log, complete.log 작성은 code-review 전용이다.
배경
현재 Milestone 클라이언트 검증 기준선의 test-host Epic에는 native-test 검증이 남아 있다. 이 작업은 apps/flutter-test/android에서 플러그인의 Android native unit test가 실행되는지 확인한다. Android SDK와 Gradle 환경 의존성이 있어 작은 문서 정리와 분리해 계획 작업으로 둔다.
사용자 리뷰 요청 흐름
구현 중 차단 조건은 active CODE_REVIEW-cloud-G07.md의 사용자 리뷰 요청 섹션에 기록한다. 형식은 agent-ops/skills/common/_templates/implementation-user-review-request-section.md를 따른다. code-review가 정당성을 검증한 뒤 실제 USER_REVIEW.md 작성 여부를 결정한다.
분석 결과
읽은 파일
agent-roadmap/current.mdagent-roadmap/phase/product-foundation/PHASE.mdagent-roadmap/phase/product-foundation/milestones/client-validation.mdagent-ops/rules/project/domain/client-app/rules.mdagent-ops/rules/project/domain/messaging-flutter/rules.mdapps/flutter-test/README.mdapps/flutter-test/android/settings.gradle.ktsapps/flutter-test/android/build.gradle.ktsapps/flutter-test/android/app/build.gradle.ktsapps/flutter-test/android/app/src/main/AndroidManifest.xmlapps/flutter-test/pubspec.yamlpackages/messaging_flutter/README.mdpackages/messaging_flutter/docs/android-test-environment.mdpackages/messaging_flutter/android/build.gradle.ktspackages/messaging_flutter/android/src/main/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPlugin.ktpackages/messaging_flutter/android/src/test/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPluginTest.kt
테스트 커버리지 공백
- Gradle execution path:
apps/flutter-test/README.md:79documents./gradlew testDebugUnitTest, but active task evidence is still needed. - Native plugin method handling:
packages/messaging_flutter/android/src/test/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPluginTest.kt:28covers invaliddebugSendNativeEvent;:61,:93,:125, and:157cover argument validation for token/auth/signing/clear flows. - Intent payload behavior:
NexoMessagingPluginTest.kt:201through:245covers null, empty, default opened type, explicit type, and user interaction. - Storage, ACK request behavior, notification rendering, inline reply, and dismiss receiver coverage are still broader future native-test gaps; this plan does not expand them because the current roadmap item asks for execution procedure and
testDebugUnitTestsuccess.
심볼 참조
none. 이 계획은 rename/remove 작업을 포함하지 않는다.
분할 판단
Split decision policy was evaluated before choosing plan files. Shared task group: agent-task/m-client-validation/. This subtask is 02_native_test and has no runtime dependency. Sibling 01_integration_path is independent because it validates Flutter device/emulator integration rather than Gradle unit test execution.
범위 결정 근거
이 계획은 test-host Epic의 [native-test]만 다룬다. Flutter host integration은 01_integration_path에서 분리한다. Native coverage expansion for storage/ACK/notification/reply/dismiss is noted as a gap but excluded because the active roadmap item only requires maintaining the Android native unit test execution procedure and command success.
빌드 등급
build=cloud-G07, review=cloud-G07. Android SDK, Flutter Gradle plugin wiring, and Gradle output classification are success criteria, so terminal/toolchain diagnosis is required.
구현 체크리스트
- Android SDK/Gradle preflight를 확인하고, 없으면
사용자 리뷰 요청에 실제 출력과 재개 조건을 기록한다. cd apps/flutter-test/android && ./gradlew testDebugUnitTest가 Android SDK 환경에서 성공하도록 확인한다. 실패가 제품 결함이면 이 계획의 파일 경계 안에서 최소 수정 후 같은 명령을 재실행한다.- Native unit test coverage gaps are not expanded unless the command reveals a failing product behavior in the existing tests.
- CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
[TEST-1] Android Gradle native unit test execution
문제
apps/flutter-test/README.md:79 and packages/messaging_flutter/README.md:215 document ./gradlew testDebugUnitTest. The app Gradle wrapper reads Flutter SDK metadata through apps/flutter-test/android/settings.gradle.kts:1, while plugin unit tests are configured by packages/messaging_flutter/android/build.gradle.kts:45 and :58. The native tests exist in packages/messaging_flutter/android/src/test/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPluginTest.kt:14, but this Milestone still needs execution evidence from an Android SDK environment.
해결 방법
기본 구현은 Gradle native unit test 실행과 결과 기록이다. 코드 변경은 계획하지 않는다. SDK location not found, missing Flutter SDK metadata, or missing Android SDK는 제품 코드 수정으로 처리하지 않고 환경 blocker로 기록한다. 기존 테스트가 제품 결함을 노출하면 아래 파일 경계 안에서 최소 수정한다.
수정 파일 및 체크리스트
packages/messaging_flutter/android/src/test/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPluginTest.kt는 기존 unit coverage를 유지한다.packages/messaging_flutter/android/src/main/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPlugin.kt는 기존 test failure가 plugin 결함을 가리킬 때만 수정한다.packages/messaging_flutter/android/build.gradle.kts는 test sourceSet/testOptions/dependencies 결함이 확인된 경우에만 수정한다.apps/flutter-test/android/settings.gradle.kts와apps/flutter-test/android/app/build.gradle.kts는 Flutter/Android Gradle wiring 결함이 확인된 경우에만 수정한다.
테스트 작성
새 테스트 작성은 기본 계획에서 제외한다. 현재 unit tests가 roadmap의 native test 실행 경로를 검증하기 위한 대상이다. 명령 실패가 기존 tests로 표현되지 않는 regression을 드러내면 NexoMessagingPluginTest.kt에 해당 regression test를 추가하고 같은 Gradle command로 검증한다.
중간 검증
command -v java
cd apps/flutter-test/android && ./gradlew --version
cd apps/flutter-test/android && ./gradlew testDebugUnitTest
예상 결과: ./gradlew --version과 ./gradlew testDebugUnitTest가 성공한다. Android SDK 또는 Flutter SDK metadata가 없으면 제품 실패로 고치지 말고 사용자 리뷰 요청에 실제 출력과 필요한 환경을 기록한다.
수정 파일 요약
| 파일 | 항목 |
|---|---|
packages/messaging_flutter/android/src/test/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPluginTest.kt |
TEST-1 |
packages/messaging_flutter/android/src/main/kotlin/com/tokilabs/nexo/messaging/NexoMessagingPlugin.kt |
TEST-1 |
packages/messaging_flutter/android/build.gradle.kts |
TEST-1 |
apps/flutter-test/android/settings.gradle.kts |
TEST-1 |
apps/flutter-test/android/app/build.gradle.kts |
TEST-1 |
최종 검증
command -v java
cd apps/flutter-test/android && ./gradlew --version
cd apps/flutter-test/android && ./gradlew testDebugUnitTest
검색/생성 출력 검증은 없다. Gradle build cache 결과는 이 계획의 성공 판정에 사용하지 않는다.
모든 코드 변경 완료 후 반드시 CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.