mattermost-push-plugin/agent-ops/roadmap/phase/validation-foundation/milestones/self-contained-test-harness.md

4 KiB

Milestone: 독립 테스트 하네스 정착

위치

  • Roadmap: agent-ops/roadmap/ROADMAP.md
  • Phase: agent-ops/roadmap/phase/validation-foundation/PHASE.md

목표

소비 프로젝트에 의존하지 않고 플러그인 통합을 검증할 수 있도록 example/ 앱을 얇은 실제 host app으로 정착시킨다. example/은 제품 앱이 아니라 method channel, event channel, manifest merge, notification-open routing을 확인하는 테스트 하네스가 된다.

상태

[진행중]

구현 잠금

  • 상태: 해제
  • 결정 필요: 없음

범위

  • example/ 앱의 테스트 하네스 역할 정리
  • example/testexample/integration_test의 검증 책임 분리
  • 실제 Firebase FCM이 필요한 테스트와 deterministic test control의 경계 정의
  • plugin root test와 example integration test 사이의 중복 방지

필수 기능

Epic: [harness-ui] 얇은 Host App

통합 검증에 필요한 최소 UI와 callback 관찰 지점을 제공한다.

  • [observable-state] device token, notification event, opened event를 확인할 수 있는 최소 상태 표시를 제공한다
  • [callback-hooks] channel/thread navigation callback이 호출되는지 관찰할 수 있게 한다
  • [no-product-logic] 제품 인증, 실제 라우팅, 프로젝트별 UI를 포함하지 않는다

Epic: [integration-tests] Integration Test 기반

디바이스 또는 emulator에서 플러그인 연결을 확인하는 테스트를 둔다.

  • [plugin-registration] example app에서 plugin registration이 정상 동작하는지 확인한다
  • [method-channel] Dart에서 native method channel 호출을 검증한다
  • [event-channel] native event를 Dart stream으로 전달하는 흐름을 검증한다
  • [opened-routing] notification opened payload가 channel/thread callback으로 연결되는지 검증한다
  • [device-run] 연결된 Android device 또는 emulator에서 flutter test integration_test 실행 결과를 기록한다

Epic: [test-controls] 재현 가능한 테스트 제어

외부 FCM 없이도 핵심 경로를 재현할 수 있는 테스트 방식을 마련한다.

  • [fake-payload] test/debug 전용 push payload 주입 방식을 설계한다
  • [manual-boundary] 실제 FCM과 Mattermost server가 필요한 항목은 manual smoke로 분리한다
  • [docs] 하네스 실행 명령과 전제 조건을 문서화한다

완료 기준

  • example/ 앱만으로 plugin registration과 기본 channel 계약을 확인할 수 있다
  • example/integration_test가 singleton 접근 이상의 통합 경로를 검증한다
  • 실제 FCM이 없어도 테스트 가능한 경로와 수동 smoke 경로가 분리되어 있다
  • 소비 프로젝트 없이 새 plugin 변경의 기본 위험을 확인할 수 있다

완료 리뷰

  • 상태: 없음
  • 요청일: 없음
  • 완료 근거: 없음
  • 리뷰 필요:
    • 사용자가 완료 결과를 확인했다
    • archive 이동을 승인했다
  • 리뷰 코멘트: 없음

범위 제외

  • 실제 Mattermost 인증 플로우 구현
  • 소비 앱의 production navigation 구현
  • 외부 Firebase 프로젝트를 CI 필수 조건으로 만드는 일

작업 컨텍스트

  • 관련 경로: example/lib/**, example/test/**, example/integration_test/**, lib/**, android/src/main/**
  • 표준선(선택): example/은 Flutter plugin 표준 host app으로 유지하고, 테스트용 기능은 제품 기능처럼 확장하지 않는다
  • 선행 작업: 프로젝트 운영 계약 정리
  • 후속 작업: 품질 게이트 자동화, Android 런타임 신뢰도 강화
  • 확인 필요: 연결된 Android device 또는 emulator에서 cd example && flutter test integration_test를 실행해 plugin registration과 기본 channel 계약을 확인한다.
  • 최근 검증: 2026-05-25 flutter analyze, flutter test, cd example && flutter analyze, cd example && flutter test 통과. cd example && flutter test integration_test는 지원되는 device/emulator가 없어 실행하지 못했다.