Add federating plug & public tests
authorhref <href@random.sh>
Tue, 6 Nov 2018 13:44:00 +0000 (14:44 +0100)
committerhref <href@random.sh>
Tue, 6 Nov 2018 13:45:04 +0000 (14:45 +0100)
lib/pleroma/web/twitter_api/twitter_api_controller.ex
test/web/node_info_test.exs
test/web/plugs/federating_plug_test.exs [new file with mode: 0644]
test/web/twitter_api/twitter_api_controller_test.exs

index 3054a8106d85fcc65d497e09f083621574500b41..83d725f13987da91f6807a3586c934fc613563b2 100644 (file)
@@ -527,6 +527,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     else
       conn
       |> forbidden_json_reply("Invalid credentials.")
+      |> halt()
     end
   end
 
index d48f40e474c03e285c327e2aac67fb43a761ac8a..a6376453caf6807b585f00d941b4cfb95750194c 100644 (file)
@@ -14,4 +14,36 @@ defmodule Pleroma.Web.NodeInfoTest do
 
     assert user.ap_id in result["metadata"]["staffAccounts"]
   end
+
+  test "returns 404 when federation is disabled" do
+    instance =
+      Application.get_env(:pleroma, :instance)
+      |> Keyword.put(:federating, false)
+
+    Application.put_env(:pleroma, :instance, instance)
+
+    conn
+    |> get("/.well-known/nodeinfo")
+    |> json_response(404)
+
+    conn
+    |> get("/nodeinfo/2.0.json")
+    |> json_response(404)
+
+    instance =
+      Application.get_env(:pleroma, :instance)
+      |> Keyword.put(:federating, true)
+
+    Application.put_env(:pleroma, :instance, instance)
+  end
+
+  test "returns 200 when federation is enabled" do
+    conn
+    |> get("/.well-known/nodeinfo")
+    |> json_response(200)
+
+    conn
+    |> get("/nodeinfo/2.0.json")
+    |> json_response(200)
+  end
 end
diff --git a/test/web/plugs/federating_plug_test.exs b/test/web/plugs/federating_plug_test.exs
new file mode 100644 (file)
index 0000000..1455a1c
--- /dev/null
@@ -0,0 +1,33 @@
+defmodule Pleroma.Web.FederatingPlugTest do
+  use Pleroma.Web.ConnCase
+
+  test "returns and halt the conn when federating is disabled" do
+    instance =
+      Application.get_env(:pleroma, :instance)
+      |> Keyword.put(:federating, false)
+
+    Application.put_env(:pleroma, :instance, instance)
+
+    conn =
+      build_conn()
+      |> Pleroma.Web.FederatingPlug.call(%{})
+
+    assert conn.status == 404
+    assert conn.halted
+
+    instance =
+      Application.get_env(:pleroma, :instance)
+      |> Keyword.put(:federating, true)
+
+    Application.put_env(:pleroma, :instance, instance)
+  end
+
+  test "does nothing when federating is enabled" do
+    conn =
+      build_conn()
+      |> Pleroma.Web.FederatingPlug.call(%{})
+
+    refute conn.status
+    refute conn.halted
+  end
+end
index 87bcdaf7101eda3b77ce2155f2d47de55d413ec6..b64f416e32a75449f52ccd9ba89044081904a35b 100644 (file)
@@ -100,6 +100,56 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
 
       assert length(response) == 10
     end
+
+    test "returns 403 to unauthenticated request when the instance is not public" do
+      instance =
+        Application.get_env(:pleroma, :instance)
+        |> Keyword.put(:public, false)
+
+      Application.put_env(:pleroma, :instance, instance)
+
+      conn
+      |> get("/api/statuses/public_timeline.json")
+      |> json_response(403)
+
+      instance =
+        Application.get_env(:pleroma, :instance)
+        |> Keyword.put(:public, true)
+
+      Application.put_env(:pleroma, :instance, instance)
+    end
+
+    test "returns 200 to unauthenticated request when the instance is public" do
+      conn
+      |> get("/api/statuses/public_timeline.json")
+      |> json_response(200)
+    end
+  end
+
+  describe "GET /statuses/public_and_external_timeline.json" do
+    test "returns 403 to unauthenticated request when the instance is not public" do
+      instance =
+        Application.get_env(:pleroma, :instance)
+        |> Keyword.put(:public, false)
+
+      Application.put_env(:pleroma, :instance, instance)
+
+      conn
+      |> get("/api/statuses/public_and_external_timeline.json")
+      |> json_response(403)
+
+      instance =
+        Application.get_env(:pleroma, :instance)
+        |> Keyword.put(:public, true)
+
+      Application.put_env(:pleroma, :instance, instance)
+    end
+
+    test "returns 200 to unauthenticated request when the instance is public" do
+      conn
+      |> get("/api/statuses/public_and_external_timeline.json")
+      |> json_response(200)
+    end
   end
 
   describe "GET /statuses/show/:id.json" do