Merge branch '204-fix' into 'develop'
authorlain <lain@soykaf.club>
Tue, 11 Aug 2020 09:18:56 +0000 (09:18 +0000)
committerlain <lain@soykaf.club>
Tue, 11 Aug 2020 09:18:56 +0000 (09:18 +0000)
Fix 500 errors when returning :no_content, fixes #2029

Closes #2029

See merge request pleroma/pleroma!2856

lib/pleroma/web/controller_helper.ex
test/support/conn_case.ex
test/web/admin_api/controllers/admin_api_controller_test.exs

index 69946fb81ee6a5571728586e8c8fbde681ccb351..6445966e020c09b6e363599afb66baf2e2f51d53 100644 (file)
@@ -18,6 +18,12 @@ defmodule Pleroma.Web.ControllerHelper do
 
   def truthy_param?(value), do: not falsy_param?(value)
 
+  def json_response(conn, status, _) when status in [204, :no_content] do
+    conn
+    |> put_resp_header("content-type", "application/json")
+    |> send_resp(status, "")
+  end
+
   def json_response(conn, status, json) do
     conn
     |> put_status(status)
index b23918dd1d981d6596dd255fd55d3584139615d2..7ef6812589b1f9c0e364bff2aae1b9a328f05a4e 100644 (file)
@@ -56,6 +56,13 @@ defmodule Pleroma.Web.ConnCase do
         [conn: conn]
       end
 
+      defp empty_json_response(conn) do
+        body = response(conn, 204)
+        response_content_type(conn, :json)
+
+        body
+      end
+
       defp json_response_and_validate_schema(
              %{
                private: %{
@@ -79,7 +86,7 @@ defmodule Pleroma.Web.ConnCase do
         end
 
         schema = lookup[op_id].responses[status].content[content_type].schema
-        json = json_response(conn, status)
+        json = if status == 204, do: empty_json_response(conn), else: json_response(conn, status)
 
         case OpenApiSpex.cast_value(json, schema, spec) do
           {:ok, _data} ->
index 7f0f026056830a4c87a3f01203013d2c1aefd3bf..eca9272e016c4014d815771ea01677a9c81b576b 100644 (file)
@@ -439,7 +439,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       user1: user1,
       user2: user2
     } do
-      assert json_response(conn, :no_content)
+      assert empty_json_response(conn)
       assert User.get_cached_by_id(user1.id).tags == ["x", "foo", "bar"]
       assert User.get_cached_by_id(user2.id).tags == ["y", "foo", "bar"]
 
@@ -457,7 +457,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     end
 
     test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
-      assert json_response(conn, :no_content)
+      assert empty_json_response(conn)
       assert User.get_cached_by_id(user3.id).tags == ["unchanged"]
     end
   end
@@ -485,7 +485,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       user1: user1,
       user2: user2
     } do
-      assert json_response(conn, :no_content)
+      assert empty_json_response(conn)
       assert User.get_cached_by_id(user1.id).tags == []
       assert User.get_cached_by_id(user2.id).tags == ["y"]
 
@@ -503,7 +503,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     end
 
     test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
-      assert json_response(conn, :no_content)
+      assert empty_json_response(conn)
       assert User.get_cached_by_id(user3.id).tags == ["unchanged"]
     end
   end
@@ -1777,7 +1777,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       conn =
         patch(conn, "/api/pleroma/admin/users/force_password_reset", %{nicknames: [user.nickname]})
 
-      assert json_response(conn, 204) == ""
+      assert empty_json_response(conn) == ""
 
       ObanHelpers.perform_all()