Skip to content

Commit bb37e77

Browse files
committed
use mockchannel for inappmessages tests
1 parent 47289c2 commit bb37e77

File tree

2 files changed

+70
-71
lines changed

2 files changed

+70
-71
lines changed

test/inappmessages_test.dart

Lines changed: 27 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import 'package:flutter_test/flutter_test.dart';
33
import 'package:onesignal_flutter/src/inappmessage.dart';
44
import 'package:onesignal_flutter/src/inappmessages.dart';
55

6+
import 'mock_channel.dart';
7+
68
const validMessageJson = {
79
'message_id': 'test-message-id-123',
810
};
@@ -20,47 +22,28 @@ void main() {
2022

2123
group('OneSignalInAppMessages', () {
2224
late OneSignalInAppMessages inAppMessages;
23-
late List<MethodCall> methodCalls;
25+
late OneSignalMockChannelController channelController;
2426

2527
setUp(() {
26-
methodCalls = [];
28+
channelController = OneSignalMockChannelController();
29+
channelController.resetState();
2730
inAppMessages = OneSignalInAppMessages();
28-
29-
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
30-
.setMockMethodCallHandler(
31-
const MethodChannel('OneSignal#inappmessages'),
32-
(call) async {
33-
methodCalls.add(call);
34-
return null;
35-
},
36-
);
37-
});
38-
39-
tearDown(() {
40-
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
41-
.setMockMethodCallHandler(
42-
const MethodChannel('OneSignal#inappmessages'),
43-
null,
44-
);
4531
});
4632

4733
group('addTrigger', () {
4834
test('invokes OneSignal#addTrigger method with key-value pair', () async {
4935
await inAppMessages.addTrigger(triggerName, 'true');
5036

51-
expect(methodCalls.length, 1);
52-
expect(methodCalls[0].method, 'OneSignal#addTrigger');
53-
expect(methodCalls[0].arguments, {triggerName: 'true'});
37+
expect(channelController.state.triggers, {triggerName: 'true'});
5438
});
5539

5640
test('handles multiple triggers sequentially', () async {
5741
const triggerName2 = 'trigger2';
5842
await inAppMessages.addTrigger(triggerName, 'value1');
59-
await inAppMessages.addTrigger(triggerName2, 'value2');
43+
expect(channelController.state.triggers, {triggerName: 'value1'});
6044

61-
expect(methodCalls.length, 2);
62-
expect(methodCalls[0].arguments, {triggerName: 'value1'});
63-
expect(methodCalls[1].arguments, {triggerName2: 'value2'});
45+
await inAppMessages.addTrigger(triggerName2, 'value2');
46+
expect(channelController.state.triggers, {triggerName2: 'value2'});
6447
});
6548
});
6649

@@ -74,26 +57,21 @@ void main() {
7457

7558
await inAppMessages.addTriggers(triggers);
7659

77-
expect(methodCalls.length, 1);
78-
expect(methodCalls[0].method, 'OneSignal#addTriggers');
79-
expect(methodCalls[0].arguments, triggers);
60+
expect(channelController.state.triggers, triggers);
8061
});
8162

8263
test('handles empty triggers map', () async {
8364
await inAppMessages.addTriggers({});
8465

85-
expect(methodCalls.length, 1);
86-
expect(methodCalls[0].arguments, {});
66+
expect(channelController.state.triggers, {});
8767
});
8868
});
8969

9070
group('removeTrigger', () {
9171
test('invokes OneSignal#removeTrigger method with key', () async {
9272
await inAppMessages.removeTrigger(triggerName);
9373

94-
expect(methodCalls.length, 1);
95-
expect(methodCalls[0].method, 'OneSignal#removeTrigger');
96-
expect(methodCalls[0].arguments, triggerName);
74+
expect(channelController.state.removedTrigger, triggerName);
9775
});
9876
});
9977

@@ -104,69 +82,57 @@ void main() {
10482

10583
await inAppMessages.removeTriggers(keys);
10684

107-
expect(methodCalls.length, 1);
108-
expect(methodCalls[0].method, 'OneSignal#removeTriggers');
109-
expect(methodCalls[0].arguments, keys);
85+
expect(channelController.state.removedTriggers, keys);
11086
});
11187

11288
test('handles empty keys list', () async {
11389
await inAppMessages.removeTriggers([]);
11490

115-
expect(methodCalls.length, 1);
116-
expect(methodCalls[0].arguments, []);
91+
expect(channelController.state.removedTriggers, []);
11792
});
11893
});
11994

