diff options
| author | Maksim Pechnikov <parallel588@gmail.com> | 2020-09-22 21:42:10 +0300 | 
|---|---|---|
| committer | Maksim Pechnikov <parallel588@gmail.com> | 2020-09-22 21:42:10 +0300 | 
| commit | 72d2b34d3bf47705ad5298f2ce2c6bf48a0a8e82 (patch) | |
| tree | df79362a63e25b87c492c8568e52c029a7ee7542 /test/web/mastodon_api/controllers | |
| parent | 489a107cf449a10c7f6ac9a4b8d4a7f9f7314c5c (diff) | |
| parent | 02f12ec6253093d8bedaf84d78d0f7e533745e1b (diff) | |
| download | pleroma-72d2b34d3bf47705ad5298f2ce2c6bf48a0a8e82.tar.gz pleroma-72d2b34d3bf47705ad5298f2ce2c6bf48a0a8e82.zip  | |
Merge branch 'develop' into issue/1975
Diffstat (limited to 'test/web/mastodon_api/controllers')
7 files changed, 203 insertions, 49 deletions
diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 17a1e7d66..f7f1369e4 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1442,7 +1442,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do    describe "verify_credentials" do      test "verify_credentials" do        %{user: user, conn: conn} = oauth_access(["read:accounts"]) -      [notification | _] = insert_list(7, :notification, user: user) + +      [notification | _] = +        insert_list(7, :notification, user: user, activity: insert(:note_activity)) +        Pleroma.Notification.set_read_up_to(user, notification.id)        conn = get(conn, "/api/v1/accounts/verify_credentials") diff --git a/test/web/mastodon_api/controllers/auth_controller_test.exs b/test/web/mastodon_api/controllers/auth_controller_test.exs index a485f8e41..4fa95fce1 100644 --- a/test/web/mastodon_api/controllers/auth_controller_test.exs +++ b/test/web/mastodon_api/controllers/auth_controller_test.exs @@ -122,17 +122,27 @@ defmodule Pleroma.Web.MastodonAPI.AuthControllerTest do        {:ok, user: user}      end -    test "it returns 404 when user is not found", %{conn: conn, user: user} do +    test "it returns 204 when user is not found", %{conn: conn, user: user} do        conn = post(conn, "/auth/password?email=nonexisting_#{user.email}") -      assert conn.status == 404 -      assert conn.resp_body == "" + +      assert conn +             |> json_response(:no_content)      end -    test "it returns 400 when user is not local", %{conn: conn, user: user} do +    test "it returns 204 when user is not local", %{conn: conn, user: user} do        {:ok, user} = Repo.update(Ecto.Changeset.change(user, local: false))        conn = post(conn, "/auth/password?email=#{user.email}") -      assert conn.status == 400 -      assert conn.resp_body == "" + +      assert conn +             |> json_response(:no_content) +    end + +    test "it returns 204 when user is deactivated", %{conn: conn, user: user} do +      {:ok, user} = Repo.update(Ecto.Changeset.change(user, deactivated: true, local: true)) +      conn = post(conn, "/auth/password?email=#{user.email}") + +      assert conn +             |> json_response(:no_content)      end    end diff --git a/test/web/mastodon_api/controllers/list_controller_test.exs b/test/web/mastodon_api/controllers/list_controller_test.exs index 57a9ef4a4..091ec006c 100644 --- a/test/web/mastodon_api/controllers/list_controller_test.exs +++ b/test/web/mastodon_api/controllers/list_controller_test.exs @@ -67,7 +67,7 @@ defmodule Pleroma.Web.MastodonAPI.ListControllerTest do      assert following == [other_user.follower_address]    end -  test "removing users from a list" do +  test "removing users from a list, body params" do      %{user: user, conn: conn} = oauth_access(["write:lists"])      other_user = insert(:user)      third_user = insert(:user) @@ -85,6 +85,24 @@ defmodule Pleroma.Web.MastodonAPI.ListControllerTest do      assert following == [third_user.follower_address]    end +  test "removing users from a list, query params" do +    %{user: user, conn: conn} = oauth_access(["write:lists"]) +    other_user = insert(:user) +    third_user = insert(:user) +    {:ok, list} = Pleroma.List.create("name", user) +    {:ok, list} = Pleroma.List.follow(list, other_user) +    {:ok, list} = Pleroma.List.follow(list, third_user) + +    assert %{} == +             conn +             |> put_req_header("content-type", "application/json") +             |> delete("/api/v1/lists/#{list.id}/accounts?account_ids[]=#{other_user.id}") +             |> json_response_and_validate_schema(:ok) + +    %Pleroma.List{following: following} = Pleroma.List.get(list.id, user) +    assert following == [third_user.follower_address] +  end +    test "listing users in a list" do      %{user: user, conn: conn} = oauth_access(["read:lists"])      other_user = insert(:user) diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index 6dd40fb4a..9f0481120 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -11,7 +11,7 @@ defmodule Pleroma.Web.MastodonAPI.MarkerControllerTest do      test "gets markers with correct scopes", %{conn: conn} do        user = insert(:user)        token = insert(:oauth_token, user: user, scopes: ["read:statuses"]) -      insert_list(7, :notification, user: user) +      insert_list(7, :notification, user: user, activity: insert(:note_activity))        {:ok, %{"notifications" => marker}} =          Pleroma.Marker.upsert( diff --git a/test/web/mastodon_api/controllers/search_controller_test.exs b/test/web/mastodon_api/controllers/search_controller_test.exs index 24d1959f8..04dc6f445 100644 --- a/test/web/mastodon_api/controllers/search_controller_test.exs +++ b/test/web/mastodon_api/controllers/search_controller_test.exs @@ -282,18 +282,18 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        capture_log(fn ->          {:ok, %{id: activity_id}} =            CommonAPI.post(insert(:user), %{ -            status: "check out https://shitposter.club/notice/2827873" +            status: "check out http://mastodon.example.org/@admin/99541947525187367"            })          results =            conn -          |> get("/api/v1/search?q=https://shitposter.club/notice/2827873") +          |> get("/api/v1/search?q=http://mastodon.example.org/@admin/99541947525187367")            |> json_response_and_validate_schema(200) -        [status, %{"id" => ^activity_id}] = results["statuses"] - -        assert status["uri"] == -                 "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment" +        assert [ +                 %{"url" => "http://mastodon.example.org/@admin/99541947525187367"}, +                 %{"id" => ^activity_id} +               ] = results["statuses"]        end)      end diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 5955d8334..633a25e50 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -4,9 +4,9 @@  defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do    use Pleroma.Web.ConnCase +  use Oban.Testing, repo: Pleroma.Repo    alias Pleroma.Activity -  alias Pleroma.ActivityExpiration    alias Pleroma.Config    alias Pleroma.Conversation.Participation    alias Pleroma.Object @@ -29,8 +29,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do      setup do: oauth_access(["write:statuses"])      test "posting a status does not increment reblog_count when relaying", %{conn: conn} do -      Pleroma.Config.put([:instance, :federating], true) -      Pleroma.Config.get([:instance, :allow_relay], true) +      Config.put([:instance, :federating], true) +      Config.get([:instance, :allow_relay], true)        response =          conn @@ -103,7 +103,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        # An activity that will expire:        # 2 hours -      expires_in = 120 * 60 +      expires_in = 2 * 60 * 60 + +      expires_at = DateTime.add(DateTime.utc_now(), expires_in)        conn_four =          conn @@ -113,29 +115,22 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do            "expires_in" => expires_in          }) -      assert fourth_response = -               %{"id" => fourth_id} = json_response_and_validate_schema(conn_four, 200) - -      assert activity = Activity.get_by_id(fourth_id) -      assert expiration = ActivityExpiration.get_by_activity_id(fourth_id) - -      estimated_expires_at = -        NaiveDateTime.utc_now() -        |> NaiveDateTime.add(expires_in) -        |> NaiveDateTime.truncate(:second) +      assert %{"id" => fourth_id} = json_response_and_validate_schema(conn_four, 200) -      # This assert will fail if the test takes longer than a minute. I sure hope it never does: -      assert abs(NaiveDateTime.diff(expiration.scheduled_at, estimated_expires_at, :second)) < 60 +      assert Activity.get_by_id(fourth_id) -      assert fourth_response["pleroma"]["expires_at"] == -               NaiveDateTime.to_iso8601(expiration.scheduled_at) +      assert_enqueued( +        worker: Pleroma.Workers.PurgeExpiredActivity, +        args: %{activity_id: fourth_id}, +        scheduled_at: expires_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 +      # 1 minute +      expires_in = 1 * 60        assert %{"error" => "Expiry date is too soon"} =                 conn @@ -146,8 +141,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do                 })                 |> json_response_and_validate_schema(422) -      # 30 minutes -      expires_in = 30 * 60 +      # 5 minutes +      expires_in = 5 * 60        assert %{"error" => "Expiry date is too soon"} =                 conn @@ -160,8 +155,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do      end      test "Get MRF reason when posting a status is rejected by one", %{conn: conn} do -      Pleroma.Config.put([:mrf_keyword, :reject], ["GNO"]) -      Pleroma.Config.put([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy]) +      Config.put([:mrf_keyword, :reject], ["GNO"]) +      Config.put([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy])        assert %{"error" => "[KeywordPolicy] Matches with rejected keyword"} =                 conn @@ -296,9 +291,45 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        assert real_status == fake_status      end +    test "fake statuses' preview card is not cached", %{conn: conn} do +      clear_config([:rich_media, :enabled], true) + +      Tesla.Mock.mock(fn +        %{ +          method: :get, +          url: "https://example.com/twitter-card" +        } -> +          %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/twitter_card.html")} + +        env -> +          apply(HttpRequestMock, :request, [env]) +      end) + +      conn1 = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/statuses", %{ +          "status" => "https://example.com/ogp", +          "preview" => true +        }) + +      conn2 = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/statuses", %{ +          "status" => "https://example.com/twitter-card", +          "preview" => true +        }) + +      assert %{"card" => %{"title" => "The Rock"}} = json_response_and_validate_schema(conn1, 200) + +      assert %{"card" => %{"title" => "Small Island Developing States Photo Submission"}} = +               json_response_and_validate_schema(conn2, 200) +    end +      test "posting a status with OGP link preview", %{conn: conn} do        Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) -      Config.put([:rich_media, :enabled], true) +      clear_config([:rich_media, :enabled], true)        conn =          conn @@ -1110,6 +1141,52 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do                 |> post("/api/v1/statuses/#{activity_two.id}/pin")                 |> json_response_and_validate_schema(400)      end + +    test "on pin removes deletion job, on unpin reschedule deletion" do +      %{conn: conn} = oauth_access(["write:accounts", "write:statuses"]) +      expires_in = 2 * 60 * 60 + +      expires_at = DateTime.add(DateTime.utc_now(), expires_in) + +      assert %{"id" => id} = +               conn +               |> put_req_header("content-type", "application/json") +               |> post("api/v1/statuses", %{ +                 "status" => "oolong", +                 "expires_in" => expires_in +               }) +               |> json_response_and_validate_schema(200) + +      assert_enqueued( +        worker: Pleroma.Workers.PurgeExpiredActivity, +        args: %{activity_id: id}, +        scheduled_at: expires_at +      ) + +      assert %{"id" => ^id, "pinned" => true} = +               conn +               |> put_req_header("content-type", "application/json") +               |> post("/api/v1/statuses/#{id}/pin") +               |> json_response_and_validate_schema(200) + +      refute_enqueued( +        worker: Pleroma.Workers.PurgeExpiredActivity, +        args: %{activity_id: id}, +        scheduled_at: expires_at +      ) + +      assert %{"id" => ^id, "pinned" => false} = +               conn +               |> put_req_header("content-type", "application/json") +               |> post("/api/v1/statuses/#{id}/unpin") +               |> json_response_and_validate_schema(200) + +      assert_enqueued( +        worker: Pleroma.Workers.PurgeExpiredActivity, +        args: %{activity_id: id}, +        scheduled_at: expires_at +      ) +    end    end    describe "cards" do @@ -1645,19 +1722,17 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do    test "expires_at is nil for another user" do      %{conn: conn, user: user} = oauth_access(["read:statuses"]) +    expires_at = DateTime.add(DateTime.utc_now(), 1_000_000)      {: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}} = +    assert %{"pleroma" => %{"expires_at" => a_expires_at}} =               conn               |> get("/api/v1/statuses/#{activity.id}")               |> json_response_and_validate_schema(:ok) +    {:ok, a_expires_at, 0} = DateTime.from_iso8601(a_expires_at) +    assert DateTime.diff(expires_at, a_expires_at) == 0 +      %{conn: conn} = oauth_access(["read:statuses"])      assert %{"pleroma" => %{"expires_at" => nil}} = diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 71bac99f7..c6e0268fd 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -114,8 +114,16 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do        {:ok, _reply_from_friend} =          CommonAPI.post(friend, %{status: "status", in_reply_to_status_id: reply_from_blockee}) -      res_conn = get(conn, "/api/v1/timelines/public") -      [%{"id" => ^activity_id}] = json_response_and_validate_schema(res_conn, 200) +      # Still shows replies from yourself +      {:ok, %{id: reply_from_me}} = +        CommonAPI.post(blocker, %{status: "status", in_reply_to_status_id: reply_from_blockee}) + +      response = +        get(conn, "/api/v1/timelines/public") +        |> json_response_and_validate_schema(200) + +      assert length(response) == 2 +      [%{"id" => ^reply_from_me}, %{"id" => ^activity_id}] = response      end      test "doesn't return replies if follow is posting with users from blocked domain" do @@ -333,6 +341,46 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do    describe "list" do      setup do: oauth_access(["read:lists"]) +    test "does not contain retoots", %{user: user, conn: conn} do +      other_user = insert(:user) +      {:ok, activity_one} = CommonAPI.post(user, %{status: "Marisa is cute."}) +      {:ok, activity_two} = CommonAPI.post(other_user, %{status: "Marisa is stupid."}) +      {:ok, _} = CommonAPI.repeat(activity_one.id, other_user) + +      {:ok, list} = Pleroma.List.create("name", user) +      {:ok, list} = Pleroma.List.follow(list, other_user) + +      conn = get(conn, "/api/v1/timelines/list/#{list.id}") + +      assert [%{"id" => id}] = json_response_and_validate_schema(conn, :ok) + +      assert id == to_string(activity_two.id) +    end + +    test "works with pagination", %{user: user, conn: conn} do +      other_user = insert(:user) +      {:ok, list} = Pleroma.List.create("name", user) +      {:ok, list} = Pleroma.List.follow(list, other_user) + +      Enum.each(1..30, fn i -> +        CommonAPI.post(other_user, %{status: "post number #{i}"}) +      end) + +      res = +        get(conn, "/api/v1/timelines/list/#{list.id}?limit=1") +        |> json_response_and_validate_schema(:ok) + +      assert length(res) == 1 + +      [first] = res + +      res = +        get(conn, "/api/v1/timelines/list/#{list.id}?max_id=#{first["id"]}&limit=30") +        |> json_response_and_validate_schema(:ok) + +      assert length(res) == 29 +    end +      test "list timeline", %{user: user, conn: conn} do        other_user = insert(:user)        {:ok, _activity_one} = CommonAPI.post(user, %{status: "Marisa is cute."})  | 
