diff options
Diffstat (limited to 'test/web/mastodon_api/controllers')
7 files changed, 177 insertions, 72 deletions
diff --git a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs index 09bdc46e0..82d9e7d2f 100644 --- a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs @@ -269,7 +269,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          |> json_response(200)        assert account_data["fields"] == [ -               %{"name" => "foo", "value" => "bar"}, +               %{"name" => "<a href=\"http://google.com\">foo</a>", "value" => "bar"},                 %{"name" => "link", "value" => ~S(<a href="http://cofe.io" rel="ugc">cofe.io</a>)}               ] @@ -297,7 +297,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          |> json_response(200)        assert account["fields"] == [ -               %{"name" => "foo", "value" => "bar"}, +               %{"name" => "<a href=\"http://google.com\">foo</a>", "value" => "bar"},                 %{"name" => "link", "value" => ~S(<a href="http://cofe.io" rel="ugc">cofe.io</a>)}               ] diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 0d4860a42..8625bb9cf 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -15,6 +15,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do    import Pleroma.Factory    describe "account fetching" do +    clear_config([:instance, :limit_to_local_content]) +      test "works by id" do        user = insert(:user) @@ -44,7 +46,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      test "works by nickname for remote users" do -      limit_to_local = Pleroma.Config.get([:instance, :limit_to_local_content])        Pleroma.Config.put([:instance, :limit_to_local_content], false)        user = insert(:user, nickname: "user@example.com", local: false) @@ -52,13 +53,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          build_conn()          |> get("/api/v1/accounts/#{user.nickname}") -      Pleroma.Config.put([:instance, :limit_to_local_content], limit_to_local)        assert %{"id" => id} = json_response(conn, 200)        assert id == user.id      end      test "respects limit_to_local_content == :all for remote user nicknames" do -      limit_to_local = Pleroma.Config.get([:instance, :limit_to_local_content])        Pleroma.Config.put([:instance, :limit_to_local_content], :all)        user = insert(:user, nickname: "user@example.com", local: false) @@ -67,12 +66,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          build_conn()          |> get("/api/v1/accounts/#{user.nickname}") -      Pleroma.Config.put([:instance, :limit_to_local_content], limit_to_local)        assert json_response(conn, 404)      end      test "respects limit_to_local_content == :unauthenticated for remote user nicknames" do -      limit_to_local = Pleroma.Config.get([:instance, :limit_to_local_content])        Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)        user = insert(:user, nickname: "user@example.com", local: false) @@ -90,7 +87,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do          |> assign(:token, insert(:oauth_token, user: reading_user, scopes: ["read:accounts"]))          |> get("/api/v1/accounts/#{user.nickname}") -      Pleroma.Config.put([:instance, :limit_to_local_content], limit_to_local)        assert %{"id" => id} = json_response(conn, 200)        assert id == user.id      end @@ -457,6 +453,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert id == to_string(other_user.id)      end +    test "cancelling follow request", %{conn: conn} do +      %{id: other_user_id} = insert(:user, %{locked: true}) + +      assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = +               conn |> post("/api/v1/accounts/#{other_user_id}/follow") |> json_response(:ok) + +      assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = +               conn |> post("/api/v1/accounts/#{other_user_id}/unfollow") |> json_response(:ok) +    end +      test "following without reblogs" do        %{conn: conn} = oauth_access(["follow", "read:statuses"])        followed = insert(:user) @@ -667,7 +673,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert json_response(res, 400) == %{"error" => "{\"email\":[\"has already been taken\"]}"}      end +    clear_config([Pleroma.Plugs.RemoteIp, :enabled]) +      test "rate limit", %{conn: conn} do +      Pleroma.Config.put([Pleroma.Plugs.RemoteIp, :enabled], true)        app_token = insert(:oauth_token, user: nil)        conn = diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 86303f92f..6f0606250 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -457,6 +457,30 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do      end    end +  describe "from specified user" do +    test "account_id" do +      %{user: user, conn: conn} = oauth_access(["read:notifications"]) + +      %{id: account_id} = other_user1 = insert(:user) +      other_user2 = insert(:user) + +      {:ok, _activity} = CommonAPI.post(other_user1, %{"status" => "hi @#{user.nickname}"}) +      {:ok, _activity} = CommonAPI.post(other_user2, %{"status" => "bye @#{user.nickname}"}) + +      assert [%{"account" => %{"id" => ^account_id}}] = +               conn +               |> assign(:user, user) +               |> get("/api/v1/notifications", %{account_id: account_id}) +               |> json_response(200) + +      assert %{"error" => "Account is not found"} = +               conn +               |> assign(:user, user) +               |> get("/api/v1/notifications", %{account_id: "cofe"}) +               |> json_response(404) +    end +  end +    defp get_notification_id_by_activity(%{id: id}) do      Notification      |> Repo.get_by(activity_id: id) diff --git a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs index 9666a7f2e..6317d1b47 100644 --- a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs +++ b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs @@ -9,6 +9,9 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do    alias Pleroma.ScheduledActivity    import Pleroma.Factory +  import Ecto.Query + +  clear_config([ScheduledActivity, :enabled])    test "shows scheduled activities" do      %{user: user, conn: conn} = oauth_access(["read:statuses"]) @@ -52,11 +55,26 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do    end    test "updates a scheduled activity" do +    Pleroma.Config.put([ScheduledActivity, :enabled], true)      %{user: user, conn: conn} = oauth_access(["write:statuses"]) -    scheduled_activity = insert(:scheduled_activity, user: user) -    new_scheduled_at = -      NaiveDateTime.add(NaiveDateTime.utc_now(), :timer.minutes(120), :millisecond) +    scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60) + +    {:ok, scheduled_activity} = +      ScheduledActivity.create( +        user, +        %{ +          scheduled_at: scheduled_at, +          params: build(:note).data +        } +      ) + +    job = Repo.one(from(j in Oban.Job, where: j.queue == "scheduled_activities")) + +    assert job.args == %{"activity_id" => scheduled_activity.id} +    assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(scheduled_at) + +    new_scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 120)      res_conn =        put(conn, "/api/v1/scheduled_statuses/#{scheduled_activity.id}", %{ @@ -65,6 +83,9 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do      assert %{"scheduled_at" => expected_scheduled_at} = json_response(res_conn, 200)      assert expected_scheduled_at == Pleroma.Web.CommonAPI.Utils.to_masto_date(new_scheduled_at) +    job = refresh_record(job) + +    assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(new_scheduled_at)      res_conn = put(conn, "/api/v1/scheduled_statuses/404", %{scheduled_at: new_scheduled_at}) @@ -72,8 +93,22 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do    end    test "deletes a scheduled activity" do +    Pleroma.Config.put([ScheduledActivity, :enabled], true)      %{user: user, conn: conn} = oauth_access(["write:statuses"]) -    scheduled_activity = insert(:scheduled_activity, user: user) +    scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60) + +    {:ok, scheduled_activity} = +      ScheduledActivity.create( +        user, +        %{ +          scheduled_at: scheduled_at, +          params: build(:note).data +        } +      ) + +    job = Repo.one(from(j in Oban.Job, where: j.queue == "scheduled_activities")) + +    assert job.args == %{"activity_id" => scheduled_activity.id}      res_conn =        conn @@ -81,7 +116,8 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do        |> delete("/api/v1/scheduled_statuses/#{scheduled_activity.id}")      assert %{} = json_response(res_conn, 200) -    assert nil == Repo.get(ScheduledActivity, scheduled_activity.id) +    refute Repo.get(ScheduledActivity, scheduled_activity.id) +    refute Repo.get(Oban.Job, job.id)      res_conn =        conn diff --git a/test/web/mastodon_api/controllers/search_controller_test.exs b/test/web/mastodon_api/controllers/search_controller_test.exs index 7fedf42e5..effae130c 100644 --- a/test/web/mastodon_api/controllers/search_controller_test.exs +++ b/test/web/mastodon_api/controllers/search_controller_test.exs @@ -53,7 +53,8 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"})        results = -        get(conn, "/api/v2/search", %{"q" => "2hu #private"}) +        conn +        |> get("/api/v2/search", %{"q" => "2hu #private"})          |> json_response(200)        [account | _] = results["accounts"] @@ -73,6 +74,30 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        [status] = results["statuses"]        assert status["id"] == to_string(activity.id)      end + +    test "excludes a blocked users from search results", %{conn: conn} do +      user = insert(:user) +      user_smith = insert(:user, %{nickname: "Agent", name: "I love 2hu"}) +      user_neo = insert(:user, %{nickname: "Agent Neo", name: "Agent"}) + +      {:ok, act1} = CommonAPI.post(user, %{"status" => "This is about 2hu private 天子"}) +      {:ok, act2} = CommonAPI.post(user_smith, %{"status" => "Agent Smith"}) +      {:ok, act3} = CommonAPI.post(user_neo, %{"status" => "Agent Smith"}) +      Pleroma.User.block(user, user_smith) + +      results = +        conn +        |> assign(:user, user) +        |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"])) +        |> get("/api/v2/search", %{"q" => "Agent"}) +        |> json_response(200) + +      status_ids = Enum.map(results["statuses"], fn g -> g["id"] end) + +      assert act3.id in status_ids +      refute act2.id in status_ids +      refute act1.id in status_ids +    end    end    describe ".account_search" do @@ -146,11 +171,10 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"}) -      conn = +      results =          conn          |> get("/api/v1/search", %{"q" => "2hu"}) - -      assert results = json_response(conn, 200) +        |> json_response(200)        [account | _] = results["accounts"]        assert account["id"] == to_string(user_three.id) @@ -168,11 +192,10 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do              "status" => "check out https://shitposter.club/notice/2827873"            }) -        conn = +        results =            conn            |> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"}) - -        assert results = json_response(conn, 200) +          |> json_response(200)          [status, %{"id" => ^activity_id}] = results["statuses"] @@ -189,11 +212,10 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do          })        capture_log(fn -> -        conn = +        results =            conn            |> get("/api/v1/search", %{"q" => Object.normalize(activity).data["id"]}) - -        assert results = json_response(conn, 200) +          |> json_response(200)          [] = results["statuses"]        end) @@ -202,23 +224,23 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do      test "search fetches remote accounts", %{conn: conn} do        user = insert(:user) -      conn = +      results =          conn          |> assign(:user, user)          |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"]))          |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "true"}) +        |> json_response(200) -      assert results = json_response(conn, 200)        [account] = results["accounts"]        assert account["acct"] == "mike@osada.macgirvin.com"      end      test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do -      conn = +      results =          conn          |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "false"}) +        |> json_response(200) -      assert results = json_response(conn, 200)        assert [] == results["accounts"]      end diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 307221c5d..781c3f7dc 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -21,6 +21,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do    clear_config([:instance, :federating])    clear_config([:instance, :allow_relay]) +  clear_config([:rich_media, :enabled])    describe "posting statuses" do      setup do: oauth_access(["write:statuses"]) @@ -121,6 +122,32 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do                 NaiveDateTime.to_iso8601(expiration.scheduled_at)      end +    test "it fails to create a status if `expires_in` is less or equal than an hour", %{ +      conn: conn +    } do +      # 1 hour +      expires_in = 60 * 60 + +      assert %{"error" => "Expiry date is too soon"} = +               conn +               |> post("api/v1/statuses", %{ +                 "status" => "oolong", +                 "expires_in" => expires_in +               }) +               |> json_response(422) + +      # 30 minutes +      expires_in = 30 * 60 + +      assert %{"error" => "Expiry date is too soon"} = +               conn +               |> post("api/v1/statuses", %{ +                 "status" => "oolong", +                 "expires_in" => expires_in +               }) +               |> json_response(422) +    end +      test "posting an undefined status with an attachment", %{user: user, conn: conn} do        file = %Plug.Upload{          content_type: "image/jpg", @@ -370,6 +397,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        assert NaiveDateTime.diff(NaiveDateTime.from_iso8601!(response["poll"]["expires_at"]), time) in 420..430        refute response["poll"]["expred"] + +      question = Object.get_by_id(response["poll"]["id"]) + +      # closed contains utc timezone +      assert question.data["closed"] =~ "Z"      end      test "option limit is enforced", %{conn: conn} do @@ -638,6 +670,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        assert to_string(activity.id) == id      end +    test "favoriting twice will just return 200", %{conn: conn} do +      activity = insert(:note_activity) + +      post(conn, "/api/v1/statuses/#{activity.id}/favourite") +      assert post(conn, "/api/v1/statuses/#{activity.id}/favourite") |> json_response(200) +    end +      test "returns 400 error for a wrong id", %{conn: conn} do        conn = post(conn, "/api/v1/statuses/1/favourite") @@ -1216,4 +1255,23 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do      assert [] = json_response(third_conn, 200)    end + +  test "expires_at is nil for another user" do +    %{conn: conn, user: user} = oauth_access(["read:statuses"]) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "foobar", "expires_in" => 1_000_000}) + +    expires_at = +      activity.id +      |> ActivityExpiration.get_by_activity_id() +      |> Map.get(:scheduled_at) +      |> NaiveDateTime.to_iso8601() + +    assert %{"pleroma" => %{"expires_at" => ^expires_at}} = +             conn |> get("/api/v1/statuses/#{activity.id}") |> json_response(:ok) + +    %{conn: conn} = oauth_access(["read:statuses"]) + +    assert %{"pleroma" => %{"expires_at" => nil}} = +             conn |> get("/api/v1/statuses/#{activity.id}") |> json_response(:ok) +  end  end diff --git a/test/web/mastodon_api/controllers/suggestion_controller_test.exs b/test/web/mastodon_api/controllers/suggestion_controller_test.exs index c4118a576..0319d3475 100644 --- a/test/web/mastodon_api/controllers/suggestion_controller_test.exs +++ b/test/web/mastodon_api/controllers/suggestion_controller_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do    alias Pleroma.Config -  import ExUnit.CaptureLog    import Pleroma.Factory    import Tesla.Mock @@ -36,11 +35,7 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do      [other_user: other_user]    end -  clear_config(:suggestions) - -  test "returns empty result when suggestions disabled", %{conn: conn} do -    Config.put([:suggestions, :enabled], false) - +  test "returns empty result", %{conn: conn} do      res =        conn        |> get("/api/v1/suggestions") @@ -48,43 +43,4 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do      assert res == []    end - -  test "returns error", %{conn: conn} do -    Config.put([:suggestions, :enabled], true) -    Config.put([:suggestions, :third_party_engine], "http://test500?{{host}}&{{user}}") - -    assert capture_log(fn -> -             res = -               conn -               |> get("/api/v1/suggestions") -               |> json_response(500) - -             assert res == "Something went wrong" -           end) =~ "Could not retrieve suggestions" -  end - -  test "returns suggestions", %{conn: conn, other_user: other_user} do -    Config.put([:suggestions, :enabled], true) -    Config.put([:suggestions, :third_party_engine], "http://test200?{{host}}&{{user}}") - -    res = -      conn -      |> get("/api/v1/suggestions") -      |> json_response(200) - -    assert res == [ -             %{ -               "acct" => "yj455", -               "avatar" => "https://social.heldscal.la/avatar/201.jpeg", -               "avatar_static" => "https://social.heldscal.la/avatar/s/201.jpeg", -               "id" => 0 -             }, -             %{ -               "acct" => other_user.ap_id, -               "avatar" => "https://social.heldscal.la/avatar/202.jpeg", -               "avatar_static" => "https://social.heldscal.la/avatar/s/202.jpeg", -               "id" => other_user.id -             } -           ] -  end  end  | 
