Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/jobs
authorEgor Kislitsyn <egor@kislitsyn.com>
Wed, 6 Feb 2019 04:33:00 +0000 (11:33 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Wed, 6 Feb 2019 04:33:00 +0000 (11:33 +0700)
22 files changed:
.gitignore
lib/mix/tasks/pleroma/user.ex
lib/pleroma/html.ex
lib/pleroma/user/info.ex
lib/pleroma/web/activity_pub/activity_pub.ex
lib/pleroma/web/activity_pub/activity_pub_controller.ex
lib/pleroma/web/activity_pub/mrf/tag_policy.ex [new file with mode: 0644]
lib/pleroma/web/activity_pub/transmogrifier.ex
lib/pleroma/web/activity_pub/views/user_view.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/views/status_view.ex
lib/pleroma/web/rich_media/parser.ex
lib/pleroma/web/router.ex
lib/pleroma/web/twitter_api/twitter_api_controller.ex
lib/pleroma/web/twitter_api/views/user_view.ex
priv/repo/migrations/20190203185340_split_hide_network.exs [new file with mode: 0644]
priv/repo/migrations/20190204200237_add_correct_dm_index.exs [new file with mode: 0644]
test/web/activity_pub/activity_pub_controller_test.exs
test/web/mastodon_api/mastodon_api_controller_test.exs
test/web/twitter_api/twitter_api_controller_test.exs
test/web/twitter_api/util_controller_test.exs
test/web/twitter_api/views/user_view_test.exs

index 72fe2ce430dab93a386bd72e391b3ea79375caf3..04c61ede784db368780dcaced5f043ad7d1b0cc4 100644 (file)
@@ -25,6 +25,7 @@ erl_crash.dump
 # secrets files as long as you replace their contents by environment
 # variables.
 /config/*.secret.exs
+/config/generated_config.exs
 
 # Database setup file, some may forget to delete it
 /config/setup_db.psql
index c311d48e0d258e1b50954a48d281b9d67586c697..ffc45fd037d2fe0f1336962385255449d4a5d49a 100644 (file)
@@ -52,6 +52,14 @@ defmodule Mix.Tasks.Pleroma.User do
   - `--locked`/`--no-locked` - whether the user's account is locked
   - `--moderator`/`--no-moderator` - whether the user is a moderator
   - `--admin`/`--no-admin` - whether the user is an admin
+
+  ## Add tags to a user.
+
+      mix pleroma.user tag NICKNAME TAGS
+
+  ## Delete tags from a user.
+
+      mix pleroma.user untag NICKNAME TAGS
   """
   def run(["new", nickname, email | rest]) do
     {options, [], []} =
@@ -249,6 +257,32 @@ defmodule Mix.Tasks.Pleroma.User do
     end
   end
 
+  def run(["tag", nickname | tags]) do
+    Common.start_pleroma()
+
+    with %User{} = user <- User.get_by_nickname(nickname) do
+      user = user |> User.tag(tags)
+
+      Mix.shell().info("Tags of #{user.nickname}: #{inspect(tags)}")
+    else
+      _ ->
+        Mix.shell().error("Could not change user tags for #{nickname}")
+    end
+  end
+
+  def run(["untag", nickname | tags]) do
+    Common.start_pleroma()
+
+    with %User{} = user <- User.get_by_nickname(nickname) do
+      user = user |> User.untag(tags)
+
+      Mix.shell().info("Tags of #{user.nickname}: #{inspect(tags)}")
+    else
+      _ ->
+        Mix.shell().error("Could not change user tags for #{nickname}")
+    end
+  end
+
   def run(["invite"]) do
     Common.start_pleroma()
 
index bf5daa9482bdb1da279502b5a8c5b937f805d5fc..b4a4742ee30c39699e0ecaf079a8226415ead5f3 100644 (file)
@@ -59,6 +59,8 @@ defmodule Pleroma.HTML do
     end)
   end
 
+  def extract_first_external_url(_, nil), do: {:error, "No content"}
+
   def extract_first_external_url(object, content) do
     key = "URL|#{object.id}"
 
index c6c923aac0f30a3b61480004d37f615081d419ca..2186190a066a3d972d50394573ad8f038357e79f 100644 (file)
@@ -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 @@ defmodule Pleroma.User.Info do
       :no_rich_text,
       :default_scope,
       :banner,
-      :hide_network,
+      :hide_followings,
+      :hide_followers,
       :background
     ])
   end
index bdc9456ddb7657041f20db72c0352aa1b2ab10e9..464d39c047d7b1d1210aacf20397420d18d5efc9 100644 (file)
@@ -521,7 +521,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
   defp restrict_actor(query, _), do: query
 
   defp restrict_type(query, %{"type" => type}) when is_binary(type) do
-    restrict_type(query, %{"type" => [type]})
+    from(activity in query, where: fragment("?->>'type' = ?", activity.data, ^type))
   end
 
   defp restrict_type(query, %{"type" => type}) do
index 96ac518623e98c07094ca114437c5e72ee3ca632..afc01398fe73efef0c7d6edfe5dab708d2602f9b 100644 (file)
@@ -198,6 +198,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
     end
   end
 
+  def whoami(%{assigns: %{user: %User{} = user}} = conn, _params) do
+    conn
+    |> put_resp_header("content-type", "application/activity+json")
+    |> json(UserView.render("user.json", %{user: user}))
+  end
+
+  def whoami(_conn, _params), do: {:error, :not_found}
+
   def read_inbox(%{assigns: %{user: user}} = conn, %{"nickname" => nickname} = params) do
     if nickname == user.nickname do
       conn
diff --git a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex
new file mode 100644 (file)
index 0000000..b242e44
--- /dev/null
@@ -0,0 +1,139 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do
+  alias Pleroma.User
+  @behaviour Pleroma.Web.ActivityPub.MRF
+
+  defp get_tags(%User{tags: tags}) when is_list(tags), do: tags
+  defp get_tags(_), do: []
+
+  defp process_tag(
+         "mrf_tag:media-force-nsfw",
+         %{"type" => "Create", "object" => %{"attachment" => child_attachment} = object} = message
+       )
+       when length(child_attachment) > 0 do
+    tags = (object["tag"] || []) ++ ["nsfw"]
+
+    object =
+      object
+      |> Map.put("tags", tags)
+      |> Map.put("sensitive", true)
+
+    message = Map.put(message, "object", object)
+
+    {:ok, message}
+  end
+
+  defp process_tag(
+         "mrf_tag:media-strip",
+         %{"type" => "Create", "object" => %{"attachment" => child_attachment} = object} = message
+       )
+       when length(child_attachment) > 0 do
+    object = Map.delete(object, "attachment")
+    message = Map.put(message, "object", object)
+
+    {:ok, message}
+  end
+
+  defp process_tag(
+         "mrf_tag:force-unlisted",
+         %{"type" => "Create", "to" => to, "cc" => cc, "actor" => actor} = message
+       ) do
+    user = User.get_cached_by_ap_id(actor)
+
+    if Enum.member?(to, "https://www.w3.org/ns/activitystreams#Public") do
+      to =
+        List.delete(to, "https://www.w3.org/ns/activitystreams#Public") ++ [user.follower_address]
+
+      cc =
+        List.delete(cc, user.follower_address) ++ ["https://www.w3.org/ns/activitystreams#Public"]
+
+      object =
+        message["object"]
+        |> Map.put("to", to)
+        |> Map.put("cc", cc)
+
+      message =
+        message
+        |> Map.put("to", to)
+        |> Map.put("cc", cc)
+        |> Map.put("object", object)
+
+      {:ok, message}
+    else
+      {:ok, message}
+    end
+  end
+
+  defp process_tag(
+         "mrf_tag:sandbox",
+         %{"type" => "Create", "to" => to, "cc" => cc, "actor" => actor} = message
+       ) do
+    user = User.get_cached_by_ap_id(actor)
+
+    if Enum.member?(to, "https://www.w3.org/ns/activitystreams#Public") or
+         Enum.member?(cc, "https://www.w3.org/ns/activitystreams#Public") do
+      to =
+        List.delete(to, "https://www.w3.org/ns/activitystreams#Public") ++ [user.follower_address]
+
+      cc = List.delete(cc, "https://www.w3.org/ns/activitystreams#Public")
+
+      object =
+        message["object"]
+        |> Map.put("to", to)
+        |> Map.put("cc", cc)
+
+      message =
+        message
+        |> Map.put("to", to)
+        |> Map.put("cc", cc)
+        |> Map.put("object", object)
+
+      {:ok, message}
+    else
+      {:ok, message}
+    end
+  end
+
+  defp process_tag(
+         "mrf_tag:disable-remote-subscription",
+         %{"type" => "Follow", "actor" => actor} = message
+       ) do
+    user = User.get_cached_by_ap_id(actor)
+
+    if user.local == true do
+      {:ok, message}
+    else
+      {:reject, nil}
+    end
+  end
+
+  defp process_tag("mrf_tag:disable-any-subscription", %{"type" => "Follow"}), do: {:reject, nil}
+
+  defp process_tag(_, message), do: {:ok, message}
+
+  def filter_message(actor, message) do
+    User.get_cached_by_ap_id(actor)
+    |> get_tags()
+    |> Enum.reduce({:ok, message}, fn
+      tag, {:ok, message} ->
+        process_tag(tag, message)
+
+      _, error ->
+        error
+    end)
+  end
+
+  @impl true
+  def filter(%{"object" => target_actor, "type" => "Follow"} = message),
+    do: filter_message(target_actor, message)
+
+  @impl true
+  def filter(%{"actor" => actor, "type" => "Create"} = message),
+    do: filter_message(actor, message)
+
+  @impl true
+  def filter(message), do: {:ok, message}
+end
index 43725c3db9f273cb37c28099b6c88eb5ed28a7af..7151efdeb79774b1356403b4f7e291601b77098a 100644 (file)
@@ -313,6 +313,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     |> Map.put("tag", combined)
   end
 
+  def fix_tag(%{"tag" => %{} = tag} = object), do: Map.put(object, "tag", [tag])
+
   def fix_tag(object), do: object
 
   # content map usually only has one language so this will do for now.
index dcf681b6d50478bcca2103db52dea17f573ce26a..b9588bee59634f6990d1ebf8dccdbf8a44b95de7 100644 (file)
@@ -86,7 +86,7 @@ defmodule Pleroma.Web.ActivityPub.UserView 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 @@ defmodule Pleroma.Web.ActivityPub.UserView 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 @@ defmodule Pleroma.Web.ActivityPub.UserView 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 @@ defmodule Pleroma.Web.ActivityPub.UserView 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
index 7f3fbff4aad9aa93e299de55345f5f220dafb125..85769c3d7d42aad14ec5a9e25c48978d17ac7726 100644 (file)
@@ -605,7 +605,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController 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 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
       followers =
         cond do
           for_user && user.id == for_user.id -> followers
-          user.info.hide_network -> []
+          user.info.hide_followings -> []
           true -> followers
         end
 
index d1b11d4f10288c9db64e6aa6e7c91df76104f994..c0e289ef8013b7ed3a1e6a1b9a84e0ed2ff627cd 100644 (file)
@@ -192,8 +192,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
     page_url = page_url_data |> to_string
 
     image_url =
-      URI.merge(page_url_data, URI.parse(rich_media[:image]))
-      |> to_string
+      if rich_media[:image] != nil do
+        URI.merge(page_url_data, URI.parse(rich_media[:image]))
+        |> to_string
+      else
+        nil
+      end
 
     site_name = rich_media[:site_name] || page_url_data.host
 
index 32dec98873e93b8df43525c5b4a951cd3f534520..38f1cdeecb5c83ded6d18ca0357cd92700d8d896 100644 (file)
@@ -54,22 +54,12 @@ defmodule Pleroma.Web.RichMedia.Parser do
     {:error, "Found metadata was invalid or incomplete: #{inspect(data)}"}
   end
 
-  defp string_is_valid_unicode(data) when is_binary(data) do
-    data
-    |> :unicode.characters_to_binary()
-    |> clean_string()
-  end
-
-  defp string_is_valid_unicode(data), do: {:ok, data}
-
-  defp clean_string({:error, _, _}), do: {:error, "Invalid data"}
-  defp clean_string(data), do: {:ok, data}
-
   defp clean_parsed_data(data) do
     data
-    |> Enum.reject(fn {_, val} ->
-      case string_is_valid_unicode(val) do
-        {:ok, _} -> false
+    |> Enum.reject(fn {key, val} ->
+      with {:ok, _} <- Jason.encode(%{key => val}) do
+        false
+      else
         _ -> true
       end
     end)
index c6b4d37ab8eddb24c442c7530498218d3b8a177d..7f606ac404683c389a7328f991cbaf1d1e69ff87 100644 (file)
@@ -454,6 +454,7 @@ defmodule Pleroma.Web.Router do
   scope "/", Pleroma.Web.ActivityPub do
     pipe_through([:activitypub_client])
 
+    get("/api/ap/whoami", ActivityPubController, :whoami)
     get("/users/:nickname/inbox", ActivityPubController, :read_inbox)
     post("/users/:nickname/outbox", ActivityPubController, :update_outbox)
   end
index 3064d61eaa2e1ecd09ecd108ebce7814b675be58..5e3fe93521d932936d7574194e631fba1bdcfa24 100644 (file)
@@ -503,7 +503,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller 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 @@ defmodule Pleroma.Web.TwitterAPI.Controller 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 @@ defmodule Pleroma.Web.TwitterAPI.Controller 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")
index 15682db8fde5cdd6a16e55179a731fa9d7f3df59..cd7c4349c7645388b40275e068cd925a799f9855 100644 (file)
@@ -108,7 +108,8 @@ defmodule Pleroma.Web.TwitterAPI.UserView 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
diff --git a/priv/repo/migrations/20190203185340_split_hide_network.exs b/priv/repo/migrations/20190203185340_split_hide_network.exs
new file mode 100644 (file)
index 0000000..9c44e8a
--- /dev/null
@@ -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
diff --git a/priv/repo/migrations/20190204200237_add_correct_dm_index.exs b/priv/repo/migrations/20190204200237_add_correct_dm_index.exs
new file mode 100644 (file)
index 0000000..558732c
--- /dev/null
@@ -0,0 +1,30 @@
+defmodule Pleroma.Repo.Migrations.AddCorrectDMIndex do
+  use Ecto.Migration
+  @disable_ddl_transaction true
+
+  def up do
+    drop_if_exists(
+      index(:activities, ["activity_visibility(actor, recipients, data)"],
+        name: :activities_visibility_index
+      )
+    )
+
+    create(
+      index(:activities, ["activity_visibility(actor, recipients, data)", "id DESC NULLS LAST"],
+        name: :activities_visibility_index,
+        concurrently: true,
+        where: "data->>'type' = 'Create'"
+      )
+    )
+  end
+
+  def down do
+    drop(
+      index(:activities, ["activity_visibility(actor, recipients, data)", "id DESC"],
+        name: :activities_visibility_index,
+        concurrently: true,
+        where: "data->>'type' = 'Create'"
+      )
+    )
+  end
+end
index d3dd160dd92be987ce92988e16863ad5ec52e8b9..0a0103793520ebad0408a89fdafb53dae8ca74e0 100644 (file)
@@ -386,9 +386,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest 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 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest 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)
 
index 8528d4f642bd139589fe672a392b9480b43c6fd6..d4e2acae3f9e63406fa3e8da28ede0d1bd998351 100644 (file)
@@ -1101,9 +1101,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest 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 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest 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 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest 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 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest 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)
 
index 863abd10f142fd858f23891ed8e66ac5e9ff45ff..6777354c3e0b452f777082ad8abe07fbd1ad7323 100644 (file)
@@ -1132,8 +1132,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest 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 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
       assert [] == response
     end
 
-    test "it returns the followers for a hidden network if requested by the user themselves", %{
-      conn: conn
-    } do
-      user = insert(:user, %{info: %{hide_network: true}})
+    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_followers: true}})
       follower_one = insert(:user)
       follower_two = insert(:user)
       _not_follower = insert(:user)
@@ -1256,8 +1257,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest 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 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
       assert [] == json_response(conn, 200)
     end
 
-    test "it returns friends for a hidden network if the user themselves request it", %{
-      conn: conn
-    } do
-      user = insert(:user, %{info: %{hide_network: true}})
+    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_followings: true}})
       followed_one = insert(:user)
       followed_two = insert(:user)
       _not_followed = insert(:user)
@@ -1364,27 +1366,51 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest 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_followings" => "true"
+      })
+
+      user = Repo.get!(User, user.id)
+      assert user.info.hide_followings == true
+
+      conn =
+        conn
+        |> assign(:user, user)
+        |> post("/api/account/update_profile.json", %{
+          "hide_followings" => "false"
+        })
+
+      user = Repo.get!(User, user.id)
+      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_network" => "true"
+        "hide_followers" => "true"
       })
 
       user = Repo.get!(User, user.id)
-      assert user.info.hide_network == true
+      assert user.info.hide_followers == true
 
       conn =
         conn
         |> assign(:user, user)
         |> post("/api/account/update_profile.json", %{
-          "hide_network" => "false"
+          "hide_followers" => "false"
         })
 
       user = Repo.get!(User, user.id)
-      assert user.info.hide_network == false
+      assert user.info.hide_followers == false
       assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})
     end
 
index dc9bad3693d8b027b02db2520b7dfc6e59dc55ee..007d7d8e68e5e2206a3f49cd5c5957d185307a7b 100644 (file)
@@ -36,6 +36,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
   describe "GET /api/statusnet/config.json" do
     test "it returns the managed config", %{conn: conn} do
       Pleroma.Config.put([:instance, :managed_config], false)
+      Pleroma.Config.put([:fe], theme: "rei-ayanami-towel")
 
       response =
         conn
index daf18c1c5b8d2ab8449ba0648310ebed5e2f36d1..0885afaec3e0c4ac205a8400953c0bd5f54acb19 100644 (file)
@@ -100,7 +100,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest 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 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest 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 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest 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 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
       "locked" => false,
       "default_scope" => "public",
       "no_rich_text" => false,
-      "hide_network" => false,
+      "hide_followings" => false,
+      "hide_followers" => false,
       "fields" => [],
       "pleroma" => %{
         "confirmation_pending" => false,