Handle HTTP "410 Gone" response
authorEgor Kislitsyn <egor@kislitsyn.com>
Thu, 13 Jun 2019 09:34:03 +0000 (16:34 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Thu, 13 Jun 2019 09:34:03 +0000 (16:34 +0700)
lib/pleroma/object/fetcher.ex
test/object/fetcher_test.exs

index ca980c62939f0ff25a4d1c5eea745fe2b86501bd..f7d724668034df8064b8bf21d0afa3496d39efeb 100644 (file)
@@ -85,6 +85,9 @@ defmodule Pleroma.Object.Fetcher do
          :ok <- Containment.contain_origin_from_id(id, data) do
       {:ok, data}
     else
+      {:ok, %{status: 410}} ->
+        {:error, "Object has been deleted"}
+
       e ->
         {:error, e}
     end
index d604fd5f59f42e1528e8df22d10cd63b5fd68c39..58abcfe5522ac26414137988b4df9d547ca22c64 100644 (file)
@@ -7,7 +7,14 @@ defmodule Pleroma.Object.FetcherTest do
   import Tesla.Mock
 
   setup do
-    mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
+    mock(fn
+      %{method: :get, url: "https://mastodon.example.org/users/userisgone"} ->
+        %Tesla.Env{status: 410}
+
+      env ->
+        apply(HttpRequestMock, :request, [env])
+    end)
+
     :ok
   end
 
@@ -81,10 +88,17 @@ defmodule Pleroma.Object.FetcherTest do
     end
 
     test "all objects with fake directions are rejected by the object fetcher" do
-      {:error, _} =
-        Fetcher.fetch_and_contain_remote_object_from_id(
-          "https://info.pleroma.site/activity4.json"
-        )
+      assert {:error, _} =
+               Fetcher.fetch_and_contain_remote_object_from_id(
+                 "https://info.pleroma.site/activity4.json"
+               )
+    end
+
+    test "handle HTTP 410 Gone response" do
+      assert {:error, "Object has been deleted"} ==
+               Fetcher.fetch_and_contain_remote_object_from_id(
+                 "https://mastodon.example.org/users/userisgone"
+               )
     end
   end