import Foundation import Testing @testable import CoreATProtocol @Test("Client metadata decodes from sample JSON") func decodeClientMetadata() throws { let json = """ { "client_id": "https://sparrowtek.com/plume.json", "client_name": "Plume iOS", "application_type": "native", "grant_types": [ "authorization_code", "refresh_token" ], "scope": "atproto", "response_types": [ "code" ], "redirect_uris": [ "com.sparrowtek.plume:/oauth/callback" ], "token_endpoint_auth_method": "none", "dpop_bound_access_tokens": true, "client_uri": "https://sparrowtek.com", "policy_uri": "https://sparrowtek.com/privacy", "tos_uri": "https://sparrowtek.com/terms" } """.data(using: .utf8)! let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase let metadata = try decoder.decode(OAuthClientMetadata.self, from: json) #expect(metadata.clientID.absoluteString == "https://sparrowtek.com/plume.json") #expect(metadata.redirectURIs.count == 1) #expect(metadata.dPoPBoundAccessTokens) }