- Windows 및 Linux 알림 선행 정리 마일스톤을 아카이브로 이동 - iOS 알림 테스트 마일스톤을 활성 milestone로 변경 - Linux 알림 테스트 가이드 및 smoke evidence 템플릿 추가 - Flutter Test Linux fixture 파일 추가 (open_channel, open_thread) |
||
|---|---|---|
| .. | ||
| android | ||
| integration_test | ||
| ios | ||
| lib | ||
| linux | ||
| macos | ||
| test | ||
| windows/Fixtures | ||
| .gitignore | ||
| analysis_options.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
flutter-test
Test-only Flutter app for the Nexo messaging package.
Purpose
This app is the workspace test harness for packages/messaging_flutter. Keep it
small and focused on proving the messaging/notification package contract:
- plugin registration in a real Flutter application
- method-channel calls from Dart to the native plugin
- event-channel delivery from native code to Dart
- notification-open routing callbacks
- Android manifest merge behavior
- manual Firebase FCM and nexo server ACK smoke testing
This app is not a nexo product app and is not the original Mattermost app. The
original Mattermost app belongs under apps/mattermost/; app-specific product
UI and business logic belong in consuming apps outside this repository.
The app is a plugin API consumer and verification host. Native push handling,
ACK delivery, token/key storage, notification rendering, inline reply, and
dismiss handling remain owned by packages/messaging_flutter.
Thin Host Contract
The host UI should expose only the plugin integration state needed by tests:
device token, raw notification event, opened notification event, and routing
callback state. test/widget_test.dart protects this contract by asserting the
four status lines remain present and product-style controls are not added.
The host app also proves the required SDK integration hooks stay wired without becoming product logic:
- startup calls
NexoMessagingPlugin.instance.initialize()when the harness is not in test-only mode - smoke login values can be bridged to
setAuthToken - device token state is received from
onDeviceTokenReady - notification opens update
onNotificationOpened,onNavigateToChannel, andonNavigateToThreadoutput
Logout/session cleanup remains a consuming-app responsibility; this harness only keeps the callback and token handoff surface visible for tests.
Structure
apps/flutter-test/
lib/ # Small test harness UI
test/ # Widget tests for the harness
integration_test/ # Device/emulator plugin integration tests
android/ # Android test host used to load the plugin
ios/ # iOS host scaffold
macos/ # macOS host scaffold
Running The App
Install dependencies:
flutter pub get
Run on a connected device or emulator:
flutter run
For Android FCM smoke testing, make sure the Android app has the required
Firebase configuration, including android/app/google-services.json.
Use the plugin-owned
Manual Smoke Checklist
for FCM delivery, ACK, inline reply, dismiss, and routing evidence.
For iOS preflight and smoke preparation, keep real Firebase and Apple files out
of git. Copy ios/Runner/GoogleService-Info.example.plist to
ios/Runner/GoogleService-Info.plist locally, replace placeholder values, and
make sure the real plist is added to the Runner target resources in Xcode.
Use ios/Runner/Runner.example.entitlements as the minimal Push Notifications
entitlement reference, then configure the real Runner target through Xcode.
Local routing fixtures live under ios/Fixtures/*.apns; replace
REPLACE_WITH_IOS_BUNDLE_ID before simulator injection.
See ../../docs/ios-notification-test-guide.md
and ../../docs/ios-notification-smoke-evidence-template.md.
For macOS preflight and smoke preparation, keep real signing, provisioning,
notarization, Firebase, APNs, device token, and private host values out of git.
The macOS host scaffold keeps placeholder entitlements only; configure real
signing and notification capability locally when a smoke run requires it. Local
routing fixtures live under macos/Fixtures/*.json. See
../../docs/macos-notification-test-guide.md
and
../../docs/macos-notification-smoke-evidence-template.md.
For Windows preflight and smoke preparation, keep real Microsoft account,
package identity, signing, push credentials, device token, and private host
values out of git. This repository does not currently include a Windows host
scaffold; add one only through a focused implementation plan that also registers
the plugin platform. Local routing fixtures live under
windows/Fixtures/*.json. See
../../docs/windows-notification-test-guide.md
and
../../docs/windows-notification-smoke-evidence-template.md.
Verification
The integration test uses the plugin's test/debug event injection path for method-channel, event-channel, and opened-routing checks, including channel and CRT thread routing. Real FCM delivery, ACK, inline reply, and dismiss behavior remain manual smoke checks.
Run checks from this directory:
flutter analyze
flutter test
flutter test integration_test
Use flutter test for the thin-host contract and flutter test integration_test for real Flutter host registration, method-channel,
event-channel, and opened-routing coverage.
Run Android native unit tests from apps/flutter-test/android:
./gradlew testDebugUnitTest
Android Gradle tests require a configured Android SDK through ANDROID_HOME,
ANDROID_SDK_ROOT, or apps/flutter-test/android/local.properties.
When the local machine does not have a usable Android SDK, device, or emulator,
the expected local result is an environment failure rather than a product
failure. Use the repository-level remote environment guide for Android
integration and native unit verification:
../../packages/messaging_flutter/docs/android-test-environment.md.
Maintenance Rules
- Keep the app thin.
- Prefer deterministic test controls over product-like UI.
- Do not add consuming-app business logic here.
- Do not grow this host into a nexo product app.
- Do not use this path for the original Mattermost app; that belongs under
apps/mattermost/. - Add integration tests here when a plugin behavior needs a real Flutter host.
- Keep manual FCM and server checks documented with the owning module:
Manual Smoke Checklist.