12095
group('clearTriggers', () {
12196
test('invokes OneSignal#clearTriggers method', () async {
12297
await inAppMessages.clearTriggers();
12398

124-
expect(methodCalls.length, 1);
125-
expect(methodCalls[0].method, 'OneSignal#clearTriggers');
99+
expect(channelController.state.clearedTriggers, true);
126100
});
127101
});
128102

129103
group('paused', () {
130104
test('invokes OneSignal#paused', () async {
131105
await inAppMessages.paused(true);
132106

133-
expect(methodCalls.length, 1);
134-
expect(methodCalls[0].method, 'OneSignal#paused');
135-
expect(methodCalls[0].arguments, true);
107+
expect(channelController.state.inAppMessagesPaused, true);
136108

137109
await inAppMessages.paused(false);
138110

139-
expect(methodCalls.length, 2);
140-
expect(methodCalls[1].method, 'OneSignal#paused');
141-
expect(methodCalls[1].arguments, false);
111+
expect(channelController.state.inAppMessagesPaused, false);
142112
});
143113
});
144114

145115
group('arePaused', () {
146-
test('invokes OneSignal#arePaused method', () async {
147-
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
148-
.setMockMethodCallHandler(
149-
const MethodChannel('OneSignal#inappmessages'),
150-
(call) async {
151-
if (call.method == 'OneSignal#arePaused') {
152-
return true;
153-
}
154-
return null;
155-
},
156-
);
157-
116+
test('invokes OneSignal#arePaused method and returns correct value',
117+
() async {
118+
await inAppMessages.paused(true);
158119
final result = await inAppMessages.arePaused();
159120

160121
expect(result, true);
161122
});
123+
124+
test('returns false when not paused', () async {
125+
final result = await inAppMessages.arePaused();
126+
127+
expect(result, false);
128+
});
162129
});
163130

164131
group('lifecycleInit', () {
165132
test('invokes OneSignal#lifecycleInit method', () async {
166133
await inAppMessages.lifecycleInit();
167134

168-
expect(methodCalls.length, 1);
169-
expect(methodCalls[0].method, 'OneSignal#lifecycleInit');
135+
expect(channelController.state.lifecycleInitCalled, true);
170136
});
171137
});
172138

@@ -180,7 +146,6 @@ void main() {
180146

181147
inAppMessages.addClickListener(listener);
182148

183-
// Simulate native call to verify listener was added
184149
await inAppMessages.handleMethod(
185150
MethodCall(
186151
'OneSignal#onClickInAppMessage',
@@ -204,7 +169,6 @@ void main() {
204169
inAppMessages.addClickListener(listener);
205170
inAppMessages.removeClickListener(listener);
206171

207-
// Simulate native call to verify listener was removed
208172
await inAppMessages.handleMethod(
209173
MethodCall(
210174
'OneSignal#onClickInAppMessage',
@@ -231,7 +195,6 @@ void main() {
231195

232196
inAppMessages.addWillDisplayListener(listener);
233197

234-
// Simulate native call to verify listener was added
235198
await inAppMessages.handleMethod(
236199
MethodCall(
237200
'OneSignal#onWillDisplayInAppMessage',
@@ -253,7 +216,6 @@ void main() {
253216
inAppMessages.addWillDisplayListener(listener);
254217
inAppMessages.removeWillDisplayListener(listener);
255218

256-
// Simulate native call to verify listener was removed
257219
await inAppMessages.handleMethod(
258220
MethodCall(
259221
'OneSignal#onWillDisplayInAppMessage',
@@ -275,7 +237,6 @@ void main() {
275237

276238
inAppMessages.addDidDisplayListener(listener);
277239

278-
// Simulate native call to verify listener was added
279240
await inAppMessages.handleMethod(
280241
MethodCall(
281242
'OneSignal#onDidDisplayInAppMessage',
@@ -296,7 +257,6 @@ void main() {
296257
inAppMessages.addDidDisplayListener(listener);
297258
inAppMessages.removeDidDisplayListener(listener);
298259

299-
// Simulate native call to verify listener was removed
300260
await inAppMessages.handleMethod(
301261
MethodCall(
302262
'OneSignal#onDidDisplayInAppMessage',
@@ -339,7 +299,6 @@ void main() {
339299

340300
inAppMessages.addWillDismissListener(listener);
341301

342-
// Simulate native call to verify listener was added
343302
await inAppMessages.handleMethod(
344303
MethodCall(
345304
'OneSignal#onWillDismissInAppMessage',
@@ -361,7 +320,6 @@ void main() {
361320
inAppMessages.addWillDismissListener(listener);
362321
inAppMessages.removeWillDismissListener(listener);
363322

364-
// Simulate native call to verify listener was removed
365323
await inAppMessages.handleMethod(
366324
MethodCall(
367325
'OneSignal#onWillDismissInAppMessage',
@@ -385,7 +343,6 @@ void main() {
385343

386344
inAppMessages.addDidDismissListener(listener);
387345

388-
// Simulate native call to verify listener was added
389346
await inAppMessages.handleMethod(
390347
MethodCall(
391348
'OneSignal#onDidDismissInAppMessage',
@@ -407,7 +364,6 @@ void main() {
407364
inAppMessages.addDidDismissListener(listener);
408365
inAppMessages.removeDidDismissListener(listener);
409366

410-
// Simulate native call to verify listener was removed
411367
await inAppMessages.handleMethod(
412368
MethodCall(
413369
'OneSignal#onDidDismissInAppMessage',

test/mock_channel.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ class OneSignalMockChannelController {
1414
final MethodChannel _tagsChannel = const MethodChannel('OneSignal#tags');
1515
final MethodChannel _locationChannel =
1616
const MethodChannel('OneSignal#location');
17+
final MethodChannel _inAppMessagesChannel =
18+
const MethodChannel('OneSignal#inappmessages');
19+
final MethodChannel _liveActivitiesChannel =
20+
const MethodChannel('OneSignal#liveactivities');
1721

1822
late OneSignalState state;
1923

@@ -26,6 +30,10 @@ class OneSignalMockChannelController {
2630
.setMockMethodCallHandler(_debugChannel, _handleMethod);
2731
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
2832
.setMockMethodCallHandler(_locationChannel, _handleMethod);
33+
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
34+
.setMockMethodCallHandler(_inAppMessagesChannel, _handleMethod);
35+
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
36+
.setMockMethodCallHandler(_liveActivitiesChannel, _handleMethod);
2937
}
3038

3139
void resetState() {
@@ -128,6 +136,29 @@ class OneSignalMockChannelController {
128136
state.liveActivityType = (call.arguments
129137
as Map<dynamic, dynamic>)['activityType'] as String?;
130138
break;
139+
case "OneSignal#addTrigger":
140+
state.addTrigger(call.arguments as Map<dynamic, dynamic>);
141+
break;
142+
case "OneSignal#addTriggers":
143+
state.triggers = call.arguments as Map<dynamic, dynamic>?;
144+
return {"success": true};
145+
case "OneSignal#removeTrigger":
146+
state.removedTrigger = call.arguments as String?;
147+
break;
148+
case "OneSignal#removeTriggers":
149+
state.removedTriggers = call.arguments as List<dynamic>?;
150+
return {"success": true};
151+
case "OneSignal#clearTriggers":
152+
state.clearedTriggers = true;
153+
break;
154+
case "OneSignal#paused":
155+
state.inAppMessagesPaused = call.arguments as bool?;
156+
break;
157+
case "OneSignal#arePaused":
158+
return state.inAppMessagesPaused ?? false;
159+
case "OneSignal#lifecycleInit":
160+
state.lifecycleInitCalled = true;
161+
break;
131162
}
132163
}
133164
}
@@ -172,6 +203,14 @@ class OneSignalState {
172203
dynamic liveActivityContent;
173204
Map<dynamic, dynamic>? liveActivitySetupOptions;
174205

206+
// in app messages
207+
bool? inAppMessagesPaused;
208+
bool? lifecycleInitCalled;
209+
Map<dynamic, dynamic>? triggers;
210+
String? removedTrigger;
211+
List<dynamic>? removedTriggers;
212+
bool? clearedTriggers;
213+
175214
// tags
176215
Map<dynamic, dynamic>? tags;
177216
List<dynamic>? deleteTags;
@@ -223,4 +262,8 @@ class OneSignalState {
223262
email = params['email'] as String?;
224263
emailAuthHashToken = params['emailAuthHashToken'] as String?;
225264
}
265+
266+
void addTrigger(Map<dynamic, dynamic> params) {
267+
triggers = params;
268+
}
226269
}

0 commit comments

Comments
 (0)