RadrootsExternalActionsTests.swift (3370B)
1 import Foundation 2 import Testing 3 4 @testable import RadrootsKit 5 6 @Test func webDestinationAcceptsOnlyHttpsUrlsWithHosts() throws { 7 let destination = try RadrootsExternalActionDestination.web(" https://radroots.org/field ") 8 9 #expect(destination.kind == .web) 10 #expect(destination.url?.absoluteString == "https://radroots.org/field") 11 12 #expect(throws: RadrootsExternalActionError.blockedByPolicy) { 13 _ = try RadrootsExternalActionDestination.web("http://radroots.org") 14 } 15 #expect(throws: RadrootsExternalActionError.blockedByPolicy) { 16 _ = try RadrootsExternalActionDestination.web("wss://radroots.org") 17 } 18 #expect(throws: RadrootsExternalActionError.blockedByPolicy) { 19 _ = try RadrootsExternalActionDestination.web("https:///missing-host") 20 } 21 #expect(throws: RadrootsExternalActionError.invalidRequest) { 22 _ = try RadrootsExternalActionDestination.web("https://radroots.org/a b") 23 } 24 } 25 26 @Test func nostrDestinationAllowsPublicIdentifiersAndRejectsSecrets() throws { 27 let destination = try RadrootsExternalActionDestination.nostr("nostr:NPUB1qqqqqq") 28 29 #expect(destination.kind == .nostr) 30 #expect(destination.url?.absoluteString == "nostr:npub1qqqqqq") 31 32 _ = try RadrootsExternalActionDestination.nostr("nostr:nprofile1qqqqqq") 33 _ = try RadrootsExternalActionDestination.nostr("nostr:note1qqqqqq") 34 _ = try RadrootsExternalActionDestination.nostr("nostr:nevent1qqqqqq") 35 _ = try RadrootsExternalActionDestination.nostr("nostr:naddr1qqqqqq") 36 _ = try RadrootsExternalActionDestination.nostr("nostr:nrelay1qqqqqq") 37 38 #expect(throws: RadrootsExternalActionError.blockedByPolicy) { 39 _ = try RadrootsExternalActionDestination.nostr("nostr:nsec1qqqqqq") 40 } 41 #expect(throws: RadrootsExternalActionError.blockedByPolicy) { 42 _ = try RadrootsExternalActionDestination.nostr("nostr:relay1qqqqqq") 43 } 44 #expect(throws: RadrootsExternalActionError.invalidRequest) { 45 _ = try RadrootsExternalActionDestination.nostr("nostr:npub1qq q") 46 } 47 } 48 49 @Test func appleMapsDestinationBuildsSafeMapsUrls() throws { 50 let coordinate = try RadrootsLocationCoordinate(latitude: 49.2827, longitude: -123.1207) 51 let destination = try RadrootsExternalActionDestination.appleMaps( 52 coordinate: coordinate, 53 label: "Field Site" 54 ) 55 56 #expect(destination.kind == .appleMaps) 57 #expect(destination.url?.scheme == "https") 58 #expect(destination.url?.host == "maps.apple.com") 59 #expect(destination.url?.absoluteString.contains("ll=49.2827,-123.1207") == true) 60 #expect(destination.url?.absoluteString.contains("q=Field%20Site") == true) 61 62 _ = try RadrootsExternalActionDestination.appleMaps("https://maps.apple.com/?q=Field") 63 64 #expect(throws: RadrootsExternalActionError.blockedByPolicy) { 65 _ = try RadrootsExternalActionDestination.appleMaps("https://example.com/maps") 66 } 67 } 68 69 @Test func externalActionRequestPreservesDestination() throws { 70 let destination = try RadrootsExternalActionDestination.web("https://radroots.org") 71 let request = RadrootsExternalActionRequest(destination: destination) 72 let capability = RadrootsExternalActionCapability(destination: destination, canOpen: true) 73 74 #expect(request.destination == destination) 75 #expect(capability.destination == destination) 76 #expect(capability.canOpen) 77 }