total rebase
[anni] / test / mix / tasks / pleroma / openapi_spec_test.exs
diff --git a/test/mix/tasks/pleroma/openapi_spec_test.exs b/test/mix/tasks/pleroma/openapi_spec_test.exs
new file mode 100644 (file)
index 0000000..0143718
--- /dev/null
@@ -0,0 +1,62 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Mix.Tasks.Pleroma.OpenapiSpecTest do
+  use Pleroma.DataCase, async: true
+
+  alias Mix.Tasks.Pleroma.OpenapiSpec
+
+  @spec_base %{
+    "paths" => %{
+      "/cofe" => %{
+        "get" => %{
+          "operationId" => "Some.operation",
+          "tags" => []
+        }
+      },
+      "/mew" => %{
+        "post" => %{
+          "operationId" => "Another.operation",
+          "tags" => ["mew mew"]
+        }
+      }
+    },
+    "x-tagGroups" => [
+      %{
+        "name" => "mew",
+        "tags" => ["mew mew", "abc"]
+      },
+      %{
+        "name" => "lol",
+        "tags" => ["lol lol", "xyz"]
+      }
+    ]
+  }
+
+  describe "check_specs/1" do
+    test "Every operation must have a tag" do
+      assert {:error, ["Some.operation (get /cofe): No tags specified"]} ==
+               OpenapiSpec.check_specs(@spec_base)
+    end
+
+    test "Every tag must be in tag groups" do
+      spec =
+        @spec_base
+        |> put_in(["paths", "/cofe", "get", "tags"], ["abc", "def", "not specified"])
+
+      assert {:error,
+              [
+                "Some.operation (get /cofe): Tags #{inspect(["def", "not specified"])} not available. Please add it in \"x-tagGroups\" in Pleroma.Web.ApiSpec"
+              ]} == OpenapiSpec.check_specs(spec)
+    end
+
+    test "No errors if ok" do
+      spec =
+        @spec_base
+        |> put_in(["paths", "/cofe", "get", "tags"], ["abc", "mew mew"])
+
+      assert :ok == OpenapiSpec.check_specs(spec)
+    end
+  end
+end