Merge branch 'develop' into mutes-blocks-pagination
authorEgor Kislitsyn <egor@kislitsyn.com>
Mon, 19 Oct 2020 11:40:03 +0000 (15:40 +0400)
committerEgor Kislitsyn <egor@kislitsyn.com>
Mon, 19 Oct 2020 11:40:03 +0000 (15:40 +0400)
1  2 
CHANGELOG.md
lib/pleroma/web/mastodon_api/controllers/account_controller.ex
test/pleroma/web/mastodon_api/controllers/account_controller_test.exs

diff --combined CHANGELOG.md
index 216d7bb321e9fabaf64746dcb6d81ff2733aeb4d,05e94581acd7674ead6faab3e1a84b455d213c10..41f0a4402c7ca010e962c1983b5f7accb841c3ce
@@@ -9,10 -9,13 +9,14 @@@ The format is based on [Keep a Changelo
  - Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`)
  - Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`)
  - Mix task option for force-unfollowing relays
+ - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details).
+ - Pleroma API: Importing the mutes users from CSV files.
+ - Experimental websocket-based federation between Pleroma instances.
 +- Support pagination of blocks and mutes
  
  ### Changed
  
+ - **Breaking** Requires `libmagic` (or `file`) to guess file types.
  - **Breaking:** Pleroma Admin API: emoji packs and files routes changed.
  - **Breaking:** Sensitive/NSFW statuses no longer disable link previews.
  - Search: Users are now findable by their urls.
  - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option).
  - Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`.
  
- ### Added
- - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details).
- - Pleroma API: Importing the mutes users from CSV files.
- - Experimental websocket-based federation between Pleroma instances.
  <details>
    <summary>API Changes</summary>
  
index c8606e5d6eba6de554a045f2afdf87d3d2fc9a21,3cfdab91461784be778748522c52d781ede96ce7..a2715cf28a3d35dc3363714c35f0f029d45523c8
@@@ -177,7 -177,6 +177,6 @@@ defmodule Pleroma.Web.MastodonAPI.Accou
      user_params =
        [
          :no_rich_text,
-         :locked,
          :hide_followers_count,
          :hide_follows_count,
          :hide_followers,
          :show_role,
          :skip_thread_containment,
          :allow_following_move,
-         :discoverable,
          :accepts_chat_messages
        ]
        |> Enum.reduce(%{}, fn key, acc ->
          if bot, do: {:ok, "Service"}, else: {:ok, "Person"}
        end)
        |> Maps.put_if_present(:actor_type, params[:actor_type])
+       |> Maps.put_if_present(:is_locked, params[:locked])
+       |> Maps.put_if_present(:is_discoverable, params[:discoverable])
  
      # What happens here:
      #
    end
  
    @doc "GET /api/v1/mutes"
 -  def mutes(%{assigns: %{user: user}} = conn, _) do
 -    users = User.muted_users(user, _restrict_deactivated = true)
 -    render(conn, "index.json", users: users, for: user, as: :user)
 +  def mutes(%{assigns: %{user: user}} = conn, params) do
 +    users =
 +      user
 +      |> User.muted_users_relation(_restrict_deactivated = true)
 +      |> Pleroma.Pagination.fetch_paginated(Map.put(params, :skip_order, true))
 +
 +    conn
 +    |> add_link_headers(users)
 +    |> render("index.json", users: users, for: user, as: :user)
    end
  
    @doc "GET /api/v1/blocks"
 -  def blocks(%{assigns: %{user: user}} = conn, _) do
 -    users = User.blocked_users(user, _restrict_deactivated = true)
 -    render(conn, "index.json", users: users, for: user, as: :user)
 +  def blocks(%{assigns: %{user: user}} = conn, params) do
 +    users =
 +      user
 +      |> User.blocked_users_relation(_restrict_deactivated = true)
 +      |> Pleroma.Pagination.fetch_paginated(Map.put(params, :skip_order, true))
 +
 +    conn
 +    |> add_link_headers(users)
 +    |> render("index.json", users: users, for: user, as: :user)
    end
  
    @doc "GET /api/v1/endorsements"
index 69f2b6f4a063ff7a64dd6a9da8aac04bcb14cfa3,7336fa8de756f1ab9a1106758c26d85cb10167f3..c86223b264fbce22456af83add7ad973360053c3
@@@ -380,7 -380,7 +380,7 @@@ defmodule Pleroma.Web.MastodonAPI.Accou
        other_user = insert(:user)
  
        file = %Plug.Upload{
-         content_type: "image/jpg",
+         content_type: "image/jpeg",
          path: Path.absname("test/fixtures/image.jpg"),
          filename: "an_image.jpg"
        }
      end
  
      test "cancelling follow request", %{conn: conn} do
-       %{id: other_user_id} = insert(:user, %{locked: true})
+       %{id: other_user_id} = insert(:user, %{is_locked: true})
  
        assert %{"id" => ^other_user_id, "following" => false, "requested" => true} =
                 conn
  
    test "getting a list of mutes" do
      %{user: user, conn: conn} = oauth_access(["read:mutes"])
 -    other_user = insert(:user)
 +    %{id: id1} = other_user1 = insert(:user)
 +    %{id: id2} = other_user2 = insert(:user)
 +    %{id: id3} = other_user3 = insert(:user)
 +
 +    {:ok, _user_relationships} = User.mute(user, other_user1)
 +    {:ok, _user_relationships} = User.mute(user, other_user2)
 +    {:ok, _user_relationships} = User.mute(user, other_user3)
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/mutes")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [id1, id2, id3] == Enum.map(result, & &1["id"])
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/mutes?limit=1")
 +      |> json_response_and_validate_schema(200)
  
 -    {:ok, _user_relationships} = User.mute(user, other_user)
 +    assert [%{"id" => ^id1}] = result
  
 -    conn = get(conn, "/api/v1/mutes")
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/mutes?since_id=#{id1}")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [%{"id" => ^id2}, %{"id" => ^id3}] = result
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/mutes?since_id=#{id1}&max_id=#{id3}")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [%{"id" => ^id2}] = result
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/mutes?since_id=#{id1}&limit=1")
 +      |> json_response_and_validate_schema(200)
  
 -    other_user_id = to_string(other_user.id)
 -    assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200)
 +    assert [%{"id" => ^id2}] = result
    end
  
    test "getting a list of blocks" do
      %{user: user, conn: conn} = oauth_access(["read:blocks"])
 -    other_user = insert(:user)
 +    %{id: id1} = other_user1 = insert(:user)
 +    %{id: id2} = other_user2 = insert(:user)
 +    %{id: id3} = other_user3 = insert(:user)
  
 -    {:ok, _user_relationship} = User.block(user, other_user)
 +    {:ok, _user_relationship} = User.block(user, other_user1)
 +    {:ok, _user_relationship} = User.block(user, other_user3)
 +    {:ok, _user_relationship} = User.block(user, other_user2)
  
 -    conn =
 +    result =
        conn
        |> assign(:user, user)
        |> get("/api/v1/blocks")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [id1, id2, id3] == Enum.map(result, & &1["id"])
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/blocks?limit=1")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [%{"id" => ^id1}] = result
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/blocks?since_id=#{id1}")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [%{"id" => ^id2}, %{"id" => ^id3}] = result
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/blocks?since_id=#{id1}&max_id=#{id3}")
 +      |> json_response_and_validate_schema(200)
 +
 +    assert [%{"id" => ^id2}] = result
 +
 +    result =
 +      conn
 +      |> assign(:user, user)
 +      |> get("/api/v1/blocks?since_id=#{id1}&limit=1")
 +      |> json_response_and_validate_schema(200)
  
 -    other_user_id = to_string(other_user.id)
 -    assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200)
 +    assert [%{"id" => ^id2}] = result
    end
  end