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 }