TwitterAPI: Add /users/show.
authoreal <eal@waifu.club>
Tue, 14 Nov 2017 15:34:48 +0000 (17:34 +0200)
committereal <eal@waifu.club>
Tue, 14 Nov 2017 15:34:48 +0000 (17:34 +0200)
lib/pleroma/web/router.ex
lib/pleroma/web/twitter_api/twitter_api_controller.ex
test/web/twitter_api/twitter_api_controller_test.exs

index 8fe1d8ec63345a3c51846760129c32f4bcce8110..71b4a3692f5e935538961f335c8715c8bb16e91c 100644 (file)
@@ -140,6 +140,7 @@ defmodule Pleroma.Web.Router do
     get "/statuses/networkpublic_timeline", TwitterAPI.Controller, :public_and_external_timeline
     get "/statuses/user_timeline", TwitterAPI.Controller, :user_timeline
     get "/qvitter/statuses/user_timeline", TwitterAPI.Controller, :user_timeline
+    get "/users/show", TwitterAPI.Controller, :show_user
 
     get "/statuses/show/:id", TwitterAPI.Controller, :fetch_status
     get "/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation
index 125eb8a1e9393f22dff4547ceef6faa96a671a09..5e50c3b180c476fd25f2609e75c307f5e245fd49 100644 (file)
@@ -65,6 +65,19 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     |> json_reply(200, json)
   end
 
+  def show_user(conn, params) do
+    with {:ok, shown} <- TwitterAPI.get_user(params) do
+      if user = conn.assigns.user do
+        render conn, UserView, "show.json", %{user: shown, for: user}
+      else
+        render conn, UserView, "show.json", %{user: shown}
+      end
+    else
+      {:error, msg} ->
+        bad_request_reply(conn, msg)
+    end
+  end
+
   def user_timeline(%{assigns: %{user: user}} = conn, params) do
     case TwitterAPI.get_user(user, params) do
       {:ok, target_user} ->
index 6bdf29a132c54b14bcb72dfedba61f059fec94d8..b886536d6ce162092d69052a94461d568cfb3fb1 100644 (file)
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.TwitterAPI.UserView
   alias Pleroma.Web.CommonAPI
+  alias Pleroma.Web.TwitterAPI.TwitterAPI
 
   import Pleroma.Factory
 
@@ -101,6 +102,45 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
     end
   end
 
+  describe "GET /users/show.json" do
+    test "gets user with screen_name", %{conn: conn} do
+      user = insert(:user)
+
+      conn = conn
+      |> get("/api/users/show.json", %{"screen_name" => user.nickname})
+
+      response = json_response(conn, 200)
+
+      assert response["id"] == user.id
+    end
+
+    test "gets user with user_id", %{conn: conn} do
+      user = insert(:user)
+
+      conn = conn
+      |> get("/api/users/show.json", %{"user_id" => user.id})
+
+      response = json_response(conn, 200)
+
+      assert response["id"] == user.id
+    end
+
+    test "gets a user for a logged in user", %{conn: conn} do
+      user = insert(:user)
+      logged_in = insert(:user)
+
+      {:ok, logged_in, user, _activity} = TwitterAPI.follow(logged_in, %{"user_id" => user.id})
+
+      conn = conn
+      |> with_credentials(logged_in.nickname, "test")
+      |> get("/api/users/show.json", %{"user_id" => user.id})
+
+      response = json_response(conn, 200)
+
+      assert response["following"] == true
+    end
+  end
+
   describe "GET /statusnet/conversation/:id.json" do
     test "returns the statuses in the conversation", %{conn: conn} do
       {:ok, _user} = UserBuilder.insert