2b15b3edcccd30c481957bac254d69d571efd28a
[akkoma] / test / web / activity_pub / publisher_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.PublisherTest do
6 use Pleroma.DataCase
7
8 import Pleroma.Factory
9
10 alias Pleroma.Activity
11 alias Pleroma.Web.ActivityPub.Publisher
12
13 @as_public "https://www.w3.org/ns/activitystreams#Public"
14
15 describe "determine_inbox/2" do
16 test "it returns sharedInbox for messages involving as:Public in to" do
17 user =
18 insert(:user, %{
19 info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
20 })
21
22 activity = %Activity{
23 data: %{"to" => [@as_public], "cc" => [user.follower_address]}
24 }
25
26 assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
27 end
28
29 test "it returns sharedInbox for messages involving as:Public in cc" do
30 user =
31 insert(:user, %{
32 info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
33 })
34
35 activity = %Activity{
36 data: %{"cc" => [@as_public], "to" => [user.follower_address]}
37 }
38
39 assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
40 end
41
42 test "it returns sharedInbox for messages involving multiple recipients in to" do
43 user =
44 insert(:user, %{
45 info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
46 })
47
48 user_two = insert(:user)
49 user_three = insert(:user)
50
51 activity = %Activity{
52 data: %{"cc" => [], "to" => [user.ap_id, user_two.ap_id, user_three.ap_id]}
53 }
54
55 assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
56 end
57
58 test "it returns sharedInbox for messages involving multiple recipients in cc" do
59 user =
60 insert(:user, %{
61 info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
62 })
63
64 user_two = insert(:user)
65 user_three = insert(:user)
66
67 activity = %Activity{
68 data: %{"to" => [], "cc" => [user.ap_id, user_two.ap_id, user_three.ap_id]}
69 }
70
71 assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
72 end
73
74 test "it returns sharedInbox for messages involving multiple recipients in total" do
75 user =
76 insert(:user, %{
77 info: %{
78 source_data: %{
79 "inbox" => "http://example.com/personal-inbox",
80 "endpoints" => %{"sharedInbox" => "http://example.com/inbox"}
81 }
82 }
83 })
84
85 user_two = insert(:user)
86
87 activity = %Activity{
88 data: %{"to" => [user_two.ap_id], "cc" => [user.ap_id]}
89 }
90
91 assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
92 end
93
94 test "it returns inbox for messages involving single recipients in total" do
95 user =
96 insert(:user, %{
97 info: %{
98 source_data: %{
99 "inbox" => "http://example.com/personal-inbox",
100 "endpoints" => %{"sharedInbox" => "http://example.com/inbox"}
101 }
102 }
103 })
104
105 activity = %Activity{
106 data: %{"to" => [user.ap_id], "cc" => []}
107 }
108
109 assert Publisher.determine_inbox(activity, user) == "http://example.com/personal-inbox"
110 end
111 end
112 end