diff --git a/lib/src/inappmessages.dart b/lib/src/inappmessages.dart index 4c0d8eb..ca10b3e 100644 --- a/lib/src/inappmessages.dart +++ b/lib/src/inappmessages.dart @@ -21,7 +21,7 @@ class OneSignalInAppMessages { // constructor method OneSignalInAppMessages() { - this._channel.setMethodCallHandler(handleMethod); + this._channel.setMethodCallHandler(_handleMethod); } List _clickListeners = @@ -79,8 +79,7 @@ class OneSignalInAppMessages { } // Private function that gets called by ObjC/Java - // Exposed as public for testing purposes - Future handleMethod(MethodCall call) async { + Future _handleMethod(MethodCall call) async { if (call.method == 'OneSignal#onClickInAppMessage') { for (var listener in _clickListeners) { listener( diff --git a/lib/src/notifications.dart b/lib/src/notifications.dart index 10aa38c..bc4d4fb 100644 --- a/lib/src/notifications.dart +++ b/lib/src/notifications.dart @@ -26,7 +26,7 @@ class OneSignalNotifications { []; // constructor method OneSignalNotifications() { - this._channel.setMethodCallHandler(handleMethod); + this._channel.setMethodCallHandler(_handleMethod); } bool _permission = false; @@ -123,7 +123,7 @@ class OneSignalNotifications { return await _channel.invokeMethod("OneSignal#lifecycleInit"); } - Future handleMethod(MethodCall call) async { + Future _handleMethod(MethodCall call) async { if (call.method == 'OneSignal#onClickNotification') { for (var listener in _clickListeners) { listener( diff --git a/pubspec.yaml b/pubspec.yaml index 8ecf0d2..c0a9a16 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -27,5 +27,5 @@ dev_dependencies: rps: ^0.9.1 environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.12.0 <4.0.0" + flutter: ">=2.0.0" diff --git a/test/inappmessages_test.dart b/test/inappmessages_test.dart index 52844cf..ae7a61f 100644 --- a/test/inappmessages_test.dart +++ b/test/inappmessages_test.dart @@ -1,4 +1,3 @@ -import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:onesignal_flutter/src/inappmessage.dart'; import 'package:onesignal_flutter/src/inappmessages.dart'; @@ -146,14 +145,12 @@ void main() { inAppMessages.addClickListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onClickInAppMessage', - { - 'message': validMessageJson, - 'result': validClickResultJson, - }, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onClickInAppMessage', + { + 'message': validMessageJson, + 'result': validClickResultJson, + }, ); expect(listenerCalled, true); @@ -169,14 +166,12 @@ void main() { inAppMessages.addClickListener(listener); inAppMessages.removeClickListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onClickInAppMessage', - { - 'message': validMessageJson, - 'result': validClickResultJson, - }, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onClickInAppMessage', + { + 'message': validMessageJson, + 'result': validClickResultJson, + }, ); expect(listenerCalled, false); @@ -195,11 +190,9 @@ void main() { inAppMessages.addWillDisplayListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onWillDisplayInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onWillDisplayInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, true); @@ -216,11 +209,9 @@ void main() { inAppMessages.addWillDisplayListener(listener); inAppMessages.removeWillDisplayListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onWillDisplayInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onWillDisplayInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, false); @@ -237,11 +228,9 @@ void main() { inAppMessages.addDidDisplayListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onDidDisplayInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onDidDisplayInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, true); @@ -257,11 +246,9 @@ void main() { inAppMessages.addDidDisplayListener(listener); inAppMessages.removeDidDisplayListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onDidDisplayInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onDidDisplayInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, false); @@ -276,11 +263,9 @@ void main() { inAppMessages.addDidDisplayListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onDidDisplayInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onDidDisplayInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, true); @@ -299,11 +284,9 @@ void main() { inAppMessages.addWillDismissListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onWillDismissInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onWillDismissInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, true); @@ -320,11 +303,9 @@ void main() { inAppMessages.addWillDismissListener(listener); inAppMessages.removeWillDismissListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onWillDismissInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onWillDismissInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, false); @@ -343,11 +324,9 @@ void main() { inAppMessages.addDidDismissListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onDidDismissInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onDidDismissInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, true); @@ -364,11 +343,9 @@ void main() { inAppMessages.addDidDismissListener(listener); inAppMessages.removeDidDismissListener(listener); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onDidDismissInAppMessage', - {'message': validMessageJson}, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onDidDismissInAppMessage', + {'message': validMessageJson}, ); expect(listenerCalled, false); @@ -390,14 +367,12 @@ void main() { inAppMessages.addClickListener(listener1); inAppMessages.addClickListener(listener2); - await inAppMessages.handleMethod( - MethodCall( - 'OneSignal#onClickInAppMessage', - { - 'message': validMessageJson, - 'result': validClickResultJson, - }, - ), + channelController.simulateInAppMessageEvent( + 'OneSignal#onClickInAppMessage', + { + 'message': validMessageJson, + 'result': validClickResultJson, + }, ); expect(listenerCount, 2); diff --git a/test/mock_channel.dart b/test/mock_channel.dart index 3debb6f..4eedbac 100644 --- a/test/mock_channel.dart +++ b/test/mock_channel.dart @@ -79,6 +79,66 @@ class OneSignalMockChannelController { ); } + // Generic helper method to simulate method calls from native on any channel + void simulateMethodCall( + String channelName, String methodName, dynamic arguments) { + final MethodChannel channel; + + switch (channelName) { + case 'OneSignal': + channel = _channel; + break; + case 'OneSignal#debug': + channel = _debugChannel; + break; + case 'OneSignal#tags': + channel = _tagsChannel; + break; + case 'OneSignal#location': + channel = _locationChannel; + break; + case 'OneSignal#inappmessages': + channel = _inAppMessagesChannel; + break; + case 'OneSignal#liveactivities': + channel = _liveActivitiesChannel; + break; + case 'OneSignal#notifications': + channel = _notificationsChannel; + break; + case 'OneSignal#pushsubscription': + channel = _pushSubscriptionChannel; + break; + case 'OneSignal#session': + channel = _sessionChannel; + break; + case 'OneSignal#user': + channel = _userChannel; + break; + default: + throw ArgumentError('Unknown channel: $channelName'); + } + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + channel.name, + channel.codec.encodeMethodCall( + MethodCall(methodName, arguments), + ), + (ByteData? data) {}, + ); + } + + // Convenience wrapper for in-app message events + void simulateInAppMessageEvent(String eventName, Map data) { + simulateMethodCall('OneSignal#inappmessages', eventName, data); + } + + // Convenience wrapper for notification events + void simulateNotificationEvent(String eventName, Map data) { + simulateMethodCall('OneSignal#notifications', eventName, data); + } + Future _handleMethod(MethodCall call) async { switch (call.method) { case "OneSignal#initialize": diff --git a/test/notifications_test.dart b/test/notifications_test.dart index 1b002bc..f59a52e 100644 --- a/test/notifications_test.dart +++ b/test/notifications_test.dart @@ -1,5 +1,4 @@ import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:onesignal_flutter/src/defines.dart'; import 'package:onesignal_flutter/src/notification.dart'; @@ -289,8 +288,8 @@ void main() { } notifications.addForegroundWillDisplayListener(listener); - await notifications.handleMethod(MethodCall( - 'OneSignal#onWillDisplayNotification', notificationData)); + channelController.simulateNotificationEvent( + 'OneSignal#onWillDisplayNotification', notificationData); expect(listenerCalled, true); }); @@ -303,8 +302,8 @@ void main() { notifications.addForegroundWillDisplayListener(listener); notifications.removeForegroundWillDisplayListener(listener); - await notifications.handleMethod(MethodCall( - 'OneSignal#onWillDisplayNotification', notificationData)); + channelController.simulateNotificationEvent( + 'OneSignal#onWillDisplayNotification', notificationData); expect(listenerCalled, false); }); @@ -323,8 +322,8 @@ void main() { notifications.addForegroundWillDisplayListener(listener1); notifications.addForegroundWillDisplayListener(listener2); - await notifications.handleMethod(MethodCall( - 'OneSignal#onWillDisplayNotification', notificationData)); + channelController.simulateNotificationEvent( + 'OneSignal#onWillDisplayNotification', notificationData); expect(listener1Called, true); expect(listener2Called, true); @@ -345,8 +344,8 @@ void main() { notifications.addForegroundWillDisplayListener(listener2); notifications.removeForegroundWillDisplayListener(listener1); - await notifications.handleMethod(MethodCall( - 'OneSignal#onWillDisplayNotification', notificationData)); + channelController.simulateNotificationEvent( + 'OneSignal#onWillDisplayNotification', notificationData); expect(listener1Called, false); expect(listener2Called, true);