diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index 9346ffa16..28d6e3a36 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -75,6 +75,10 @@ defmodule Pleroma.HTTP do client = Tesla.client([Tesla.Middleware.FollowRedirects, Tesla.Middleware.Telemetry]) request(client, request) + rescue + e -> + Logger.error("Failed to fetch #{url}: #{inspect(e)}") + {:error, :fetch_error} end @spec request(Client.t(), keyword()) :: {:ok, Env.t()} | {:error, any()} diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 2045a6a11..790ec4c1b 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -99,11 +99,10 @@ defmodule Pleroma.Web.RichMedia.Helpers do end with :ok <- head_check, do: Pleroma.HTTP.get(url, headers, @options) - - rescue - e -> - Logger.error("Failed to fetch rich media: #{inspect(e)}") - {:error, :fetch_error} + rescue + e -> + Logger.error("Failed to fetch rich media: #{inspect(e)}") + {:error, :fetch_error} end defp check_content_type(headers) do diff --git a/test/pleroma/http_test.exs b/test/pleroma/http_test.exs index e8a2538d3..8619196ad 100644 --- a/test/pleroma/http_test.exs +++ b/test/pleroma/http_test.exs @@ -69,4 +69,14 @@ defmodule Pleroma.HTTPTest do } end end + + describe "Catching errors" do + test "rescues when adapter throws an error" do + mock(fn + %{method: :get, url: "http://example.com/hello"} -> raise ArgumentError + end) + + assert HTTP.get("http://example.com/hello") == {:error, :fetch_error} + end + end end diff --git a/test/pleroma/web/rich_media/helpers_test.exs b/test/pleroma/web/rich_media/helpers_test.exs index 3fa7eecef..4d8a04788 100644 --- a/test/pleroma/web/rich_media/helpers_test.exs +++ b/test/pleroma/web/rich_media/helpers_test.exs @@ -84,6 +84,8 @@ defmodule Pleroma.Web.RichMedia.HelpersTest do test "catches errors in fetching" do Tesla.Mock.mock(fn _ -> raise ArgumentError end) - assert {:error, :fetch_error} == Helpers.rich_media_get("wp-json/oembed/1.0/embed?url=http:%252F%252F") + + assert {:error, :fetch_error} == + Helpers.rich_media_get("wp-json/oembed/1.0/embed?url=http:%252F%252F") end end