RadrootsApplePermissionStatusTests.swift (4542B)
1 import Foundation 2 import Testing 3 @testable import RadrootsKit 4 5 #if canImport(AVFoundation) 6 import AVFoundation 7 #endif 8 9 #if canImport(CoreLocation) 10 import CoreLocation 11 #endif 12 13 #if canImport(Photos) 14 import Photos 15 #endif 16 17 #if canImport(UserNotifications) 18 import UserNotifications 19 #endif 20 21 @Test func applePermissionStatusProviderUsesAdaptersForEachPermissionKind() async throws { 22 let observedAt = Date(timeIntervalSince1970: 42) 23 let provider = RadrootsApplePermissionStatusProvider( 24 adapters: RadrootsApplePermissionStatusAdapters( 25 now: { observedAt }, 26 notificationStatus: { .limited }, 27 cameraStatus: { .authorized }, 28 photosStatus: { .denied }, 29 microphoneStatus: { .restricted }, 30 locationStatus: { .unavailable } 31 ) 32 ) 33 34 let snapshots = try await provider.snapshots(for: [ 35 .notifications, 36 .camera, 37 .photos, 38 .microphone, 39 .location 40 ]) 41 42 #expect(snapshots.map(\.kind) == [.notifications, .camera, .photos, .microphone, .location]) 43 #expect(snapshots.map(\.status) == [.limited, .authorized, .denied, .restricted, .unavailable]) 44 #expect(snapshots.allSatisfy { $0.observedAt == observedAt }) 45 } 46 47 @Test func applePermissionStatusProviderReturnsSingleSnapshot() async throws { 48 let provider = RadrootsApplePermissionStatusProvider( 49 adapters: RadrootsApplePermissionStatusAdapters( 50 now: { Date(timeIntervalSince1970: 5) }, 51 notificationStatus: { .unsupported }, 52 cameraStatus: { .authorized }, 53 photosStatus: { .authorized }, 54 microphoneStatus: { .authorized }, 55 locationStatus: { .denied } 56 ) 57 ) 58 59 let snapshot = try await provider.snapshot(for: .location) 60 61 #expect(snapshot.kind == .location) 62 #expect(snapshot.status == .denied) 63 #expect(snapshot.observedAt == Date(timeIntervalSince1970: 5)) 64 } 65 66 #if canImport(UserNotifications) 67 @Test func applePermissionStatusMapsNotificationStatuses() { 68 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: UNAuthorizationStatus.notDetermined) == .notDetermined) 69 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: UNAuthorizationStatus.denied) == .denied) 70 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: UNAuthorizationStatus.authorized) == .authorized) 71 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: UNAuthorizationStatus.provisional) == .limited) 72 } 73 #endif 74 75 #if canImport(AVFoundation) 76 @Test func applePermissionStatusMapsCaptureStatuses() { 77 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: AVAuthorizationStatus.notDetermined) == .notDetermined) 78 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: AVAuthorizationStatus.restricted) == .restricted) 79 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: AVAuthorizationStatus.denied) == .denied) 80 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: AVAuthorizationStatus.authorized) == .authorized) 81 } 82 #endif 83 84 #if canImport(Photos) 85 @Test func applePermissionStatusMapsPhotoStatuses() { 86 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: PHAuthorizationStatus.notDetermined) == .notDetermined) 87 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: PHAuthorizationStatus.restricted) == .restricted) 88 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: PHAuthorizationStatus.denied) == .denied) 89 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: PHAuthorizationStatus.authorized) == .authorized) 90 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: PHAuthorizationStatus.limited) == .limited) 91 } 92 #endif 93 94 #if canImport(CoreLocation) 95 @Test func applePermissionStatusMapsLocationStatuses() { 96 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: CLAuthorizationStatus.notDetermined) == .notDetermined) 97 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: CLAuthorizationStatus.restricted) == .restricted) 98 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: CLAuthorizationStatus.denied) == .denied) 99 #if os(iOS) 100 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: CLAuthorizationStatus.authorizedWhenInUse) == .authorized) 101 #endif 102 #expect(RadrootsApplePermissionStatusAdapters.permissionStatus(for: CLAuthorizationStatus.authorizedAlways) == .authorized) 103 } 104 #endif