feat: offer no-key MyMemory translation provider
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
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)!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user