apple_kit

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

RadrootsUserPresenceTestingTests.swift (2211B)


      1 import Foundation
      2 import RadrootsKit
      3 import RadrootsKitTesting
      4 import Testing
      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)
     27     )
     28     let request = try RadrootsUserPresenceRequest(reason: "Delete local Nostr identity")
     29 
     30     await #expect(throws: RadrootsUserPresenceError.userCancelled) {
     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(
     40         status: .unavailable, verificationOutcome: .success(false))
     41     let initialStatus = try await presence.currentStatus()
     42 
     43     await presence.setStatus(
     44         RadrootsUserPresenceStatus(
     45             support: .deviceCredential,
     46             biometryKind: .none,
     47             canEvaluateDeviceCredential: true,
     48             canEvaluateBiometrics: false
     49         )
     50     )
     51     await presence.setVerificationOutcome(.success(true))
     52 
     53     let updatedStatus = try await presence.currentStatus()
     54     let result = try await presence.verify(
     55         RadrootsUserPresenceRequest(reason: "Import local Nostr identity")
     56     )
     57 
     58     #expect(initialStatus == .unavailable)
     59     #expect(updatedStatus.support == .deviceCredential)
     60     #expect(result.verified)
     61 }