diff options
| author | Sergey Suprunenko <suprunenko.s@gmail.com> | 2019-04-23 02:47:43 +0000 | 
|---|---|---|
| committer | kaniini <nenolod@gmail.com> | 2019-04-23 02:47:43 +0000 | 
| commit | 9dd36e5bcbfddcc38cc9b5093e38a5679ab3a6e6 (patch) | |
| tree | fcb3708809496b8f60f97dc99f1e291e9b9f1945 /test/web | |
| parent | 10c40e13d2bcc011f941546b571aa3bb9f08ae0c (diff) | |
| download | pleroma-9dd36e5bcbfddcc38cc9b5093e38a5679ab3a6e6.tar.gz pleroma-9dd36e5bcbfddcc38cc9b5093e38a5679ab3a6e6.zip | |
Extend Mastodon API with public endpoint for getting Favorites timeline of any user (#789)
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 193 | 
1 files changed, 193 insertions, 0 deletions
| diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 6648b93f9..a22944088 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -1988,6 +1988,199 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      assert [] = json_response(third_conn, 200)    end +  describe "getting favorites timeline of specified user" do +    setup do +      [current_user, user] = insert_pair(:user, %{info: %{hide_favorites: false}}) +      [current_user: current_user, user: user] +    end + +    test "returns list of statuses favorited by specified user", %{ +      conn: conn, +      current_user: current_user, +      user: user +    } do +      [activity | _] = insert_pair(:note_activity) +      CommonAPI.favorite(activity.id, user) + +      response = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") +        |> json_response(:ok) + +      [like] = response + +      assert length(response) == 1 +      assert like["id"] == activity.id +    end + +    test "returns favorites for specified user_id when user is not logged in", %{ +      conn: conn, +      user: user +    } do +      activity = insert(:note_activity) +      CommonAPI.favorite(activity.id, user) + +      response = +        conn +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") +        |> json_response(:ok) + +      assert length(response) == 1 +    end + +    test "returns favorited DM only when user is logged in and he is one of recipients", %{ +      conn: conn, +      current_user: current_user, +      user: user +    } do +      {:ok, direct} = +        CommonAPI.post(current_user, %{ +          "status" => "Hi @#{user.nickname}!", +          "visibility" => "direct" +        }) + +      CommonAPI.favorite(direct.id, user) + +      response = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") +        |> json_response(:ok) + +      assert length(response) == 1 + +      anonymous_response = +        conn +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") +        |> json_response(:ok) + +      assert length(anonymous_response) == 0 +    end + +    test "does not return others' favorited DM when user is not one of recipients", %{ +      conn: conn, +      current_user: current_user, +      user: user +    } do +      user_two = insert(:user) + +      {:ok, direct} = +        CommonAPI.post(user_two, %{ +          "status" => "Hi @#{user.nickname}!", +          "visibility" => "direct" +        }) + +      CommonAPI.favorite(direct.id, user) + +      response = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") +        |> json_response(:ok) + +      assert length(response) == 0 +    end + +    test "paginates favorites using since_id and max_id", %{ +      conn: conn, +      current_user: current_user, +      user: user +    } do +      activities = insert_list(10, :note_activity) + +      Enum.each(activities, fn activity -> +        CommonAPI.favorite(activity.id, user) +      end) + +      third_activity = Enum.at(activities, 2) +      seventh_activity = Enum.at(activities, 6) + +      response = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites", %{ +          since_id: third_activity.id, +          max_id: seventh_activity.id +        }) +        |> json_response(:ok) + +      assert length(response) == 3 +      refute third_activity in response +      refute seventh_activity in response +    end + +    test "limits favorites using limit parameter", %{ +      conn: conn, +      current_user: current_user, +      user: user +    } do +      7 +      |> insert_list(:note_activity) +      |> Enum.each(fn activity -> +        CommonAPI.favorite(activity.id, user) +      end) + +      response = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites", %{limit: "3"}) +        |> json_response(:ok) + +      assert length(response) == 3 +    end + +    test "returns empty response when user does not have any favorited statuses", %{ +      conn: conn, +      current_user: current_user, +      user: user +    } do +      response = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") +        |> json_response(:ok) + +      assert Enum.empty?(response) +    end + +    test "returns 404 error when specified user is not exist", %{conn: conn} do +      conn = get(conn, "/api/v1/pleroma/accounts/test/favourites") + +      assert json_response(conn, 404) == %{"error" => "Record not found"} +    end + +    test "returns 403 error when user has hidden own favorites", %{ +      conn: conn, +      current_user: current_user +    } do +      user = insert(:user, %{info: %{hide_favorites: true}}) +      activity = insert(:note_activity) +      CommonAPI.favorite(activity.id, user) + +      conn = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") + +      assert json_response(conn, 403) == %{"error" => "Can't get favorites"} +    end + +    test "hides favorites for new users by default", %{conn: conn, current_user: current_user} do +      user = insert(:user) +      activity = insert(:note_activity) +      CommonAPI.favorite(activity.id, user) + +      conn = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") + +      assert user.info.hide_favorites +      assert json_response(conn, 403) == %{"error" => "Can't get favorites"} +    end +  end +    describe "updating credentials" do      test "updates the user's bio", %{conn: conn} do        user = insert(:user) | 
