Add option to return all friends in twitter api.
authorlain <lain@soykaf.club>
Sat, 16 Feb 2019 16:01:15 +0000 (17:01 +0100)
committerlain <lain@soykaf.club>
Sat, 16 Feb 2019 16:01:15 +0000 (17:01 +0100)
Mainly useful for user export.

lib/pleroma/web/twitter_api/twitter_api_controller.ex
test/web/twitter_api/twitter_api_controller_test.exs

index c2f0dc2a9e331b361bb1820af6a79e743134f430..a8ef0a8cab510b99d9d5a6dc9f3631d5a1f0f4fb 100644 (file)
@@ -524,6 +524,9 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
 
   def friends(%{assigns: %{user: for_user}} = conn, params) do
     {:ok, page} = Ecto.Type.cast(:integer, params["page"] || 1)
+    {:ok, export} = Ecto.Type.cast(:boolean, params["all"] || false)
+
+    page = if export, do: nil, else: page
 
     with {:ok, user} <- TwitterAPI.get_user(conn.assigns[:user], params),
          {:ok, friends} <- User.get_friends(user, page) do
index acb03b146fee5993f4f24c281902fda4c68ed1a4..f7e40e0d33b44a8d6fdda7a2b7aad6a113485278 100644 (file)
@@ -1218,7 +1218,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
       assert Enum.sort(expected) == Enum.sort(result)
     end
 
-    test "it returns 20 friends per page", %{conn: conn} do
+    test "it returns 20 friends per page, except if 'export' is set to true", %{conn: conn} do
       user = insert(:user)
       followeds = insert_list(21, :user)
 
@@ -1242,6 +1242,14 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
 
       result = json_response(res_conn, 200)
       assert length(result) == 1
+
+      res_conn =
+        conn
+        |> assign(:user, user)
+        |> get("/api/statuses/friends", %{all: true})
+
+      result = json_response(res_conn, 200)
+      assert length(result) == 21
     end
 
     test "it returns a given user's friends with user_id", %{conn: conn} do