federation_status: Add ApiSpec
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Thu, 15 Oct 2020 23:13:52 +0000 (01:13 +0200)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Thu, 15 Oct 2020 23:14:15 +0000 (01:14 +0200)
lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex [new file with mode: 0644]
lib/pleroma/web/pleroma_api/controllers/instances_controller.ex
test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs

diff --git a/lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex
new file mode 100644 (file)
index 0000000..2c455b0
--- /dev/null
@@ -0,0 +1,40 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ApiSpec.PleromaInstancesOperation do
+  alias OpenApiSpex.Operation
+  alias OpenApiSpex.Schema
+
+  def open_api_operation(action) do
+    operation = String.to_existing_atom("#{action}_operation")
+    apply(__MODULE__, operation, [])
+  end
+
+  def show_operation do
+    %Operation{
+      tags: ["PleromaInstances"],
+      summary: "Instances federation status",
+      description: "Information about instances deemed unreachable by the server",
+      operationId: "PleromaInstances.show",
+      responses: %{
+        200 => Operation.response("PleromaInstances", "application/json", pleroma_instances())
+      }
+    }
+  end
+
+  def pleroma_instances do
+    %Schema{
+      type: :object,
+      properties: %{
+        unreachable: %Schema{
+          type: :object,
+          properties: %{hostname: %Schema{type: :string, format: :"date-time"}}
+        }
+      },
+      example: %{
+        "unreachable" => %{"consistently-unreachable.name" => "2020-10-14 22:07:58.216473"}
+      }
+    }
+  end
+end
index bd95cb5233ebe3c830a77a595c3c6194d7c5f8e4..c577f1d1e9a3187284eb5ee50714811a56b83d8c 100644 (file)
@@ -7,7 +7,9 @@ defmodule Pleroma.Web.PleromaAPI.InstancesController do
 
   alias Pleroma.Instances
 
-  # defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaInstancesController
+  plug(Pleroma.Web.ApiSpec.CastAndValidate)
+
+  defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaInstancesOperation
 
   def show(conn, _params) do
     unreachable =
index 9ce901ce31b6088f939491cbff5ec89a2c207a0d..13491ed9ce13163851be3c7d3c6a5c6462671a8d 100644 (file)
@@ -31,10 +31,8 @@ defmodule Pleroma.Web.PleromaApi.InstancesControllerTest do
     assert conn
            |> put_req_header("content-type", "application/json")
            |> get("/api/v1/pleroma/federation_status")
-           |> json_response(200) == %{
+           |> json_response_and_validate_schema(200) == %{
              "unreachable" => %{constant_host => to_string(constant_unreachable)}
            }
-
-    # |> json_response_and_validate_schema(200)
   end
 end