1 defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
2 use Pleroma.DataCase, async: true
4 alias Pleroma.Akkoma.Translators.LibreTranslate
6 describe "translating with libre translate" do
8 clear_config([:libre_translate, :url], "http://libre.translate/translate")
11 test "should list supported languages" do
12 clear_config([:deepl, :tier], :free)
15 %{method: :get, url: "http://libre.translate/languages"} = _ ->
32 assert {:ok, [%{code: "en", name: "English"}, %{code: "ar", name: "Arabic"}]} =
33 LibreTranslate.languages()
36 test "should work without an API key" do
38 %{method: :post, url: "http://libre.translate/translate"} = env ->
39 assert {:ok, %{"api_key" => nil, "source" => "auto"}} = Jason.decode(env.body)
49 translatedText: "I will crush you"
54 assert {:ok, "ja", "I will crush you"} =
55 LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
58 test "should work with an API key" do
59 clear_config([:libre_translate, :api_key], "libre_translate_api_key")
62 %{method: :post, url: "http://libre.translate/translate"} = env ->
63 assert {:ok, %{"api_key" => "libre_translate_api_key"}} = Jason.decode(env.body)
73 translatedText: "I will crush you"
78 assert {:ok, "ja", "I will crush you"} =
79 LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
82 test "should gracefully handle API key errors" do
83 clear_config([:libre_translate, :api_key], "")
86 %{method: :post, url: "http://libre.translate/translate"} ->
91 error: "Please contact the server operator to obtain an API key"
96 assert {:error, "libre_translate: request failed (code 403)"} =
97 LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
100 test "should set a source language if requested" do
102 %{method: :post, url: "http://libre.translate/translate"} = env ->
103 assert {:ok, %{"api_key" => nil, "source" => "ja"}} = Jason.decode(env.body)
109 translatedText: "I will crush you"
114 assert {:ok, "ja", "I will crush you"} =
115 LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "ja", "en")
118 test "should gracefully handle an unsupported language" do
119 clear_config([:libre_translate, :api_key], "")
122 %{method: :post, url: "http://libre.translate/translate"} ->
127 error: "zoop is not supported"
132 assert {:error, "libre_translate: request failed (code 400)"} =
133 LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "zoop")