1 defmodule Pleroma.Web.ActivityPub.VisibilityTest do
5 alias Pleroma.Web.ActivityPub.Visibility
6 alias Pleroma.Web.CommonAPI
11 mentioned = insert(:user)
12 following = insert(:user)
13 unrelated = insert(:user)
14 {:ok, following} = Pleroma.User.follow(following, user)
17 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "public"})
20 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "private"})
23 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "direct"})
26 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "unlisted"})
40 test "is_direct?", %{public: public, private: private, direct: direct, unlisted: unlisted} do
41 assert Visibility.is_direct?(direct)
42 refute Visibility.is_direct?(public)
43 refute Visibility.is_direct?(private)
44 refute Visibility.is_direct?(unlisted)
47 test "is_public?", %{public: public, private: private, direct: direct, unlisted: unlisted} do
48 refute Visibility.is_public?(direct)
49 assert Visibility.is_public?(public)
50 refute Visibility.is_public?(private)
51 assert Visibility.is_public?(unlisted)
54 test "is_private?", %{public: public, private: private, direct: direct, unlisted: unlisted} do
55 refute Visibility.is_private?(direct)
56 refute Visibility.is_private?(public)
57 assert Visibility.is_private?(private)
58 refute Visibility.is_private?(unlisted)
61 test "visible_for_user?", %{
71 # All visible to author
73 assert Visibility.visible_for_user?(public, user)
74 assert Visibility.visible_for_user?(private, user)
75 assert Visibility.visible_for_user?(unlisted, user)
76 assert Visibility.visible_for_user?(direct, user)
78 # All visible to a mentioned user
80 assert Visibility.visible_for_user?(public, mentioned)
81 assert Visibility.visible_for_user?(private, mentioned)
82 assert Visibility.visible_for_user?(unlisted, mentioned)
83 assert Visibility.visible_for_user?(direct, mentioned)
85 # DM not visible for just follower
87 assert Visibility.visible_for_user?(public, following)
88 assert Visibility.visible_for_user?(private, following)
89 assert Visibility.visible_for_user?(unlisted, following)
90 refute Visibility.visible_for_user?(direct, following)
92 # Public and unlisted visible for unrelated user
94 assert Visibility.visible_for_user?(public, unrelated)
95 assert Visibility.visible_for_user?(unlisted, unrelated)
96 refute Visibility.visible_for_user?(private, unrelated)
97 refute Visibility.visible_for_user?(direct, unrelated)
100 test "doesn't die when the user doesn't exist",
106 Cachex.clear(:user_cache)
107 refute Visibility.is_private?(direct)
110 test "get_visibility", %{
116 assert Visibility.get_visibility(public) == "public"
117 assert Visibility.get_visibility(private) == "private"
118 assert Visibility.get_visibility(direct) == "direct"
119 assert Visibility.get_visibility(unlisted) == "unlisted"
122 test "get_visibility with directMessage flag" do
123 assert Visibility.get_visibility(%{data: %{"directMessage" => true}}) == "direct"
126 describe "entire_thread_visible_for_user?/2" do
127 test "returns false if not found activity", %{user: user} do
128 refute Visibility.entire_thread_visible_for_user?(%Activity{}, user)
131 test "returns true if activity hasn't 'Create' type", %{user: user} do
132 activity = insert(:like_activity)
133 assert Visibility.entire_thread_visible_for_user?(activity, user)
136 test "returns false when invalid recipients", %{user: user} do
137 author = insert(:user)
140 insert(:note_activity,
144 data: %{"to" => ["test-user"]}
148 refute Visibility.entire_thread_visible_for_user?(activity, user)
151 test "returns true if user following to author" do
152 author = insert(:user)
153 user = insert(:user, following: [author.ap_id])
156 insert(:note_activity,
160 data: %{"to" => [user.ap_id]}
164 assert Visibility.entire_thread_visible_for_user?(activity, user)