import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:marianum_mobile/api/marianumconnect/queries/telemetry_heartbeat/telemetry_heartbeat.dart'; import 'package:marianum_mobile/push/push_registration.dart'; void main() { group('PushRegistration.isPermissionUsable', () { test('explicit denial blocks registration', () { for (final status in [ AuthorizationStatus.denied, AuthorizationStatus.deniedPermanently, ]) { expect( PushRegistration.isPermissionUsable(status), isFalse, reason: '$status should block registration', ); } }); test('all other statuses allow registration', () { const usable = [ AuthorizationStatus.authorized, AuthorizationStatus.provisional, AuthorizationStatus.notDetermined, ]; for (final status in usable) { expect( PushRegistration.isPermissionUsable(status), isTrue, reason: '$status should be usable', ); } }); test('covers every AuthorizationStatus value', () { // Guard: if firebase_messaging ever adds a status, revisit the gate. expect(AuthorizationStatus.values, hasLength(5)); }); }); group('PushRegistration.canDisplay', () { test('only authorized and provisional show notifications', () { expect( AuthorizationStatus.values.where(PushRegistration.canDisplay), unorderedEquals([ AuthorizationStatus.authorized, AuthorizationStatus.provisional, ]), ); }); }); group('osPermissionWireValue', () { test('maps every status', () { expect(osPermissionWireValue(AuthorizationStatus.authorized), 'granted'); expect( osPermissionWireValue(AuthorizationStatus.provisional), 'provisional', ); expect(osPermissionWireValue(AuthorizationStatus.denied), 'denied'); expect( osPermissionWireValue(AuthorizationStatus.deniedPermanently), 'denied', ); expect( osPermissionWireValue(AuthorizationStatus.notDetermined), 'notDetermined', ); expect(osPermissionWireValue(null), isNull); }); }); }