import Foundation import Testing @testable import ConjureKit @Test func myMemoryTranslatesWithoutCredentialsAndEncodesInput() async throws { let translation = try await MyMemoryAPI.translate("Hello & goodbye?") { request in let items = URLComponents(url: request.url!, resolvingAgainstBaseURL: false)!.queryItems! #expect(items.contains(URLQueryItem(name: "q", value: "Hello & goodbye?"))) #expect(items.contains(URLQueryItem(name: "langpair", value: "en|ja"))) #expect(request.value(forHTTPHeaderField: "Authorization") == nil) return (Data(#"{"responseStatus":200,"quotaFinished":false,"responseData":{"translatedText":"こんにちは"}}"#.utf8), HTTPURLResponse(url: request.url!, statusCode: 200, httpVersion: nil, headerFields: nil)!) } #expect(translation == "こんにちは") await #expect(throws: (any Error).self) { try await MyMemoryAPI.translate(String(repeating: "あ", count: 167)) { _ in Issue.record("Oversized UTF-8 input must not reach the network") throw URLError(.badURL) } } for body in [#"{"responseStatus":200,"quotaFinished":true,"responseData":{"translatedText":"QUOTA EXCEEDED"}}"#, #"{"responseStatus":403,"responseData":{"translatedText":"ERROR"}}"#, #"{"responseStatus":200,"responseData":{"translatedText":""}}"#] { await #expect(throws: (any Error).self) { try await MyMemoryAPI.translate("Hello") { request in (Data(body.utf8), HTTPURLResponse(url: request.url!, statusCode: 200, httpVersion: nil, headerFields: nil)!) } } } }