Allow listing languages, setting source language (#192)
[akkoma] / test / pleroma / translators / libre_translate_test.exs
index 9ed2c53230af9c497b7e532165b286565f7d2192..d28d9278a9aa2672bd9783f66776c2d18b25da1b 100644 (file)
@@ -8,10 +8,35 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
       clear_config([:libre_translate, :url], "http://libre.translate/translate")
     end
 
+    test "should list supported languages" do
+      clear_config([:deepl, :tier], :free)
+
+      Tesla.Mock.mock(fn
+        %{method: :get, url: "http://libre.translate/languages"} = _ ->
+          %Tesla.Env{
+            status: 200,
+            body:
+              Jason.encode!([
+                %{
+                  "code" => "en",
+                  "name" => "English"
+                },
+                %{
+                  "code" => "ar",
+                  "name" => "Arabic"
+                }
+              ])
+          }
+      end)
+
+      assert {:ok, [%{code: "en", name: "English"}, %{code: "ar", name: "Arabic"}]} =
+               LibreTranslate.languages()
+    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)
+          assert {:ok, %{"api_key" => nil, "source" => "auto"}} = Jason.decode(env.body)
 
           %Tesla.Env{
             status: 200,
@@ -26,7 +51,8 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
           }
       end)
 
-      assert {:ok, "ja", "I will crush you"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en")
+      assert {:ok, "ja", "I will crush you"} =
+               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
     end
 
     test "should work with an API key" do
@@ -49,7 +75,8 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
           }
       end)
 
-      assert {:ok, "ja", "I will crush you"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en")
+      assert {:ok, "ja", "I will crush you"} =
+               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
     end
 
     test "should gracefully handle API key errors" do
@@ -67,7 +94,25 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
       end)
 
       assert {:error, "libre_translate: request failed (code 403)"} =
-               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en")
+               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
+    end
+
+    test "should set a source language if requested" do
+      Tesla.Mock.mock(fn
+        %{method: :post, url: "http://libre.translate/translate"} = env ->
+          assert {:ok, %{"api_key" => nil, "source" => "ja"}} = Jason.decode(env.body)
+
+          %Tesla.Env{
+            status: 200,
+            body:
+              Jason.encode!(%{
+                translatedText: "I will crush you"
+              })
+          }
+      end)
+
+      assert {:ok, "ja", "I will crush you"} =
+               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "ja", "en")
     end
 
     test "should gracefully handle an unsupported language" do
@@ -85,7 +130,7 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do
       end)
 
       assert {:error, "libre_translate: request failed (code 400)"} =
-               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "zoop")
+               LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "zoop")
     end
   end
 end