Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 12 additions & 23 deletions lib/src/liveactivities.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

class OneSignalLiveActivities {
Expand All @@ -11,7 +10,7 @@ class OneSignalLiveActivities {
///
/// Only applies to iOS.
Future<void> enterLiveActivity(String activityId, String token) async {
if (Platform.isIOS) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
return await _channel.invokeMethod("OneSignal#enterLiveActivity",
{'activityId': activityId, 'token': token});
}
Expand All @@ -21,7 +20,7 @@ class OneSignalLiveActivities {
///
/// Only applies to iOS.
Future<void> exitLiveActivity(String activityId) async {
if (Platform.isIOS) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
return await _channel.invokeMethod(
"OneSignal#exitLiveActivity", {'activityId': activityId});
}
Expand All @@ -39,7 +38,7 @@ class OneSignalLiveActivities {
///
/// Only applies to iOS.
Future<void> setupDefault({LiveActivitySetupOptions? options}) async {
if (Platform.isIOS) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
dynamic optionsMap;

if (options != null) {
Expand All @@ -62,7 +61,7 @@ class OneSignalLiveActivities {
/// Only applies to iOS.
Future<void> startDefault(
String activityId, dynamic attributes, dynamic content) async {
if (Platform.isIOS) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
return await _channel.invokeMethod("OneSignal#startDefault", {
'activityId': activityId,
'attributes': attributes,
Expand All @@ -78,7 +77,7 @@ class OneSignalLiveActivities {
///
/// Only applies to iOS.
Future<void> setPushToStartToken(String activityType, String token) async {
if (Platform.isIOS) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
return await _channel.invokeMethod("OneSignal#setPushToStartToken",
{'activityType': activityType, 'token': token});
}
Expand All @@ -90,7 +89,7 @@ class OneSignalLiveActivities {
///
/// Only applies to iOS.
Future<void> removePushToStartToken(String activityType) async {
if (Platform.isIOS) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
return await _channel.invokeMethod(
"OneSignal#removePushToStartToken", {'activityType': activityType});
}
Expand All @@ -99,22 +98,12 @@ class OneSignalLiveActivities {

/// The setup options for [OneSignal.LiveActivities.setupDefault].
class LiveActivitySetupOptions {
bool _enablePushToStart = true;
bool _enablePushToUpdate = true;

LiveActivitySetupOptions(
{bool enablePushToStart = true, bool enablePushToUpdate = true}) {
this._enablePushToStart = enablePushToStart;
this._enablePushToUpdate = enablePushToUpdate;
}

/// When true, OneSignal will listen for pushToStart tokens.
bool get enablePushToStart {
return this._enablePushToStart;
}
final bool enablePushToStart;

/// When true, OneSignal will listen for pushToUpdate tokens for each started live activity.
bool get enablePushToUpdate {
return this._enablePushToUpdate;
}
final bool enablePushToUpdate;

LiveActivitySetupOptions(
{this.enablePushToStart = true, this.enablePushToUpdate = true});
}
5 changes: 3 additions & 2 deletions lib/src/notification.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import 'package:onesignal_flutter/src/utils.dart';
import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'dart:convert';

import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'package:onesignal_flutter/src/utils.dart';

/// A class representing the notification, including the
/// payload of the notification as well as additional
/// parameters (such as whether the notification was `shown`
Expand Down
98 changes: 27 additions & 71 deletions test/inappmessages_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:onesignal_flutter/src/inappmessage.dart';
import 'package:onesignal_flutter/src/inappmessages.dart';

import 'mock_channel.dart';

const validMessageJson = {
'message_id': 'test-message-id-123',
};
Expand All @@ -20,47 +22,28 @@ void main() {

group('OneSignalInAppMessages', () {
late OneSignalInAppMessages inAppMessages;
late List<MethodCall> methodCalls;
late OneSignalMockChannelController channelController;

setUp(() {
methodCalls = [];
channelController = OneSignalMockChannelController();
channelController.resetState();
inAppMessages = OneSignalInAppMessages();

TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
const MethodChannel('OneSignal#inappmessages'),
(call) async {
methodCalls.add(call);
return null;
},
);
});

tearDown(() {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
const MethodChannel('OneSignal#inappmessages'),
null,
);
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#addTrigger');
expect(methodCalls[0].arguments, {triggerName: 'true'});
expect(channelController.state.triggers, {triggerName: 'true'});
});

test('handles multiple triggers sequentially', () async {
const triggerName2 = 'trigger2';
await inAppMessages.addTrigger(triggerName, 'value1');
await inAppMessages.addTrigger(triggerName2, 'value2');
expect(channelController.state.triggers, {triggerName: 'value1'});

expect(methodCalls.length, 2);
expect(methodCalls[0].arguments, {triggerName: 'value1'});
expect(methodCalls[1].arguments, {triggerName2: 'value2'});
await inAppMessages.addTrigger(triggerName2, 'value2');
expect(channelController.state.triggers, {triggerName2: 'value2'});
});
});

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

await inAppMessages.addTriggers(triggers);

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#addTriggers');
expect(methodCalls[0].arguments, triggers);
expect(channelController.state.triggers, triggers);
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].arguments, {});
expect(channelController.state.triggers, {});
});
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#removeTrigger');
expect(methodCalls[0].arguments, triggerName);
expect(channelController.state.removedTrigger, triggerName);
});
});

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

await inAppMessages.removeTriggers(keys);

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#removeTriggers');
expect(methodCalls[0].arguments, keys);
expect(channelController.state.removedTriggers, keys);
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].arguments, []);
expect(channelController.state.removedTriggers, []);
});
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#clearTriggers');
expect(channelController.state.clearedTriggers, true);
});
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#paused');
expect(methodCalls[0].arguments, true);
expect(channelController.state.inAppMessagesPaused, true);

