1 defmodule Pleroma.Akkoma.Translators.DeepLTest do
2 use Pleroma.DataCase, async: true
4 alias Pleroma.Akkoma.Translators.DeepL
6 describe "translating with deepl" do
8 clear_config([:deepl, :api_key], "deepl_api_key")
11 test "should list supported languages" do
12 clear_config([:deepl, :tier], :free)
15 %{method: :get, url: "https://api-free.deepl.com/v2/languages?type=target"} = env ->
16 auth_header = Enum.find(env.headers, fn {k, _v} -> k == "authorization" end)
17 assert {"authorization", "DeepL-Auth-Key deepl_api_key"} = auth_header
25 "name" => "Bulgarian",
26 "supports_formality" => false
31 "supports_formality" => false
37 assert {:ok, [%{code: "BG", name: "Bulgarian"}, %{code: "CS", name: "Czech"}]} =
41 test "should work with the free tier" do
42 clear_config([:deepl, :tier], :free)
45 %{method: :post, url: "https://api-free.deepl.com/v2/translate"} = env ->
46 auth_header = Enum.find(env.headers, fn {k, _v} -> k == "authorization" end)
47 assert {"authorization", "DeepL-Auth-Key deepl_api_key"} = auth_header
55 "text" => "I will crush you",
56 "detected_source_language" => "ja"
63 assert {:ok, "ja", "I will crush you"} = DeepL.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
66 test "should work with the pro tier" do
67 clear_config([:deepl, :tier], :pro)
70 %{method: :post, url: "https://api.deepl.com/v2/translate"} = env ->
71 auth_header = Enum.find(env.headers, fn {k, _v} -> k == "authorization" end)
72 assert {"authorization", "DeepL-Auth-Key deepl_api_key"} = auth_header
80 "text" => "I will crush you",
81 "detected_source_language" => "ja"
88 assert {:ok, "ja", "I will crush you"} = DeepL.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")
91 test "should assign source language if set" do
92 clear_config([:deepl, :tier], :pro)
95 %{method: :post, url: "https://api.deepl.com/v2/translate"} = env ->
96 auth_header = Enum.find(env.headers, fn {k, _v} -> k == "authorization" end)
97 assert {"authorization", "DeepL-Auth-Key deepl_api_key"} = auth_header
98 assert String.contains?(env.body, "source_lang=ja")
106 "text" => "I will crush you",
107 "detected_source_language" => "ja"
114 assert {:ok, "ja", "I will crush you"} = DeepL.translate("ギュギュ握りつぶしちゃうぞ", "ja", "en")
117 test "should gracefully fail if the API errors" do
118 clear_config([:deepl, :tier], :free)
121 %{method: :post, url: "https://api-free.deepl.com/v2/translate"} ->
128 assert {:error, "DeepL request failed (code 403)"} =
129 DeepL.translate("ギュギュ握りつぶしちゃうぞ", nil, "en")