nexo/apps/flutter-test
toki 5e4089c629 feat: notification pipeline implementation
- Update messaging Flutter plugin with Firebase messaging service improvements
- Add notification helper and custom push notification helper enhancements
- Implement notification opened event handling
- Add Android unit tests for payload gate and notification helpers
- Update flutter-test app with integration and widget tests
- Update notification pipeline roadmap and task documentation
2026-05-31 06:34:44 +09:00
..
android update flutter-test config and add m-client-validation task 2026-05-29 11:17:13 +09:00
integration_test feat: notification pipeline implementation 2026-05-31 06:34:44 +09:00
ios refactor: rename apps/client to apps/flutter-test and add mattermost/push-proxy apps 2026-05-28 05:59:35 +09:00
lib update: delete fcm_ack_smoke plans, update flutter-test and messaging_flutter android plugin 2026-05-29 21:02:58 +09:00
macos refactor: rename apps/client to apps/flutter-test and add mattermost/push-proxy apps 2026-05-28 05:59:35 +09:00
test feat: notification pipeline implementation 2026-05-31 06:34:44 +09:00
.gitignore refactor: rename apps/client to apps/flutter-test and add mattermost/push-proxy apps 2026-05-28 05:59:35 +09:00
analysis_options.yaml refactor: rename apps/client to apps/flutter-test and add mattermost/push-proxy apps 2026-05-28 05:59:35 +09:00
pubspec.lock update: client-validation milestone, FCM ack smoke task, flutter-test fixes, and skill updates 2026-05-29 16:47:09 +09:00
pubspec.yaml update: client-validation milestone, FCM ack smoke task, flutter-test fixes, and skill updates 2026-05-29 16:47:09 +09:00
README.md feat: notification pipeline implementation 2026-05-31 06:34:44 +09:00

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, and onNavigateToThread output

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.

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.