apple_kit

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

RadrootsUserPresenceTestingTests.swift (2254B)


      1 import Foundation
      2 import Testing
      3 import RadrootsKit
      4 import RadrootsKitTesting
      5 
      6 @Test func fakeUserPresenceRecordsStatusAndVerificationRequests() async throws {
      7     let presence = RadrootsFakeUserPresence()
      8     let status = try await presence.currentStatus()
      9     let request = try RadrootsUserPresenceRequest(
     10         policy: .deviceOwnerAuthentication,
     11         reason: "Unlock local Nostr identity"
     12     )
     13     let result = try await presence.verify(request)
     14 
     15     #expect(status.support == .biometricsOrDeviceCredential)
     16     #expect(result.policy == .deviceOwnerAuthentication)
     17     #expect(result.verified)
     18     #expect(await presence.statusRequestCount == 1)
     19     #expect(await presence.verificationRequestCount == 1)
     20     #expect(await presence.lastVerificationRequest == request)
     21     #expect(await presence.verificationRequests == [request])
     22 }
     23 
     24 @Test func fakeUserPresenceReturnsConfiguredFailures() async throws {
     25     let presence = RadrootsFakeUserPresence(
     26         verificationOutcome: .failure(.userCancelled("verification cancelled"))
     27     )
     28     let request = try RadrootsUserPresenceRequest(reason: "Delete local Nostr identity")
     29 
     30     await #expect(throws: RadrootsUserPresenceError.userCancelled("verification cancelled")) {
     31         try await presence.verify(request)
     32     }
     33 
     34     #expect(await presence.verificationRequestCount == 1)
     35     #expect(await presence.lastVerificationRequest == request)
     36 }
     37 
     38 @Test func fakeUserPresenceCanUpdateStatusAndOutcome() async throws {
     39     let presence = RadrootsFakeUserPresence(status: .unavailable, verificationOutcome: .success(false))
     40     let initialStatus = try await presence.currentStatus()
     41 
     42     await presence.setStatus(
     43         RadrootsUserPresenceStatus(
     44             support: .deviceCredential,
     45             biometryKind: .none,
     46             canEvaluateDeviceCredential: true,
     47             canEvaluateBiometrics: false
     48         )
     49     )
     50     await presence.setVerificationOutcome(.success(true))
     51 
     52     let updatedStatus = try await presence.currentStatus()
     53     let result = try await presence.verify(
     54         RadrootsUserPresenceRequest(reason: "Import local Nostr identity")
     55     )
     56 
     57     #expect(initialStatus == .unavailable)
     58     #expect(updatedStatus.support == .deviceCredential)
     59     #expect(result.verified)
     60 }