Skip to content

Commit e36a955

Browse files
committed
add session test
1 parent e81416a commit e36a955

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed

test/mock_channel.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class OneSignalMockChannelController {
2222
const MethodChannel('OneSignal#notifications');
2323
final MethodChannel _pushSubscriptionChannel =
2424
const MethodChannel('OneSignal#pushsubscription');
25+
final MethodChannel _sessionChannel =
26+
const MethodChannel('OneSignal#session');
2527

2628
late OneSignalState state;
2729

@@ -42,6 +44,8 @@ class OneSignalMockChannelController {
4244
.setMockMethodCallHandler(_notificationsChannel, _handleMethod);
4345
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
4446
.setMockMethodCallHandler(_pushSubscriptionChannel, _handleMethod);
47+
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
48+
.setMockMethodCallHandler(_sessionChannel, _handleMethod);
4549
}
4650

4751
void resetState() {
@@ -239,6 +243,20 @@ class OneSignalMockChannelController {
239243
state.pushSubscriptionOptOutCalled = true;
240244
state.pushSubscriptionOptOutCallCount++;
241245
break;
246+
case "OneSignal#addOutcome":
247+
state.addedOutcome = call.arguments as String;
248+
state.addOutcomeCallCount++;
249+
break;
250+
case "OneSignal#addUniqueOutcome":
251+
state.addedUniqueOutcome = call.arguments as String;
252+
state.addUniqueOutcomeCallCount++;
253+
break;
254+
case "OneSignal#addOutcomeWithValue":
255+
final args = call.arguments as Map<dynamic, dynamic>;
256+
state.addedOutcomeWithValueName = args['outcome_name'] as String;
257+
state.addedOutcomeWithValueValue = args['outcome_value'] as double;
258+
state.addOutcomeWithValueCallCount++;
259+
break;
242260
}
243261
}
244262
}
@@ -322,6 +340,15 @@ class OneSignalState {
322340
int pushSubscriptionOptInCallCount = 0;
323341
int pushSubscriptionOptOutCallCount = 0;
324342

343+
// session outcomes
344+
String? addedOutcome;
345+
int addOutcomeCallCount = 0;
346+
String? addedUniqueOutcome;
347+
int addUniqueOutcomeCallCount = 0;
348+
String? addedOutcomeWithValueName;
349+
double? addedOutcomeWithValueValue;
350+
int addOutcomeWithValueCallCount = 0;
351+
325352
/*
326353
All of the following functions parse the MethodCall
327354
parameters, and sets properties on the object itself

test/session_test.dart

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:onesignal_flutter/src/session.dart';
3+
4+
import 'mock_channel.dart';
5+
6+
void main() {
7+
TestWidgetsFlutterBinding.ensureInitialized();
8+
9+
group('OneSignalSession', () {
10+
late OneSignalSession session;
11+
late OneSignalMockChannelController channelController;
12+
13+
setUp(() {
14+
channelController = OneSignalMockChannelController();
15+
channelController.resetState();
16+
session = OneSignalSession();
17+
});
18+
19+
group('addOutcome', () {
20+
test('invokes OneSignal#addOutcome with outcome name', () async {
21+
const outcomeName = 'test_outcome';
22+
23+
await session.addOutcome(outcomeName);
24+
25+
expect(channelController.state.addedOutcome, outcomeName);
26+
});
27+
28+
test('can be called multiple times', () async {
29+
await session.addOutcome('outcome1');
30+
await session.addOutcome('outcome2');
31+
await session.addOutcome('outcome3');
32+
33+
expect(channelController.state.addedOutcome, 'outcome3');
34+
expect(channelController.state.addOutcomeCallCount, 3);
35+
});
36+
37+
test('handles empty string outcome name', () async {
38+
await session.addOutcome('');
39+
40+
expect(channelController.state.addedOutcome, '');
41+
});
42+
});
43+
44+
group('addUniqueOutcome', () {
45+
test('invokes OneSignal#addUniqueOutcome with outcome name', () async {
46+
const outcomeName = 'unique_outcome';
47+
48+
await session.addUniqueOutcome(outcomeName);
49+
50+
expect(channelController.state.addedUniqueOutcome, outcomeName);
51+
});
52+
53+
test('can be called multiple times', () async {
54+
await session.addUniqueOutcome('unique1');
55+
await session.addUniqueOutcome('unique2');
56+
57+
expect(channelController.state.addedUniqueOutcome, 'unique2');
58+
expect(channelController.state.addUniqueOutcomeCallCount, 2);
59+
});
60+
61+
test('handles empty string outcome name', () async {
62+
await session.addUniqueOutcome('');
63+
64+
expect(channelController.state.addedUniqueOutcome, '');
65+
});
66+
});
67+
68+
group('addOutcomeWithValue', () {
69+
test('invokes OneSignal#addOutcomeWithValue with name and value',
70+
() async {
71+
const outcomeName = 'valued_outcome';
72+
const outcomeValue = 42.5;
73+
74+
await session.addOutcomeWithValue(outcomeName, outcomeValue);
75+
76+
expect(channelController.state.addedOutcomeWithValueName, outcomeName);
77+
expect(
78+
channelController.state.addedOutcomeWithValueValue, outcomeValue);
79+
});
80+
81+
test('handles negative value', () async {
82+
const outcomeName = 'negative_outcome';
83+
const outcomeValue = -10.5;
84+
85+
await session.addOutcomeWithValue(outcomeName, outcomeValue);
86+
87+
expect(channelController.state.addedOutcomeWithValueName, outcomeName);
88+
expect(
89+
channelController.state.addedOutcomeWithValueValue, outcomeValue);
90+
});
91+
92+
test('can be called multiple times with different values', () async {
93+
await session.addOutcomeWithValue('outcome1', 10.0);
94+
await session.addOutcomeWithValue('outcome2', 20.5);
95+
await session.addOutcomeWithValue('outcome3', 30.75);
96+
97+
expect(channelController.state.addedOutcomeWithValueName, 'outcome3');
98+
expect(channelController.state.addedOutcomeWithValueValue, 30.75);
99+
expect(channelController.state.addOutcomeWithValueCallCount, 3);
100+
});
101+
102+
test('handles empty string outcome name with value', () async {
103+
const outcomeValue = 15.5;
104+
105+
await session.addOutcomeWithValue('', outcomeValue);
106+
107+
expect(channelController.state.addedOutcomeWithValueName, '');
108+
expect(
109+
channelController.state.addedOutcomeWithValueValue, outcomeValue);
110+
});
111+
});
112+
});
113+
}

0 commit comments

Comments
 (0)