 115d08a754
			
		
	
	
		115d08a754
		
	
	
	
	
		
			
			This is to run things like streaming notifications out, which will sometimes need data that is created by the transaction, but is streamed out asynchronously.
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Web.ActivityPub.PipelineTest do
 | |
|   use Pleroma.DataCase
 | |
| 
 | |
|   import Mock
 | |
|   import Pleroma.Factory
 | |
| 
 | |
|   describe "common_pipeline/2" do
 | |
|     setup do
 | |
|       clear_config([:instance, :federating], true)
 | |
|       :ok
 | |
|     end
 | |
| 
 | |
|     test "it goes through validation, filtering, persisting, side effects and federation for local activities" do
 | |
|       activity = insert(:note_activity)
 | |
|       meta = [local: true]
 | |
| 
 | |
|       with_mocks([
 | |
|         {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.MRF,
 | |
|           [],
 | |
|           [filter: fn o -> {:ok, o} end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.ActivityPub,
 | |
|           [],
 | |
|           [persist: fn o, m -> {:ok, o, m} end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.SideEffects,
 | |
|           [],
 | |
|           [
 | |
|             handle: fn o, m -> {:ok, o, m} end,
 | |
|             handle_after_transaction: fn m -> m end
 | |
|           ]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.Federator,
 | |
|           [],
 | |
|           [publish: fn _o -> :ok end]
 | |
|         }
 | |
|       ]) do
 | |
|         assert {:ok, ^activity, ^meta} =
 | |
|                  Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
 | |
| 
 | |
|         assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
 | |
|         assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
 | |
|         assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
 | |
|         assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
 | |
|         assert_called(Pleroma.Web.Federator.publish(activity))
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     test "it goes through validation, filtering, persisting, side effects without federation for remote activities" do
 | |
|       activity = insert(:note_activity)
 | |
|       meta = [local: false]
 | |
| 
 | |
|       with_mocks([
 | |
|         {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.MRF,
 | |
|           [],
 | |
|           [filter: fn o -> {:ok, o} end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.ActivityPub,
 | |
|           [],
 | |
|           [persist: fn o, m -> {:ok, o, m} end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.SideEffects,
 | |
|           [],
 | |
|           [handle: fn o, m -> {:ok, o, m} end, handle_after_transaction: fn m -> m end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.Federator,
 | |
|           [],
 | |
|           []
 | |
|         }
 | |
|       ]) do
 | |
|         assert {:ok, ^activity, ^meta} =
 | |
|                  Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
 | |
| 
 | |
|         assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
 | |
|         assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
 | |
|         assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
 | |
|         assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     test "it goes through validation, filtering, persisting, side effects without federation for local activities if federation is deactivated" do
 | |
|       clear_config([:instance, :federating], false)
 | |
| 
 | |
|       activity = insert(:note_activity)
 | |
|       meta = [local: true]
 | |
| 
 | |
|       with_mocks([
 | |
|         {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.MRF,
 | |
|           [],
 | |
|           [filter: fn o -> {:ok, o} end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.ActivityPub,
 | |
|           [],
 | |
|           [persist: fn o, m -> {:ok, o, m} end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.ActivityPub.SideEffects,
 | |
|           [],
 | |
|           [handle: fn o, m -> {:ok, o, m} end, handle_after_transaction: fn m -> m end]
 | |
|         },
 | |
|         {
 | |
|           Pleroma.Web.Federator,
 | |
|           [],
 | |
|           []
 | |
|         }
 | |
|       ]) do
 | |
|         assert {:ok, ^activity, ^meta} =
 | |
|                  Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
 | |
| 
 | |
|         assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
 | |
|         assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
 | |
|         assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
 | |
|         assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |