Merge branch 'develop' into activation-meta
[akkoma] / test / web / activity_pub / pipeline_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.PipelineTest do
6 use Pleroma.DataCase
7
8 import Mock
9 import Pleroma.Factory
10
11 describe "common_pipeline/2" do
12 setup do
13 clear_config([:instance, :federating], true)
14 :ok
15 end
16
17 test "it goes through validation, filtering, persisting, side effects and federation for local activities" do
18 activity = insert(:note_activity)
19 meta = [local: true]
20
21 with_mocks([
22 {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
23 {
24 Pleroma.Web.ActivityPub.MRF,
25 [],
26 [filter: fn o -> {:ok, o} end]
27 },
28 {
29 Pleroma.Web.ActivityPub.ActivityPub,
30 [],
31 [persist: fn o, m -> {:ok, o, m} end]
32 },
33 {
34 Pleroma.Web.ActivityPub.SideEffects,
35 [],
36 [
37 handle: fn o, m -> {:ok, o, m} end,
38 handle_after_transaction: fn m -> m end
39 ]
40 },
41 {
42 Pleroma.Web.Federator,
43 [],
44 [publish: fn _o -> :ok end]
45 }
46 ]) do
47 assert {:ok, ^activity, ^meta} =
48 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
49
50 assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
51 assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
52 assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
53 assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
54 assert_called(Pleroma.Web.Federator.publish(activity))
55 end
56 end
57
58 test "it goes through validation, filtering, persisting, side effects without federation for remote activities" do
59 activity = insert(:note_activity)
60 meta = [local: false]
61
62 with_mocks([
63 {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
64 {
65 Pleroma.Web.ActivityPub.MRF,
66 [],
67 [filter: fn o -> {:ok, o} end]
68 },
69 {
70 Pleroma.Web.ActivityPub.ActivityPub,
71 [],
72 [persist: fn o, m -> {:ok, o, m} end]
73 },
74 {
75 Pleroma.Web.ActivityPub.SideEffects,
76 [],
77 [handle: fn o, m -> {:ok, o, m} end, handle_after_transaction: fn m -> m end]
78 },
79 {
80 Pleroma.Web.Federator,
81 [],
82 []
83 }
84 ]) do
85 assert {:ok, ^activity, ^meta} =
86 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
87
88 assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
89 assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
90 assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
91 assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
92 end
93 end
94
95 test "it goes through validation, filtering, persisting, side effects without federation for local activities if federation is deactivated" do
96 clear_config([:instance, :federating], false)
97
98 activity = insert(:note_activity)
99 meta = [local: true]
100
101 with_mocks([
102 {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
103 {
104 Pleroma.Web.ActivityPub.MRF,
105 [],
106 [filter: fn o -> {:ok, o} end]
107 },
108 {
109 Pleroma.Web.ActivityPub.ActivityPub,
110 [],
111 [persist: fn o, m -> {:ok, o, m} end]
112 },
113 {
114 Pleroma.Web.ActivityPub.SideEffects,
115 [],
116 [handle: fn o, m -> {:ok, o, m} end, handle_after_transaction: fn m -> m end]
117 },
118 {
119 Pleroma.Web.Federator,
120 [],
121 []
122 }
123 ]) do
124 assert {:ok, ^activity, ^meta} =
125 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
126
127 assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
128 assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
129 assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
130 assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
131 end
132 end
133 end
134 end