apple_kit

Apple-native services for Radroots iOS and macOS apps
git clone https://radroots.dev/git/apple_kit.git
Log | Files | Refs | README

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