69 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Workers.RemoteFetcherWorkerTest do
 | |
|   use Pleroma.DataCase
 | |
|   use Oban.Testing, repo: Pleroma.Repo
 | |
| 
 | |
|   alias Pleroma.Workers.RemoteFetcherWorker
 | |
| 
 | |
|   @deleted_object_one "https://deleted-404.example.com/"
 | |
|   @deleted_object_two "https://deleted-410.example.com/"
 | |
|   @unauthorized_object "https://unauthorized.example.com/"
 | |
|   @depth_object "https://depth.example.com/"
 | |
| 
 | |
|   describe "RemoteFetcherWorker" do
 | |
|     setup do
 | |
|       Tesla.Mock.mock(fn
 | |
|         %{method: :get, url: @deleted_object_one} ->
 | |
|           %Tesla.Env{
 | |
|             status: 404
 | |
|           }
 | |
| 
 | |
|         %{method: :get, url: @deleted_object_two} ->
 | |
|           %Tesla.Env{
 | |
|             status: 410
 | |
|           }
 | |
| 
 | |
|         %{method: :get, url: @unauthorized_object} ->
 | |
|           %Tesla.Env{
 | |
|             status: 403
 | |
|           }
 | |
| 
 | |
|         %{method: :get, url: @depth_object} ->
 | |
|           %Tesla.Env{
 | |
|             status: 200
 | |
|           }
 | |
|       end)
 | |
|     end
 | |
| 
 | |
|     test "does not requeue a deleted object" do
 | |
|       assert {:discard, _} =
 | |
|                RemoteFetcherWorker.perform(%Oban.Job{
 | |
|                  args: %{"op" => "fetch_remote", "id" => @deleted_object_one}
 | |
|                })
 | |
| 
 | |
|       assert {:discard, _} =
 | |
|                RemoteFetcherWorker.perform(%Oban.Job{
 | |
|                  args: %{"op" => "fetch_remote", "id" => @deleted_object_two}
 | |
|                })
 | |
|     end
 | |
| 
 | |
|     test "does not requeue an unauthorized object" do
 | |
|       assert {:discard, _} =
 | |
|                RemoteFetcherWorker.perform(%Oban.Job{
 | |
|                  args: %{"op" => "fetch_remote", "id" => @unauthorized_object}
 | |
|                })
 | |
|     end
 | |
| 
 | |
|     test "does not requeue an object that exceeded depth" do
 | |
|       clear_config([:instance, :federation_incoming_replies_max_depth], 0)
 | |
| 
 | |
|       assert {:discard, _} =
 | |
|                RemoteFetcherWorker.perform(%Oban.Job{
 | |
|                  args: %{"op" => "fetch_remote", "id" => @depth_object, "depth" => 1}
 | |
|                })
 | |
|     end
 | |
|   end
 | |
| end
 | 
