forked from AkkomaGang/akkoma
Merge branch 'feature/split-hide-network-v2' into 'develop'
Split hide_network into hide_followers & hide_followings (fixed) See merge request pleroma/pleroma!765
This commit is contained in:
commit
eb2b1960e0
10 changed files with 90 additions and 45 deletions
|
@ -30,7 +30,8 @@ defmodule Pleroma.User.Info do
|
|||
field(:topic, :string, default: nil)
|
||||
field(:hub, :string, default: nil)
|
||||
field(:salmon, :string, default: nil)
|
||||
field(:hide_network, :boolean, default: false)
|
||||
field(:hide_followers, :boolean, default: false)
|
||||
field(:hide_followings, :boolean, default: false)
|
||||
field(:pinned_activities, {:array, :string}, default: [])
|
||||
|
||||
# Found in the wild
|
||||
|
@ -143,7 +144,8 @@ def profile_update(info, params) do
|
|||
:no_rich_text,
|
||||
:default_scope,
|
||||
:banner,
|
||||
:hide_network,
|
||||
:hide_followings,
|
||||
:hide_followers,
|
||||
:background
|
||||
])
|
||||
end
|
||||
|
|
|
@ -86,7 +86,7 @@ def render("following.json", %{user: user, page: page}) do
|
|||
query = from(user in query, select: [:ap_id])
|
||||
following = Repo.all(query)
|
||||
|
||||
collection(following, "#{user.ap_id}/following", page, !user.info.hide_network)
|
||||
collection(following, "#{user.ap_id}/following", page, !user.info.hide_followings)
|
||||
|> Map.merge(Utils.make_json_ld_header())
|
||||
end
|
||||
|
||||
|
@ -99,7 +99,7 @@ def render("following.json", %{user: user}) do
|
|||
"id" => "#{user.ap_id}/following",
|
||||
"type" => "OrderedCollection",
|
||||
"totalItems" => length(following),
|
||||
"first" => collection(following, "#{user.ap_id}/following", 1, !user.info.hide_network)
|
||||
"first" => collection(following, "#{user.ap_id}/following", 1, !user.info.hide_followings)
|
||||
}
|
||||
|> Map.merge(Utils.make_json_ld_header())
|
||||
end
|
||||
|
@ -109,7 +109,7 @@ def render("followers.json", %{user: user, page: page}) do
|
|||
query = from(user in query, select: [:ap_id])
|
||||
followers = Repo.all(query)
|
||||
|
||||
collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_network)
|
||||
collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_followers)
|
||||
|> Map.merge(Utils.make_json_ld_header())
|
||||
end
|
||||
|
||||
|
@ -122,7 +122,7 @@ def render("followers.json", %{user: user}) do
|
|||
"id" => "#{user.ap_id}/followers",
|
||||
"type" => "OrderedCollection",
|
||||
"totalItems" => length(followers),
|
||||
"first" => collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_network)
|
||||
"first" => collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_followers)
|
||||
}
|
||||
|> Map.merge(Utils.make_json_ld_header())
|
||||
end
|
||||
|
|
|
@ -605,7 +605,7 @@ def followers(%{assigns: %{user: for_user}} = conn, %{"id" => id}) do
|
|||
followers =
|
||||
cond do
|
||||
for_user && user.id == for_user.id -> followers
|
||||
user.info.hide_network -> []
|
||||
user.info.hide_followers -> []
|
||||
true -> followers
|
||||
end
|
||||
|
||||
|
@ -621,7 +621,7 @@ def following(%{assigns: %{user: for_user}} = conn, %{"id" => id}) do
|
|||
followers =
|
||||
cond do
|
||||
for_user && user.id == for_user.id -> followers
|
||||
user.info.hide_network -> []
|
||||
user.info.hide_followings -> []
|
||||
true -> followers
|
||||
end
|
||||
|
||||
|
|
|
@ -503,7 +503,7 @@ def followers(%{assigns: %{user: for_user}} = conn, params) do
|
|||
followers =
|
||||
cond do
|
||||
for_user && user.id == for_user.id -> followers
|
||||
user.info.hide_network -> []
|
||||
user.info.hide_followers -> []
|
||||
true -> followers
|
||||
end
|
||||
|
||||
|
@ -523,7 +523,7 @@ def friends(%{assigns: %{user: for_user}} = conn, params) do
|
|||
friends =
|
||||
cond do
|
||||
for_user && user.id == for_user.id -> friends
|
||||
user.info.hide_network -> []
|
||||
user.info.hide_followings -> []
|
||||
true -> friends
|
||||
end
|
||||
|
||||
|
@ -618,7 +618,7 @@ def raw_empty_array(conn, _params) do
|
|||
|
||||
defp build_info_cng(user, params) do
|
||||
info_params =
|
||||
["no_rich_text", "locked", "hide_network"]
|
||||
["no_rich_text", "locked", "hide_followers", "hide_followings"]
|
||||
|> Enum.reduce(%{}, fn key, res ->
|
||||
if value = params[key] do
|
||||
Map.put(res, key, value == "true")
|
||||
|
|
|
@ -108,7 +108,8 @@ defp do_render("user.json", %{user: user = %User{}} = assigns) do
|
|||
"locked" => user.info.locked,
|
||||
"default_scope" => user.info.default_scope,
|
||||
"no_rich_text" => user.info.no_rich_text,
|
||||
"hide_network" => user.info.hide_network,
|
||||
"hide_followers" => user.info.hide_followers,
|
||||
"hide_followings" => user.info.hide_followings,
|
||||
"fields" => fields,
|
||||
|
||||
# Pleroma extension
|
||||
|
|
12
priv/repo/migrations/20190203185340_split_hide_network.exs
Normal file
12
priv/repo/migrations/20190203185340_split_hide_network.exs
Normal file
|
@ -0,0 +1,12 @@
|
|||
defmodule Pleroma.Repo.Migrations.SplitHideNetwork do
|
||||
use Ecto.Migration
|
||||
|
||||
def up do
|
||||
execute("UPDATE users SET info = jsonb_set(info, '{hide_network}'::text[], 'false'::jsonb) WHERE NOT(info::jsonb ? 'hide_network')")
|
||||
execute("UPDATE users SET info = jsonb_set(info, '{hide_followings}'::text[], info->'hide_network')")
|
||||
execute("UPDATE users SET info = jsonb_set(info, '{hide_followers}'::text[], info->'hide_network')")
|
||||
end
|
||||
|
||||
def down do
|
||||
end
|
||||
end
|
|
@ -386,9 +386,9 @@ test "it returns the followers in a collection", %{conn: conn} do
|
|||
assert result["first"]["orderedItems"] == [user.ap_id]
|
||||
end
|
||||
|
||||
test "it returns returns empty if the user has 'hide_network' set", %{conn: conn} do
|
||||
test "it returns returns empty if the user has 'hide_followers' set", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
user_two = insert(:user, %{info: %{hide_network: true}})
|
||||
user_two = insert(:user, %{info: %{hide_followers: true}})
|
||||
User.follow(user, user_two)
|
||||
|
||||
result =
|
||||
|
@ -441,8 +441,8 @@ test "it returns the following in a collection", %{conn: conn} do
|
|||
assert result["first"]["orderedItems"] == [user_two.ap_id]
|
||||
end
|
||||
|
||||
test "it returns returns empty if the user has 'hide_network' set", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
test "it returns returns empty if the user has 'hide_followings' set", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_followings: true}})
|
||||
user_two = insert(:user)
|
||||
User.follow(user, user_two)
|
||||
|
||||
|
|
|
@ -1101,9 +1101,9 @@ test "getting followers", %{conn: conn} do
|
|||
assert id == to_string(user.id)
|
||||
end
|
||||
|
||||
test "getting followers, hide_network", %{conn: conn} do
|
||||
test "getting followers, hide_followers", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
other_user = insert(:user, %{info: %{hide_network: true}})
|
||||
other_user = insert(:user, %{info: %{hide_followers: true}})
|
||||
{:ok, _user} = User.follow(user, other_user)
|
||||
|
||||
conn =
|
||||
|
@ -1113,9 +1113,9 @@ test "getting followers, hide_network", %{conn: conn} do
|
|||
assert [] == json_response(conn, 200)
|
||||
end
|
||||
|
||||
test "getting followers, hide_network, same user requesting", %{conn: conn} do
|
||||
test "getting followers, hide_followers, same user requesting", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
other_user = insert(:user, %{info: %{hide_network: true}})
|
||||
other_user = insert(:user, %{info: %{hide_followers: true}})
|
||||
{:ok, _user} = User.follow(user, other_user)
|
||||
|
||||
conn =
|
||||
|
@ -1139,8 +1139,8 @@ test "getting following", %{conn: conn} do
|
|||
assert id == to_string(other_user.id)
|
||||
end
|
||||
|
||||
test "getting following, hide_network", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
test "getting following, hide_followings", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_followings: true}})
|
||||
other_user = insert(:user)
|
||||
{:ok, user} = User.follow(user, other_user)
|
||||
|
||||
|
@ -1151,8 +1151,8 @@ test "getting following, hide_network", %{conn: conn} do
|
|||
assert [] == json_response(conn, 200)
|
||||
end
|
||||
|
||||
test "getting following, hide_network, same user requesting", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
test "getting following, hide_followings, same user requesting", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_followings: true}})
|
||||
other_user = insert(:user)
|
||||
{:ok, user} = User.follow(user, other_user)
|
||||
|
||||
|
|
|
@ -1132,8 +1132,8 @@ test "it returns a given user's followers with user_id", %{conn: conn} do
|
|||
)
|
||||
end
|
||||
|
||||
test "it returns empty for a hidden network", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
test "it returns empty when hide_followers is set to true", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_followers: true}})
|
||||
follower_one = insert(:user)
|
||||
follower_two = insert(:user)
|
||||
not_follower = insert(:user)
|
||||
|
@ -1150,10 +1150,11 @@ test "it returns empty for a hidden network", %{conn: conn} do
|
|||
assert [] == response
|
||||
end
|
||||
|
||||
test "it returns the followers for a hidden network if requested by the user themselves", %{
|
||||
test "it returns the followers when hide_followers is set to true if requested by the user themselves",
|
||||
%{
|
||||
conn: conn
|
||||
} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
user = insert(:user, %{info: %{hide_followers: true}})
|
||||
follower_one = insert(:user)
|
||||
follower_two = insert(:user)
|
||||
_not_follower = insert(:user)
|
||||
|
@ -1256,8 +1257,8 @@ test "it returns a given user's friends with user_id", %{conn: conn} do
|
|||
)
|
||||
end
|
||||
|
||||
test "it returns empty for a hidden network", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
test "it returns empty when hide_followings is set to true", %{conn: conn} do
|
||||
user = insert(:user, %{info: %{hide_followings: true}})
|
||||
followed_one = insert(:user)
|
||||
followed_two = insert(:user)
|
||||
not_followed = insert(:user)
|
||||
|
@ -1273,10 +1274,11 @@ test "it returns empty for a hidden network", %{conn: conn} do
|
|||
assert [] == json_response(conn, 200)
|
||||
end
|
||||
|
||||
test "it returns friends for a hidden network if the user themselves request it", %{
|
||||
test "it returns friends when hide_followings is set to true if the user themselves request it",
|
||||
%{
|
||||
conn: conn
|
||||
} do
|
||||
user = insert(:user, %{info: %{hide_network: true}})
|
||||
user = insert(:user, %{info: %{hide_followings: true}})
|
||||
followed_one = insert(:user)
|
||||
followed_two = insert(:user)
|
||||
_not_followed = insert(:user)
|
||||
|
@ -1364,27 +1366,51 @@ test "it updates a user's profile", %{conn: conn} do
|
|||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})
|
||||
end
|
||||
|
||||
test "it sets and un-sets hide_network", %{conn: conn} do
|
||||
test "it sets and un-sets hide_followings", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> post("/api/account/update_profile.json", %{
|
||||
"hide_network" => "true"
|
||||
"hide_followings" => "true"
|
||||
})
|
||||
|
||||
user = Repo.get!(User, user.id)
|
||||
assert user.info.hide_network == true
|
||||
assert user.info.hide_followings == true
|
||||
|
||||
conn =
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> post("/api/account/update_profile.json", %{
|
||||
"hide_network" => "false"
|
||||
"hide_followings" => "false"
|
||||
})
|
||||
|
||||
user = Repo.get!(User, user.id)
|
||||
assert user.info.hide_network == false
|
||||
assert user.info.hide_followings == false
|
||||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})
|
||||
end
|
||||
|
||||
test "it sets and un-sets hide_followers", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> post("/api/account/update_profile.json", %{
|
||||
"hide_followers" => "true"
|
||||
})
|
||||
|
||||
user = Repo.get!(User, user.id)
|
||||
assert user.info.hide_followers == true
|
||||
|
||||
conn =
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> post("/api/account/update_profile.json", %{
|
||||
"hide_followers" => "false"
|
||||
})
|
||||
|
||||
user = Repo.get!(User, user.id)
|
||||
assert user.info.hide_followers == false
|
||||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})
|
||||
end
|
||||
|
||||
|
|
|
@ -100,7 +100,8 @@ test "A user" do
|
|||
"locked" => false,
|
||||
"default_scope" => "public",
|
||||
"no_rich_text" => false,
|
||||
"hide_network" => false,
|
||||
"hide_followings" => false,
|
||||
"hide_followers" => false,
|
||||
"fields" => [],
|
||||
"pleroma" => %{
|
||||
"confirmation_pending" => false,
|
||||
|
@ -147,7 +148,8 @@ test "A user for a given other follower", %{user: user} do
|
|||
"locked" => false,
|
||||
"default_scope" => "public",
|
||||
"no_rich_text" => false,
|
||||
"hide_network" => false,
|
||||
"hide_followings" => false,
|
||||
"hide_followers" => false,
|
||||
"fields" => [],
|
||||
"pleroma" => %{
|
||||
"confirmation_pending" => false,
|
||||
|
@ -195,7 +197,8 @@ test "A user that follows you", %{user: user} do
|
|||
"locked" => false,
|
||||
"default_scope" => "public",
|
||||
"no_rich_text" => false,
|
||||
"hide_network" => false,
|
||||
"hide_followings" => false,
|
||||
"hide_followers" => false,
|
||||
"fields" => [],
|
||||
"pleroma" => %{
|
||||
"confirmation_pending" => false,
|
||||
|
@ -257,7 +260,8 @@ test "A blocked user for the blocker" do
|
|||
"locked" => false,
|
||||
"default_scope" => "public",
|
||||
"no_rich_text" => false,
|
||||
"hide_network" => false,
|
||||
"hide_followings" => false,
|
||||
"hide_followers" => false,
|
||||
"fields" => [],
|
||||
"pleroma" => %{
|
||||
"confirmation_pending" => false,
|
||||
|
|
Loading…
Reference in a new issue