diff options
| author | Roman Chvanikov <chvanikoff@pm.me> | 2019-09-14 18:29:51 +0300 | 
|---|---|---|
| committer | Roman Chvanikov <chvanikoff@pm.me> | 2019-09-14 18:29:51 +0300 | 
| commit | d7457c9165b83c0f1514cf0532b5a8bdc515ea02 (patch) | |
| tree | 65209338d595c55397f85ad2295bc48b778b820e | |
| parent | 0bd2b85edbf3b7062570778649cf2b77cc7a0bce (diff) | |
| parent | 3ae448b592214b43af1d079c997c6f6b91d31aeb (diff) | |
| download | pleroma-d7457c9165b83c0f1514cf0532b5a8bdc515ea02.tar.gz pleroma-d7457c9165b83c0f1514cf0532b5a8bdc515ea02.zip | |
Merge branch 'develop' into refactor/subscription
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/controller_helper.ex | 95 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex | 32 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/pleroma_api_controller.ex | 27 | ||||
| -rw-r--r-- | test/activity_test.exs | 8 | ||||
| -rw-r--r-- | test/integration/mastodon_websocket_test.exs | 29 | ||||
| -rw-r--r-- | test/web/activity_pub/publisher_test.exs | 24 | ||||
| -rw-r--r-- | test/web/activity_pub/relay_test.exs | 13 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 67 | ||||
| -rw-r--r-- | test/web/twitter_api/util_controller_test.exs | 13 | ||||
| -rw-r--r-- | test/web/web_finger/web_finger_controller_test.exs | 13 | 
11 files changed, 182 insertions, 140 deletions
| diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fe3bf687..0c5e43123 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).  ### Security  - OStatus: eliminate the possibility of a protocol downgrade attack.  - OStatus: prevent following locked accounts, bypassing the approval process. +- Mastodon API: respect post privacy in `/api/v1/statuses/:id/{favourited,reblogged}_by`  ### Removed  - **Breaking:** GNU Social API with Qvitter extensions support diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index eeac9f503..b53a01955 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -34,79 +34,38 @@ defmodule Pleroma.Web.ControllerHelper do    defp param_to_integer(_, default), do: default -  def add_link_headers( -        conn, -        method, -        activities, -        param \\ nil, -        params \\ %{}, -        func3 \\ nil, -        func4 \\ nil -      ) do -    params = -      conn.params -      |> Map.drop(["since_id", "max_id", "min_id"]) -      |> Map.merge(params) +  def add_link_headers(conn, activities, extra_params \\ %{}) do +    case List.last(activities) do +      %{id: max_id} -> +        params = +          conn.params +          |> Map.drop(Map.keys(conn.path_params)) +          |> Map.drop(["since_id", "max_id", "min_id"]) +          |> Map.merge(extra_params) -    last = List.last(activities) +        limit = +          params +          |> Map.get("limit", "20") +          |> String.to_integer() -    func3 = func3 || (&mastodon_api_url/3) -    func4 = func4 || (&mastodon_api_url/4) +        min_id = +          if length(activities) <= limit do +            activities +            |> List.first() +            |> Map.get(:id) +          else +            activities +            |> Enum.at(limit * -1) +            |> Map.get(:id) +          end -    if last do -      max_id = last.id +        next_url = current_url(conn, Map.merge(params, %{max_id: max_id})) +        prev_url = current_url(conn, Map.merge(params, %{min_id: min_id})) -      limit = -        params -        |> Map.get("limit", "20") -        |> String.to_integer() +        put_resp_header(conn, "link", "<#{next_url}>; rel=\"next\", <#{prev_url}>; rel=\"prev\"") -      min_id = -        if length(activities) <= limit do -          activities -          |> List.first() -          |> Map.get(:id) -        else -          activities -          |> Enum.at(limit * -1) -          |> Map.get(:id) -        end - -      {next_url, prev_url} = -        if param do -          { -            func4.( -              Pleroma.Web.Endpoint, -              method, -              param, -              Map.merge(params, %{max_id: max_id}) -            ), -            func4.( -              Pleroma.Web.Endpoint, -              method, -              param, -              Map.merge(params, %{min_id: min_id}) -            ) -          } -        else -          { -            func3.( -              Pleroma.Web.Endpoint, -              method, -              Map.merge(params, %{max_id: max_id}) -            ), -            func3.( -              Pleroma.Web.Endpoint, -              method, -              Map.merge(params, %{min_id: min_id}) -            ) -          } -        end - -      conn -      |> put_resp_header("link", "<#{next_url}>; rel=\"next\", <#{prev_url}>; rel=\"prev\"") -    else -      conn +      _ -> +        conn      end    end  end diff --git a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex index 3730c962c..eefdb8c06 100644 --- a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    use Pleroma.Web, :controller    import Pleroma.Web.ControllerHelper, -    only: [json_response: 3, add_link_headers: 5, add_link_headers: 4, add_link_headers: 3] +    only: [json_response: 3, add_link_headers: 2, add_link_headers: 3]    alias Ecto.Changeset    alias Pleroma.Activity @@ -367,7 +367,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> Enum.reverse()      conn -    |> add_link_headers(:home_timeline, activities) +    |> add_link_headers(activities)      |> put_view(StatusView)      |> render("index.json", %{activities: activities, for: user, as: :activity})    end @@ -386,7 +386,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> Enum.reverse()      conn -    |> add_link_headers(:public_timeline, activities, false, %{"local" => local_only}) +    |> add_link_headers(activities, %{"local" => local_only})      |> put_view(StatusView)      |> render("index.json", %{activities: activities, for: user, as: :activity})    end @@ -400,7 +400,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        activities = ActivityPub.fetch_user_activities(user, reading_user, params)        conn -      |> add_link_headers(:user_statuses, activities, params["id"]) +      |> add_link_headers(activities)        |> put_view(StatusView)        |> render("index.json", %{          activities: activities, @@ -424,7 +424,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> Pagination.fetch_paginated(params)      conn -    |> add_link_headers(:dm_timeline, activities) +    |> add_link_headers(activities)      |> put_view(StatusView)      |> render("index.json", %{activities: activities, for: user, as: :activity})    end @@ -539,7 +539,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    def scheduled_statuses(%{assigns: %{user: user}} = conn, params) do      with scheduled_activities <- MastodonAPI.get_scheduled_activities(user, params) do        conn -      |> add_link_headers(:scheduled_statuses, scheduled_activities) +      |> add_link_headers(scheduled_activities)        |> put_view(ScheduledActivityView)        |> render("index.json", %{scheduled_activities: scheduled_activities})      end @@ -722,7 +722,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      notifications = MastodonAPI.get_notifications(user, params)      conn -    |> add_link_headers(:notifications, notifications) +    |> add_link_headers(notifications)      |> put_view(NotificationView)      |> render("index.json", %{notifications: notifications, for: user})    end @@ -890,6 +890,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    def favourited_by(%{assigns: %{user: user}} = conn, %{"id" => id}) do      with %Activity{} = activity <- Activity.get_by_id_with_object(id), +         {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)},           %Object{data: %{"likes" => likes}} <- Object.normalize(activity) do        q = from(u in User, where: u.ap_id in ^likes) @@ -901,12 +902,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> put_view(AccountView)        |> render("accounts.json", %{for: user, users: users, as: :user})      else +      {:visible, false} -> {:error, :not_found}        _ -> json(conn, [])      end    end    def reblogged_by(%{assigns: %{user: user}} = conn, %{"id" => id}) do      with %Activity{} = activity <- Activity.get_by_id_with_object(id), +         {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)},           %Object{data: %{"announcements" => announces}} <- Object.normalize(activity) do        q = from(u in User, where: u.ap_id in ^announces) @@ -918,6 +921,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> put_view(AccountView)        |> render("accounts.json", %{for: user, users: users, as: :user})      else +      {:visible, false} -> {:error, :not_found}        _ -> json(conn, [])      end    end @@ -956,7 +960,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> Enum.reverse()      conn -    |> add_link_headers(:hashtag_timeline, activities, params["tag"], %{"local" => local_only}) +    |> add_link_headers(activities, %{"local" => local_only})      |> put_view(StatusView)      |> render("index.json", %{activities: activities, for: user, as: :activity})    end @@ -972,7 +976,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do          end        conn -      |> add_link_headers(:followers, followers, user) +      |> add_link_headers(followers)        |> put_view(AccountView)        |> render("accounts.json", %{for: for_user, users: followers, as: :user})      end @@ -989,7 +993,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do          end        conn -      |> add_link_headers(:following, followers, user) +      |> add_link_headers(followers)        |> put_view(AccountView)        |> render("accounts.json", %{for: for_user, users: followers, as: :user})      end @@ -1214,7 +1218,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> Enum.reverse()      conn -    |> add_link_headers(:favourites, activities) +    |> add_link_headers(activities)      |> put_view(StatusView)      |> render("index.json", %{activities: activities, for: user, as: :activity})    end @@ -1241,7 +1245,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do          |> Enum.reverse()        conn -      |> add_link_headers(:favourites, activities) +      |> add_link_headers(activities)        |> put_view(StatusView)        |> render("index.json", %{activities: activities, for: for_user, as: :activity})      else @@ -1262,7 +1266,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> Enum.map(fn b -> Map.put(b.activity, :bookmark, Map.delete(b, :activity)) end)      conn -    |> add_link_headers(:bookmarks, bookmarks) +    |> add_link_headers(bookmarks)      |> put_view(StatusView)      |> render("index.json", %{activities: activities, for: user, as: :activity})    end @@ -1702,7 +1706,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        end)      conn -    |> add_link_headers(:conversations, participations) +    |> add_link_headers(participations)      |> json(conversations)    end diff --git a/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex index 71792d913..246b351dc 100644 --- a/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex @@ -5,7 +5,7 @@  defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do    use Pleroma.Web, :controller -  import Pleroma.Web.ControllerHelper, only: [add_link_headers: 7] +  import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2]    alias Pleroma.Conversation.Participation    alias Pleroma.Notification @@ -28,31 +28,22 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do          %{assigns: %{user: user}} = conn,          %{"id" => participation_id} = params        ) do -    params = -      params -      |> Map.put("blocking_user", user) -      |> Map.put("muting_user", user) -      |> Map.put("user", user) - -    participation = -      participation_id -      |> Participation.get(preload: [:conversation]) +    participation = Participation.get(participation_id, preload: [:conversation])      if user.id == participation.user_id do +      params = +        params +        |> Map.put("blocking_user", user) +        |> Map.put("muting_user", user) +        |> Map.put("user", user) +        activities =          participation.conversation.ap_id          |> ActivityPub.fetch_activities_for_context(params)          |> Enum.reverse()        conn -      |> add_link_headers( -        :conversation_statuses, -        activities, -        participation_id, -        params, -        nil, -        &pleroma_api_url/4 -      ) +      |> add_link_headers(activities)        |> put_view(StatusView)        |> render("index.json", %{activities: activities, for: user, as: :activity})      end diff --git a/test/activity_test.exs b/test/activity_test.exs index f9f789a76..275cab81e 100644 --- a/test/activity_test.exs +++ b/test/activity_test.exs @@ -213,7 +213,11 @@ defmodule Pleroma.ActivityTest do      assert [] == Activity.all_by_actor_and_id(user, []) -    assert [%Activity{id: ^id2}, %Activity{id: ^id1}] = -             Activity.all_by_actor_and_id(user.ap_id, [id1, id2]) +    activities = +      user.ap_id +      |> Activity.all_by_actor_and_id([id1, id2]) +      |> Enum.sort(&(&1.id < &2.id)) + +    assert [%Activity{id: ^id1}, %Activity{id: ^id2}] = activities    end  end diff --git a/test/integration/mastodon_websocket_test.exs b/test/integration/mastodon_websocket_test.exs index 3975cdcd6..63bf73412 100644 --- a/test/integration/mastodon_websocket_test.exs +++ b/test/integration/mastodon_websocket_test.exs @@ -5,6 +5,7 @@  defmodule Pleroma.Integration.MastodonWebsocketTest do    use Pleroma.DataCase +  import ExUnit.CaptureLog    import Pleroma.Factory    alias Pleroma.Integration.WebsocketClient @@ -39,13 +40,17 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do    end    test "refuses invalid requests" do -    assert {:error, {400, _}} = start_socket() -    assert {:error, {404, _}} = start_socket("?stream=ncjdk") +    capture_log(fn -> +      assert {:error, {400, _}} = start_socket() +      assert {:error, {404, _}} = start_socket("?stream=ncjdk") +    end)    end    test "requires authentication and a valid token for protected streams" do -    assert {:error, {403, _}} = start_socket("?stream=user&access_token=aaaaaaaaaaaa") -    assert {:error, {403, _}} = start_socket("?stream=user") +    capture_log(fn -> +      assert {:error, {403, _}} = start_socket("?stream=user&access_token=aaaaaaaaaaaa") +      assert {:error, {403, _}} = start_socket("?stream=user") +    end)    end    test "allows public streams without authentication" do @@ -100,19 +105,27 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do      test "accepts the 'user' stream", %{token: token} = _state do        assert {:ok, _} = start_socket("?stream=user&access_token=#{token.token}") -      assert {:error, {403, "Forbidden"}} = start_socket("?stream=user") + +      assert capture_log(fn -> +               assert {:error, {403, "Forbidden"}} = start_socket("?stream=user") +             end) =~ ":badarg"      end      test "accepts the 'user:notification' stream", %{token: token} = _state do        assert {:ok, _} = start_socket("?stream=user:notification&access_token=#{token.token}") -      assert {:error, {403, "Forbidden"}} = start_socket("?stream=user:notification") + +      assert capture_log(fn -> +               assert {:error, {403, "Forbidden"}} = start_socket("?stream=user:notification") +             end) =~ ":badarg"      end      test "accepts valid token on Sec-WebSocket-Protocol header", %{token: token} do        assert {:ok, _} = start_socket("?stream=user", [{"Sec-WebSocket-Protocol", token.token}]) -      assert {:error, {403, "Forbidden"}} = -               start_socket("?stream=user", [{"Sec-WebSocket-Protocol", "I am a friend"}]) +      assert capture_log(fn -> +               assert {:error, {403, "Forbidden"}} = +                        start_socket("?stream=user", [{"Sec-WebSocket-Protocol", "I am a friend"}]) +             end) =~ ":badarg"      end    end  end diff --git a/test/web/activity_pub/publisher_test.exs b/test/web/activity_pub/publisher_test.exs index 36a39c84c..381757e1b 100644 --- a/test/web/activity_pub/publisher_test.exs +++ b/test/web/activity_pub/publisher_test.exs @@ -5,6 +5,7 @@  defmodule Pleroma.Web.ActivityPub.PublisherTest do    use Pleroma.DataCase +  import ExUnit.CaptureLog    import Pleroma.Factory    import Tesla.Mock    import Mock @@ -188,7 +189,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do        actor = insert(:user)        inbox = "http://connrefused.site/users/nick1/inbox" -      assert {:error, _} = Publisher.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1}) +      assert capture_log(fn -> +               assert {:error, _} = +                        Publisher.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1}) +             end) =~ "connrefused"        assert called(Instances.set_unreachable(inbox))      end @@ -212,14 +216,16 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do        actor = insert(:user)        inbox = "http://connrefused.site/users/nick1/inbox" -      assert {:error, _} = -               Publisher.publish_one(%{ -                 inbox: inbox, -                 json: "{}", -                 actor: actor, -                 id: 1, -                 unreachable_since: NaiveDateTime.utc_now() -               }) +      assert capture_log(fn -> +               assert {:error, _} = +                        Publisher.publish_one(%{ +                          inbox: inbox, +                          json: "{}", +                          actor: actor, +                          id: 1, +                          unreachable_since: NaiveDateTime.utc_now() +                        }) +             end) =~ "connrefused"        refute called(Instances.set_unreachable(inbox))      end diff --git a/test/web/activity_pub/relay_test.exs b/test/web/activity_pub/relay_test.exs index 4f7d592a6..9db4255d8 100644 --- a/test/web/activity_pub/relay_test.exs +++ b/test/web/activity_pub/relay_test.exs @@ -10,6 +10,7 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Relay +  import ExUnit.CaptureLog    import Pleroma.Factory    import Mock @@ -20,7 +21,9 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do    describe "follow/1" do      test "returns errors when user not found" do -      assert Relay.follow("test-ap-id") == {:error, "Could not fetch by AP id"} +      assert capture_log(fn -> +               assert Relay.follow("test-ap-id") == {:error, "Could not fetch by AP id"} +             end) =~ "Could not fetch by AP id"      end      test "returns activity" do @@ -37,7 +40,9 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do    describe "unfollow/1" do      test "returns errors when user not found" do -      assert Relay.unfollow("test-ap-id") == {:error, "Could not fetch by AP id"} +      assert capture_log(fn -> +               assert Relay.unfollow("test-ap-id") == {:error, "Could not fetch by AP id"} +             end) =~ "Could not fetch by AP id"      end      test "returns activity" do @@ -78,7 +83,9 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do            }          ) -      assert Relay.publish(activity) == {:error, nil} +      assert capture_log(fn -> +               assert Relay.publish(activity) == {:error, nil} +             end) =~ "[error] error: nil"      end      test_with_mock "returns announce activity and publish to federate", diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 95fcecc52..27a8366f7 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -3890,7 +3890,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do          build_conn()          |> assign(:user, user) -      [conn: conn, activity: activity] +      [conn: conn, activity: activity, user: user]      end      test "returns users who have favorited the status", %{conn: conn, activity: activity} do @@ -3950,6 +3950,32 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do        [%{"id" => id}] = response        assert id == other_user.id      end + +    test "requires authentification for private posts", %{conn: conn, user: user} do +      other_user = insert(:user) + +      {:ok, activity} = +        CommonAPI.post(user, %{ +          "status" => "@#{other_user.nickname} wanna get some #cofe together?", +          "visibility" => "direct" +        }) + +      {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + +      conn +      |> assign(:user, nil) +      |> get("/api/v1/statuses/#{activity.id}/favourited_by") +      |> json_response(404) + +      response = +        build_conn() +        |> assign(:user, other_user) +        |> get("/api/v1/statuses/#{activity.id}/favourited_by") +        |> json_response(200) + +      [%{"id" => id}] = response +      assert id == other_user.id +    end    end    describe "GET /api/v1/statuses/:id/reblogged_by" do @@ -3961,7 +3987,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do          build_conn()          |> assign(:user, user) -      [conn: conn, activity: activity] +      [conn: conn, activity: activity, user: user]      end      test "returns users who have reblogged the status", %{conn: conn, activity: activity} do @@ -4021,6 +4047,29 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do        [%{"id" => id}] = response        assert id == other_user.id      end + +    test "requires authentification for private posts", %{conn: conn, user: user} do +      other_user = insert(:user) + +      {:ok, activity} = +        CommonAPI.post(user, %{ +          "status" => "@#{other_user.nickname} wanna get some #cofe together?", +          "visibility" => "direct" +        }) + +      conn +      |> assign(:user, nil) +      |> get("/api/v1/statuses/#{activity.id}/reblogged_by") +      |> json_response(404) + +      response = +        build_conn() +        |> assign(:user, other_user) +        |> get("/api/v1/statuses/#{activity.id}/reblogged_by") +        |> json_response(200) + +      assert [] == response +    end    end    describe "POST /auth/password, with valid parameters" do @@ -4155,13 +4204,15 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do        Config.put([:suggestions, :enabled], true)        Config.put([:suggestions, :third_party_engine], "http://test500?{{host}}&{{user}}") -      res = -        conn -        |> assign(:user, user) -        |> get("/api/v1/suggestions") -        |> json_response(500) +      assert capture_log(fn -> +               res = +                 conn +                 |> assign(:user, user) +                 |> get("/api/v1/suggestions") +                 |> json_response(500) -      assert res == "Something went wrong" +               assert res == "Something went wrong" +             end) =~ "Could not retrieve suggestions"      end      test "returns suggestions", %{conn: conn, user: user, other_user: other_user} do diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index a3c6145c0..187abf427 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -8,6 +8,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.Web.CommonAPI +  import ExUnit.CaptureLog    import Pleroma.Factory    import Mock @@ -338,12 +339,14 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      test "show follow page with error when user cannot fecth by `acct` link", %{conn: conn} do        user = insert(:user) -      response = -        conn -        |> assign(:user, user) -        |> get("/ostatus_subscribe?acct=https://mastodon.social/users/not_found") +      assert capture_log(fn -> +               response = +                 conn +                 |> assign(:user, user) +                 |> get("/ostatus_subscribe?acct=https://mastodon.social/users/not_found") -      assert html_response(response, 200) =~ "Error fetching user" +               assert html_response(response, 200) =~ "Error fetching user" +             end) =~ "Object has been deleted"      end    end diff --git a/test/web/web_finger/web_finger_controller_test.exs b/test/web/web_finger/web_finger_controller_test.exs index e23086b2a..bd3ccaaf7 100644 --- a/test/web/web_finger/web_finger_controller_test.exs +++ b/test/web/web_finger/web_finger_controller_test.exs @@ -5,6 +5,7 @@  defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do    use Pleroma.Web.ConnCase +  import ExUnit.CaptureLog    import Pleroma.Factory    import Tesla.Mock @@ -75,11 +76,13 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do    test "Sends a 404 when invalid format" do      user = insert(:user) -    assert_raise Phoenix.NotAcceptableError, fn -> -      build_conn() -      |> put_req_header("accept", "text/html") -      |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") -    end +    assert capture_log(fn -> +             assert_raise Phoenix.NotAcceptableError, fn -> +               build_conn() +               |> put_req_header("accept", "text/html") +               |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") +             end +           end) =~ "no supported media type in accept header"    end    test "Sends a 400 when resource param is missing" do | 