await inAppMessages.paused(false);

expect(methodCalls.length, 2);
expect(methodCalls[1].method, 'OneSignal#paused');
expect(methodCalls[1].arguments, false);
expect(channelController.state.inAppMessagesPaused, false);
});
});

group('arePaused', () {
test('invokes OneSignal#arePaused method', () async {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
const MethodChannel('OneSignal#inappmessages'),
(call) async {
if (call.method == 'OneSignal#arePaused') {
return true;
}
return null;
},
);

test('invokes OneSignal#arePaused method and returns correct value',
() async {
await inAppMessages.paused(true);
final result = await inAppMessages.arePaused();

expect(result, true);
});

test('returns false when not paused', () async {
final result = await inAppMessages.arePaused();

expect(result, false);
});
});

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

expect(methodCalls.length, 1);
expect(methodCalls[0].method, 'OneSignal#lifecycleInit');
expect(channelController.state.lifecycleInitCalled, true);
});
});

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

inAppMessages.addClickListener(listener);

// Simulate native call to verify listener was added
await inAppMessages.handleMethod(
MethodCall(
'OneSignal#onClickInAppMessage',
Expand All @@ -204,7 +169,6 @@ void main() {
inAppMessages.addClickListener(listener);
inAppMessages.removeClickListener(listener);

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

inAppMessages.addWillDisplayListener(listener);

// Simulate native call to verify listener was added
await inAppMessages.handleMethod(
MethodCall(
'OneSignal#onWillDisplayInAppMessage',
Expand All @@ -253,7 +216,6 @@ void main() {
inAppMessages.addWillDisplayListener(listener);
inAppMessages.removeWillDisplayListener(listener);

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

inAppMessages.addDidDisplayListener(listener);

// Simulate native call to verify listener was added
await inAppMessages.handleMethod(
MethodCall(
'OneSignal#onDidDisplayInAppMessage',
Expand All @@ -296,7 +257,6 @@ void main() {
inAppMessages.addDidDisplayListener(listener);
inAppMessages.removeDidDisplayListener(listener);

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

inAppMessages.addWillDismissListener(listener);

// Simulate native call to verify listener was added
await inAppMessages.handleMethod(
MethodCall(
'OneSignal#onWillDismissInAppMessage',
Expand All @@ -361,7 +320,6 @@ void main() {
inAppMessages.addWillDismissListener(listener);
inAppMessages.removeWillDismissListener(listener);

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

inAppMessages.addDidDismissListener(listener);

// Simulate native call to verify listener was added
await inAppMessages.handleMethod(
MethodCall(
'OneSignal#onDidDismissInAppMessage',
Expand All @@ -407,7 +364,6 @@ void main() {
inAppMessages.addDidDismissListener(listener);
inAppMessages.removeDidDismissListener(listener);

// Simulate native call to verify listener was removed
await inAppMessages.handleMethod(
MethodCall(
'OneSignal#onDidDismissInAppMessage',
Expand Down
Loading