AdminAPI: show chat
authorAlex Gleason <alex@alexgleason.me>
Wed, 2 Sep 2020 00:49:46 +0000 (19:49 -0500)
committerAlex Gleason <alex@alexgleason.me>
Fri, 11 Sep 2020 19:10:28 +0000 (14:10 -0500)
lib/pleroma/web/admin_api/controllers/chat_controller.ex
lib/pleroma/web/api_spec/operations/admin/chat_operation.ex
lib/pleroma/web/router.ex
test/web/admin_api/controllers/chat_controller_test.exs

index b423188d756514fb0800c93970432bc7a42b2721..ac362c430f3034cdb128a4a09b50e918e62e226a 100644 (file)
@@ -13,6 +13,7 @@ defmodule Pleroma.Web.AdminAPI.ChatController do
   alias Pleroma.Plugs.OAuthScopesPlug
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView
+  alias Pleroma.Web.PleromaAPI.ChatView
 
   require Logger
 
@@ -20,7 +21,7 @@ defmodule Pleroma.Web.AdminAPI.ChatController do
 
   plug(
     OAuthScopesPlug,
-    %{scopes: ["read:chats"], admin: true} when action in [:messages]
+    %{scopes: ["read:chats"], admin: true} when action in [:show, :messages]
   )
 
   plug(
@@ -61,4 +62,12 @@ defmodule Pleroma.Web.AdminAPI.ChatController do
         |> json(%{error: "not found"})
     end
   end
+
+  def show(conn, %{id: id}) do
+    with %Chat{} = chat <- Chat.get_by_id(id) do
+      conn
+      |> put_view(ChatView)
+      |> render("show.json", chat: chat)
+    end
+  end
 end
index a382bd35aba876d1a5cb832436e5d0639217ed0a..3550d531e9c5eec0537bd3074c4ad68ae1f39896 100644 (file)
@@ -5,6 +5,7 @@
 defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do
   alias OpenApiSpex.Operation
   alias Pleroma.Web.ApiSpec.Schemas.ApiError
+  alias Pleroma.Web.ApiSpec.Schemas.Chat
   alias Pleroma.Web.ApiSpec.Schemas.FlakeID
 
   import Pleroma.Web.ApiSpec.Helpers
@@ -52,6 +53,37 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do
     }
   end
 
+  def show_operation do
+    %Operation{
+      tags: ["chat"],
+      summary: "Create a chat",
+      operationId: "AdminAPI.ChatController.show",
+      parameters: [
+        Operation.parameter(
+          :id,
+          :path,
+          :string,
+          "The id of the chat",
+          required: true,
+          example: "1234"
+        )
+      ],
+      responses: %{
+        200 =>
+          Operation.response(
+            "The existing chat",
+            "application/json",
+            Chat
+          )
+      },
+      security: [
+        %{
+          "oAuth" => ["read"]
+        }
+      ]
+    }
+  end
+
   def id_param do
     Operation.parameter(:id, :path, FlakeID, "Chat ID",
       example: "9umDrYheeY451cQnEe",
index 02836114a09d6c794355f6b1a98d3f38efb4c2b0..e4440d4424709fa50bf5fdd2c4108bc6fd9da979 100644 (file)
@@ -216,7 +216,7 @@ defmodule Pleroma.Web.Router do
     post("/media_proxy_caches/delete", MediaProxyCacheController, :delete)
     post("/media_proxy_caches/purge", MediaProxyCacheController, :purge)
 
-    get("/chats/:id", ChatController, :show)
+    get("/chats/:id", ChatController, :show)
     get("/chats/:id/messages", ChatController, :messages)
     delete("/chats/:id/messages/:message_id", ChatController, :delete_message)
   end
index f61e2a1fa01f4e6a79d927fa580bf725ecde355d..63c195b99afc99b945ca9661bdce672ac3d3ac99 100644 (file)
@@ -104,4 +104,20 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do
       assert length(result) == 3
     end
   end
+
+  describe "GET /api/pleroma/admin/chats/:id" do
+    test "it returns a chat", %{conn: conn} do
+      user = insert(:user)
+      other_user = insert(:user)
+
+      {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id)
+
+      result =
+        conn
+        |> get("/api/pleroma/admin/chats/#{chat.id}")
+        |> json_response_and_validate_schema(200)
+
+      assert result["id"] == to_string(chat.id)
+    end
+  end
 end