Change query order in fetch_activities_for_context_query to make poll vote exclusion...
[akkoma] / test / web / activity_pub / visibilty_test.exs
1 defmodule Pleroma.Web.ActivityPub.VisibilityTest do
2 use Pleroma.DataCase
3
4 alias Pleroma.Web.ActivityPub.Visibility
5 alias Pleroma.Web.CommonAPI
6 import Pleroma.Factory
7
8 setup do
9 user = insert(:user)
10 mentioned = insert(:user)
11 following = insert(:user)
12 unrelated = insert(:user)
13 {:ok, following} = Pleroma.User.follow(following, user)
14
15 {:ok, public} =
16 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "public"})
17
18 {:ok, private} =
19 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "private"})
20
21 {:ok, direct} =
22 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "direct"})
23
24 {:ok, unlisted} =
25 CommonAPI.post(user, %{"status" => "@#{mentioned.nickname}", "visibility" => "unlisted"})
26
27 %{
28 public: public,
29 private: private,
30 direct: direct,
31 unlisted: unlisted,
32 user: user,
33 mentioned: mentioned,
34 following: following,
35 unrelated: unrelated
36 }
37 end
38
39 test "is_direct?", %{public: public, private: private, direct: direct, unlisted: unlisted} do
40 assert Visibility.is_direct?(direct)
41 refute Visibility.is_direct?(public)
42 refute Visibility.is_direct?(private)
43 refute Visibility.is_direct?(unlisted)
44 end
45
46 test "is_public?", %{public: public, private: private, direct: direct, unlisted: unlisted} do
47 refute Visibility.is_public?(direct)
48 assert Visibility.is_public?(public)
49 refute Visibility.is_public?(private)
50 assert Visibility.is_public?(unlisted)
51 end
52
53 test "is_private?", %{public: public, private: private, direct: direct, unlisted: unlisted} do
54 refute Visibility.is_private?(direct)
55 refute Visibility.is_private?(public)
56 assert Visibility.is_private?(private)
57 refute Visibility.is_private?(unlisted)
58 end
59
60 test "visible_for_user?", %{
61 public: public,
62 private: private,
63 direct: direct,
64 unlisted: unlisted,
65 user: user,
66 mentioned: mentioned,
67 following: following,
68 unrelated: unrelated
69 } do
70 # All visible to author
71
72 assert Visibility.visible_for_user?(public, user)
73 assert Visibility.visible_for_user?(private, user)
74 assert Visibility.visible_for_user?(unlisted, user)
75 assert Visibility.visible_for_user?(direct, user)
76
77 # All visible to a mentioned user
78
79 assert Visibility.visible_for_user?(public, mentioned)
80 assert Visibility.visible_for_user?(private, mentioned)
81 assert Visibility.visible_for_user?(unlisted, mentioned)
82 assert Visibility.visible_for_user?(direct, mentioned)
83
84 # DM not visible for just follower
85
86 assert Visibility.visible_for_user?(public, following)
87 assert Visibility.visible_for_user?(private, following)
88 assert Visibility.visible_for_user?(unlisted, following)
89 refute Visibility.visible_for_user?(direct, following)
90
91 # Public and unlisted visible for unrelated user
92
93 assert Visibility.visible_for_user?(public, unrelated)
94 assert Visibility.visible_for_user?(unlisted, unrelated)
95 refute Visibility.visible_for_user?(private, unrelated)
96 refute Visibility.visible_for_user?(direct, unrelated)
97 end
98
99 test "doesn't die when the user doesn't exist",
100 %{
101 direct: direct,
102 user: user
103 } do
104 Repo.delete(user)
105 Cachex.clear(:user_cache)
106 refute Visibility.is_private?(direct)
107 end
108
109 test "get_visibility", %{
110 public: public,
111 private: private,
112 direct: direct,
113 unlisted: unlisted
114 } do
115 assert Visibility.get_visibility(public) == "public"
116 assert Visibility.get_visibility(private) == "private"
117 assert Visibility.get_visibility(direct) == "direct"
118 assert Visibility.get_visibility(unlisted) == "unlisted"
119 end
120 end