Add followers endpoint.
authorRoger Braun <roger@rogerbraun.net>
Thu, 20 Jul 2017 18:29:15 +0000 (20:29 +0200)
committerRoger Braun <roger@rogerbraun.net>
Thu, 20 Jul 2017 18:29:15 +0000 (20:29 +0200)
lib/pleroma/web/router.ex
lib/pleroma/web/twitter_api/twitter_api_controller.ex
lib/pleroma/web/twitter_api/views/user_view.ex
test/web/twitter_api/twitter_api_controller_test.exs

index d92ee29bab6e36c7d984004486e7598c74969b70..84a39d81728f085c13ef6dcc2f34fba470a59651 100644 (file)
@@ -70,6 +70,8 @@ defmodule Pleroma.Web.Router do
     post "/favorites/destroy/:id", TwitterAPI.Controller, :unfavorite
 
     post "/qvitter/update_avatar", TwitterAPI.Controller, :update_avatar
+
+    get "/statuses/followers", TwitterAPI.Controller, :followers
   end
 
   pipeline :ostatus do
index 2b29b6ccfc27e765220bceb619df6e97d8f6b2bf..ea30306760857e9f8ac2b6cb3901cd3380b89ed6 100644 (file)
@@ -210,6 +210,14 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     end
   end
 
+  def followers(%{assigns: %{user: user}} = conn, _params) do
+    with {:ok, followers} <- User.get_followers(user) do
+      render(conn, UserView, "index.json", %{users: followers, for: user})
+    else
+      _e -> bad_request_reply(conn, "Can't get followers")
+    end
+  end
+
   defp bad_request_reply(conn, error_message) do
     json = error_json(conn, error_message)
     json_reply(conn, 400, json)
index fdab5be3110f9391af7a118f5b8500f936d2e6bc..24d2981fa95acee6c9ba6f31e5af79eef8cb72cf 100644 (file)
@@ -4,6 +4,14 @@ defmodule Pleroma.Web.TwitterAPI.UserView do
   alias Pleroma.Web.TwitterAPI.Utils
 
   def render("show.json", %{user: user = %User{}} = assigns) do
+    render_one(user, Pleroma.Web.TwitterAPI.UserView, "user.json", assigns)
+  end
+
+  def render("index.json", %{users: users, for: user}) do
+    render_many(users, Pleroma.Web.TwitterAPI.UserView, "user.json", for: user)
+  end
+
+  def render("user.json", %{user: user = %User{}} = assigns) do
     image = User.avatar_url(user)
     following = if assigns[:for] do
       User.following?(assigns[:for], user)
index 0281ea55ba26e90dc8c890fa275b1b46255b1155..4bf1c928b6c5e7ddb2aecbde314e964764e9998a 100644 (file)
@@ -419,6 +419,24 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
     end
   end
 
+  describe "GET /api/statuses/followers" do
+    test "it returns a user's followers", %{conn: conn} do
+      user = insert(:user)
+      follower_one = insert(:user)
+      follower_two = insert(:user)
+      not_follower = insert(:user)
+
+      {:ok, follower_one} = User.follow(follower_one, user)
+      {:ok, follower_two} = User.follow(follower_two, user)
+
+      conn = conn
+      |> assign(:user, user)
+      |> get("/api/statuses/followers")
+
+      assert json_response(conn, 200) == UserView.render("index.json", %{users: [follower_one, follower_two], for: user})
+    end
+  end
+
   defp valid_user(_context) do
     user = insert(:user)
     [user: user]