this repo has no description
1import Foundation
2import Testing
3@testable import CoreATProtocol
4
5@APActor
6final class MockNetworking: Networking {
7 var requestedURLs: [URL] = []
8 var responseData: Data
9 var statusCode: Int
10
11 init(responseData: Data, statusCode: Int = 200) {
12 self.responseData = responseData
13 self.statusCode = statusCode
14 }
15
16 func data(for request: URLRequest, delegate: URLSessionTaskDelegate?) async throws -> (Data, URLResponse) {
17 if let url = request.url {
18 requestedURLs.append(url)
19 }
20 let response = HTTPURLResponse(url: request.url ?? URL(string: "https://example.com")!, statusCode: statusCode, httpVersion: nil, headerFields: [:])!
21 return (responseData, response)
22 }
23}
24
25struct MockDNSResolver: DNSResolving {
26 func txtRecords(for host: String) async throws -> [String] { [] }
27}
28
29@Test("Identity resolver fetches PLC DID documents using full identifier path")
30func identityResolverUsesFullPLCPath() async throws {
31 let documentJSON = """
32 {
33 "id": "did:plc:identifier",
34 "service": [
35 {
36 "id": "#atproto_pds",
37 "type": "AtprotoPersonalDataServer",
38 "serviceEndpoint": "https://example.com"
39 }
40 ]
41 }
42 """.data(using: .utf8)!
43
44 let networking = await MockNetworking(responseData: documentJSON)
45 let httpClient = await OAuthHTTPClient(networking: networking)
46 let resolver = await IdentityResolver(httpClient: httpClient, dnsResolver: MockDNSResolver())
47
48 let document = try await resolver.fetchDIDDocument(for: "did:plc:identifier")
49 #expect(document.id == "did:plc:identifier")
50
51 let requestedPath = await networking.requestedURLs.first?.path
52 #expect(requestedPath == "/did:plc:identifier")
53}