Files
workavia-mail-front/test/main/permissions/notification_permission_service_test.dart
T
2024-06-19 16:23:29 +07:00

123 lines
3.9 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:tmail_ui_user/features/base/isolate/background_isolate_binary_messenger/background_isolate_binary_messenger_mobile.dart';
import 'package:tmail_ui_user/main/permissions/notification_permission_service.dart';
class TestNotificationPermissionService extends NotificationPermissionService {
bool callCheckGroupPermission = false;
@override
Future<bool> checkGroupPermissionByGroupId(String groupId) {
callCheckGroupPermission = true;
return super.checkGroupPermissionByGroupId(groupId);
}
}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final notificationPermissionService = TestNotificationPermissionService();
void setMockNotificationPermission({
required PermissionStatus currentStatus,
PermissionStatus? requestedStatus,
}) {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
const MethodChannel('flutter.baseflow.com/permissions/methods'),
(message) async {
if (message.method == 'checkPermissionStatus') {
return currentStatus.index;
} else if (message.method == 'requestPermissions') {
assert(
requestedStatus != null,
'mock requested status must not be null '
'when requesting permission');
return {Permission.notification.value: requestedStatus!.index};
}
return null;
});
}
void setMockNotificationGroupStatus({
required bool groupIsBlocked,
}) {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
const MethodChannel('com.linagora.android.teammail.notification.group.permission'),
(message) async {
if (message.method == 'getNotificationGroupPermission') {
return groupIsBlocked;
}
return null;
});
}
group('notification permission service test', () {
test(
'should return false '
'when checkGroupPermission is called '
'and group id is empty',
() async {
// arrange
setMockNotificationGroupStatus(groupIsBlocked: true);
// act
final result = await notificationPermissionService.checkGroupPermissionByGroupId('');
// assert
expect(notificationPermissionService.callCheckGroupPermission, true);
expect(result, false);
});
test(
'should return the status of notification group '
'when checkGroupPermission is called '
'and group id is not empty',
() async {
// arrange
setMockNotificationGroupStatus(groupIsBlocked: true);
// act
final result = await notificationPermissionService.checkGroupPermissionByGroupId('test');
// assert
expect(notificationPermissionService.callCheckGroupPermission, true);
expect(result, true);
});
test(
'should return false '
'when checkNotificationPermissionEnabled is called '
'and permission is not granted',
() async {
// arrange
setMockNotificationPermission(currentStatus: PermissionStatus.permanentlyDenied);
// act
final result = await notificationPermissionService.checkNotificationPermissionEnabled('');
// assert
expect(result, false);
});
test(
'should return the status of notification group '
'when checkNotificationPermissionEnabled is called '
'and permission is not granted',
() async {
// arrange
setMockNotificationPermission(currentStatus: PermissionStatus.granted);
setMockNotificationGroupStatus(groupIsBlocked: true);
// act
final result = await notificationPermissionService.checkGroupPermissionByGroupId('test');
// assert
expect(result, true);
});
});
}