@@ -24,6 +24,7 @@ class OneSignalMockChannelController {
2424 const MethodChannel ('OneSignal#pushsubscription' );
2525 final MethodChannel _sessionChannel =
2626 const MethodChannel ('OneSignal#session' );
27+ final MethodChannel _userChannel = const MethodChannel ('OneSignal#user' );
2728
2829 late OneSignalState state;
2930
@@ -46,6 +47,8 @@ class OneSignalMockChannelController {
4647 .setMockMethodCallHandler (_pushSubscriptionChannel, _handleMethod);
4748 TestDefaultBinaryMessengerBinding .instance.defaultBinaryMessenger
4849 .setMockMethodCallHandler (_sessionChannel, _handleMethod);
50+ TestDefaultBinaryMessengerBinding .instance.defaultBinaryMessenger
51+ .setMockMethodCallHandler (_userChannel, _handleMethod);
4952 }
5053
5154 void resetState () {
@@ -64,6 +67,18 @@ class OneSignalMockChannelController {
6467 );
6568 }
6669
70+ // Helper method to simulate user state changes from native
71+ void simulateUserStateChange (Map <String , dynamic > changeData) {
72+ TestDefaultBinaryMessengerBinding .instance.defaultBinaryMessenger
73+ .handlePlatformMessage (
74+ _userChannel.name,
75+ _userChannel.codec.encodeMethodCall (
76+ MethodCall ('OneSignal#onUserStateChange' , changeData),
77+ ),
78+ (ByteData ? data) {},
79+ );
80+ }
81+
6782 Future <dynamic > _handleMethod (MethodCall call) async {
6883 switch (call.method) {
6984 case "OneSignal#setAppId" :
@@ -257,6 +272,46 @@ class OneSignalMockChannelController {
257272 state.addedOutcomeWithValueValue = args['outcome_value' ] as double ;
258273 state.addOutcomeWithValueCallCount++ ;
259274 break ;
275+ case "OneSignal#setLanguage" :
276+ state.language =
277+ (call.arguments as Map <dynamic , dynamic >)['language' ] as String ? ;
278+ break ;
279+ case "OneSignal#addAliases" :
280+ state.aliases = call.arguments as Map <dynamic , dynamic >? ;
281+ break ;
282+ case "OneSignal#removeAliases" :
283+ state.removedAliases = call.arguments as List <dynamic >? ;
284+ break ;
285+ case "OneSignal#addTags" :
286+ state.tags = call.arguments as Map <dynamic , dynamic >? ;
287+ break ;
288+ case "OneSignal#removeTags" :
289+ state.deleteTags = call.arguments as List <dynamic >? ;
290+ break ;
291+ case "OneSignal#getTags" :
292+ return state.tags ?? {};
293+ case "OneSignal#addEmail" :
294+ state.addedEmail = call.arguments as String ? ;
295+ break ;
296+ case "OneSignal#removeEmail" :
297+ state.removedEmail = call.arguments as String ? ;
298+ break ;
299+ case "OneSignal#addSms" :
300+ state.addedSms = call.arguments as String ? ;
301+ break ;
302+ case "OneSignal#removeSms" :
303+ state.removedSms = call.arguments as String ? ;
304+ break ;
305+ case "OneSignal#getExternalId" :
306+ return state.externalId;
307+ case "OneSignal#getOnesignalId" :
308+ return state.onesignalId;
309+ case "OneSignal#lifecycleInit" :
310+ // Could be from user, inappmessages, or pushsubscription
311+ // We'll track both
312+ state.lifecycleInitCalled = true ;
313+ state.userLifecycleInitCalled = true ;
314+ break ;
260315 }
261316 }
262317}
@@ -349,6 +404,16 @@ class OneSignalState {
349404 double ? addedOutcomeWithValueValue;
350405 int addOutcomeWithValueCallCount = 0 ;
351406
407+ // user
408+ String ? onesignalId;
409+ Map <dynamic , dynamic >? aliases;
410+ List <dynamic >? removedAliases;
411+ String ? addedEmail;
412+ String ? removedEmail;
413+ String ? addedSms;
414+ String ? removedSms;
415+ bool ? userLifecycleInitCalled;
416+
352417 /*
353418 All of the following functions parse the MethodCall
354419 parameters, and sets properties on the object itself
0 commit comments