Add `account_activation_required` to /api/v1/instance
[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 [handle: fn o, m -> {:ok, o, m} end]
37 },
38 {
39 Pleroma.Web.Federator,
40 [],
41 [publish: fn _o -> :ok end]
42 }
43 ]) do
44 assert {:ok, ^activity, ^meta} =
45 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
46
47 assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
48 assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
49 assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
50 assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
51 assert_called(Pleroma.Web.Federator.publish(activity))
52 end
53 end
54
55 test "it goes through validation, filtering, persisting, side effects without federation for remote activities" do
56 activity = insert(:note_activity)
57 meta = [local: false]
58
59 with_mocks([
60 {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
61 {
62 Pleroma.Web.ActivityPub.MRF,
63 [],
64 [filter: fn o -> {:ok, o} end]
65 },
66 {
67 Pleroma.Web.ActivityPub.ActivityPub,
68 [],
69 [persist: fn o, m -> {:ok, o, m} end]
70 },
71 {
72 Pleroma.Web.ActivityPub.SideEffects,
73 [],
74 [handle: fn o, m -> {:ok, o, m} end]
75 },
76 {
77 Pleroma.Web.Federator,
78 [],
79 []
80 }
81 ]) do
82 assert {:ok, ^activity, ^meta} =
83 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
84
85 assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
86 assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
87 assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
88 assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
89 end
90 end
91
92 test "it goes through validation, filtering, persisting, side effects without federation for local activities if federation is deactivated" do
93 clear_config([:instance, :federating], false)
94
95 activity = insert(:note_activity)
96 meta = [local: true]
97
98 with_mocks([
99 {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
100 {
101 Pleroma.Web.ActivityPub.MRF,
102 [],
103 [filter: fn o -> {:ok, o} end]
104 },
105 {
106 Pleroma.Web.ActivityPub.ActivityPub,
107 [],
108 [persist: fn o, m -> {:ok, o, m} end]
109 },
110 {
111 Pleroma.Web.ActivityPub.SideEffects,
112 [],
113 [handle: fn o, m -> {:ok, o, m} end]
114 },
115 {
116 Pleroma.Web.Federator,
117 [],
118 []
119 }
120 ]) do
121 assert {:ok, ^activity, ^meta} =
122 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
123
124 assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
125 assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
126 assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
127 assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
128 end
129 end
130 end
131 end