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 }