Polish IdempotencyPlug
authorEgor Kislitsyn <egor@kislitsyn.com>
Wed, 26 Jun 2019 18:53:36 +0000 (01:53 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Wed, 26 Jun 2019 18:53:58 +0000 (01:53 +0700)
lib/pleroma/plugs/idempotency_plug.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
test/plugs/idempotency_plug_test.exs

index 7c06be9eac1eb56c7cbd60f66565d61a9aae6b67..e99c5d279b5661cdb9d4b4d973ccf27633baee7d 100644 (file)
@@ -29,16 +29,16 @@ defmodule Pleroma.Plugs.IdempotencyPlug do
       {:ok, nil} ->
         cache_resposnse(conn, key)
 
-      {atom, message} when atom in [:ignore, :error] ->
-        render_error(conn, message)
-
       {:ok, record} ->
         send_cached(conn, key, record)
+
+      {atom, message} when atom in [:ignore, :error] ->
+        render_error(conn, message)
     end
   end
 
   defp cache_resposnse(conn, key) do
-    Plug.Conn.register_before_send(conn, fn conn ->
+    register_before_send(conn, fn conn ->
       [request_id] = get_resp_header(conn, "x-request-id")
       content_type = get_content_type(conn)
 
index d2f08d5037493cf8c79962e19e982e0d13b34f51..7cdba4cc03c2ed6a7c054568729e588074e25e44 100644 (file)
@@ -564,7 +564,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
       case CommonAPI.post(user, params) do
         {:error, message} ->
           conn
-          |> put_status(422)
+          |> put_status(:unprocessable_entity)
           |> json(%{error: message})
 
         {:ok, activity} ->
index aebc463e9dee24dcfb4ed4f557361b25f8a3dfc0..ac1735f13bb81cdb984bfbc92c2a831ce4e2ad88 100644 (file)
@@ -24,7 +24,7 @@ defmodule Pleroma.Plugs.IdempotencyPlugTest do
     |> IdempotencyPlug.call([])
     |> Conn.send_resp(status, body)
 
-    conn2 =
+    conn =
       :post
       |> conn("/cofe")
       |> put_req_header("idempotency-key", key)
@@ -33,17 +33,17 @@ defmodule Pleroma.Plugs.IdempotencyPlugTest do
       |> IdempotencyPlug.call([])
 
     assert_raise Conn.AlreadySentError, fn ->
-      Conn.send_resp(conn2, :im_a_teapot, "no cofe")
+      Conn.send_resp(conn, :im_a_teapot, "no cofe")
     end
 
-    assert conn2.resp_body == body
-    assert conn2.status == status
+    assert conn.resp_body == body
+    assert conn.status == status
 
-    assert [^second_request_id] = Conn.get_resp_header(conn2, "x-request-id")
-    assert [^orig_request_id] = Conn.get_resp_header(conn2, "x-original-request-id")
-    assert [^key] = Conn.get_resp_header(conn2, "idempotency-key")
-    assert ["true"] = Conn.get_resp_header(conn2, "idempotent-replayed")
-    assert ["application/json; charset=utf-8"] = Conn.get_resp_header(conn2, "content-type")
+    assert [^second_request_id] = Conn.get_resp_header(conn, "x-request-id")
+    assert [^orig_request_id] = Conn.get_resp_header(conn, "x-original-request-id")
+    assert [^key] = Conn.get_resp_header(conn, "idempotency-key")
+    assert ["true"] = Conn.get_resp_header(conn, "idempotent-replayed")
+    assert ["application/json; charset=utf-8"] = Conn.get_resp_header(conn, "content-type")
   end
 
   test "pass conn downstream if the cache not found" do