92 lines
2.8 KiB
Elixir
92 lines
2.8 KiB
Elixir
|
defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
|
||
|
use Pleroma.DataCase, async: true
|
||
|
|
||
|
alias Pleroma.Akkoma.Translators.LibreTranslate
|
||
|
|
||
|
describe "translating with libre translate" do
|
||
|
setup do
|
||
|
clear_config([:libre_translate, :url], "http://libre.translate/translate")
|
||
|
end
|
||
|
|
||
|
test "should work without an API key" do
|
||
|
Tesla.Mock.mock(fn
|
||
|
%{method: :post, url: "http://libre.translate/translate"} = env ->
|
||
|
assert {:ok, %{"api_key" => nil}} = Jason.decode(env.body)
|
||
|
|
||
|
%Tesla.Env{
|
||
|
status: 200,
|
||
|
body:
|
||
|
Jason.encode!(%{
|
||
|
detectedLanguage: %{
|
||
|
confidence: 83,
|
||
|
language: "ja"
|
||
|
},
|
||
|
translatedText: "I will crush you"
|
||
|
})
|
||
|
}
|
||
|
end)
|
||
|
|
||
|
assert {:ok, "ja", "I will crush you"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en")
|
||
|
end
|
||
|
|
||
|
test "should work with an API key" do
|
||
|
clear_config([:libre_translate, :api_key], "libre_translate_api_key")
|
||
|
|
||
|
Tesla.Mock.mock(fn
|
||
|
%{method: :post, url: "http://libre.translate/translate"} = env ->
|
||
|
assert {:ok, %{"api_key" => "libre_translate_api_key"}} = Jason.decode(env.body)
|
||
|
|
||
|
%Tesla.Env{
|
||
|
status: 200,
|
||
|
body:
|
||
|
Jason.encode!(%{
|
||
|
detectedLanguage: %{
|
||
|
confidence: 83,
|
||
|
language: "ja"
|
||
|
},
|
||
|
translatedText: "I will crush you"
|
||
|
})
|
||
|
}
|
||
|
end)
|
||
|
|
||
|
assert {:ok, "ja", "I will crush you"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en")
|
||
|
end
|
||
|
|
||
|
test "should gracefully handle API key errors" do
|
||
|
clear_config([:libre_translate, :api_key], "")
|
||
|
|
||
|
Tesla.Mock.mock(fn
|
||
|
%{method: :post, url: "http://libre.translate/translate"} ->
|
||
|
%Tesla.Env{
|
||
|
status: 403,
|
||
|
body:
|
||
|
Jason.encode!(%{
|
||
|
error: "Please contact the server operator to obtain an API key"
|
||
|
})
|
||
|
}
|
||
|
end)
|
||
|
|
||
|
assert {:error, "libre_translate: request failed (code 403)"} =
|
||
|
LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en")
|
||
|
end
|
||
|
|
||
|
test "should gracefully handle an unsupported language" do
|
||
|
clear_config([:libre_translate, :api_key], "")
|
||
|
|
||
|
Tesla.Mock.mock(fn
|
||
|
%{method: :post, url: "http://libre.translate/translate"} ->
|
||
|
%Tesla.Env{
|
||
|
status: 400,
|
||
|
body:
|
||
|
Jason.encode!(%{
|
||
|
error: "zoop is not supported"
|
||
|
})
|
||
|
}
|
||
|
end)
|
||
|
|
||
|
assert {:error, "libre_translate: request failed (code 400)"} =
|
||
|
LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "zoop")
|
||
|
end
|
||
|
end
|
||
|
end
|